| name | clone-project |
| description | This skill should be used when users want to create a new gallery project for the personal portfolio website. Trigger phrases include "create gallery project", "clone project", "add portfolio project", "new case study", "create new project", or when users want to add a project to the gallery section of the portfolio. |
Clone Project
Overview
This skill automates the creation of new gallery projects for the portfolio website. It handles project scaffolding, template selection, metadata management, and content syncing using a standardized workflow.
When to Use This Skill
Use this skill when:
- User wants to create a new gallery/portfolio project
- User mentions adding a case study or project to the website
- User says "create project", "clone project", "add portfolio project"
- User needs to set up a new project page with proper structure
Workflow
Step 1: Gather Project Information
Collect the following information from the user using AskUserQuestion tool:
Required Parameters:
Template Type: Ask which layout to use
two-column- For case studies and product/design narratives with sticky left titles and right content (like Alibaba case study)stacked- For art/visual projects with vertical flow of text and images (like art project layout)
Project Slug: URL-friendly identifier (will be auto-slugified)
- Use kebab-case format (e.g., "my-design-project")
- Avoid spaces and special characters
Project Title: Full display name (e.g., "Re-Architecting Alibaba Help Center for Global Consistency")
Date: Project date in flexible formats
- Accepts:
YYYY-MM-DD,YYYY.MM,YYYY-MM, orYYYY - Will be stored as ISO
YYYY-MM-DDin gallery.json - Will be displayed as
YYYY.MMon the page
- Accepts:
Tags: Comma-separated tags (e.g., "UX Design, NLP, BART Transformer")
Company: Company or organization name (use "-" if not applicable)
Classification: Project category (must be one of):
UX/Product- UX and product design workExperiential- Experience design and installationsContent- Content strategy and social mediaVisual- Visual design and branding
Description (optional): Brief meta description for SEO
Step 2: Execute Project Creation
Run the scaffolding script from the project root directory:
node scripts/new-gallery.js \
--type <two-column|stacked> \
--slug <project-slug> \
--title "<Project Title>" \
--date "<YYYY-MM-DD | YYYY.MM | YYYY-MM | YYYY>" \
--tag "<Tag1, Tag2, Tag3>" \
--company "<Company Name>" \
--classification "<UX/Product|Experiential|Content|Visual>" \
--description "<Optional description>" \
--update-json true \
--sync true
What this does:
- Creates
gallery/<slug>/directory - Copies and customizes template files from
assets/templates/<type>/ - Generates
index.htmlwith metadata - Creates
text.mdwith template content - Creates
public/directory for images - Updates
content/gallery.jsonwith project entry (sorted by date, newest first) - Auto-syncs content from
text.mdintoindex.html
Script locations in this skill:
scripts/new-gallery.js- Main scaffolding scriptscripts/sync-gallery.js- Content sync utility (used by new-gallery.js)
Step 3: Guide Next Steps
After successful creation, inform the user of the following next steps:
Add Images:
- Place
cover.pngingallery/<slug>/public/(required for hero image) - Add body images (e.g.,
body-1.png,body-2.png) as needed - Recommend PNG/JPG format, optimized for web
- Place
Edit Content:
- Update
gallery/<slug>/text.mdwith actual project content - Follow the Markdown format in
references/GALLERY_GUIDE.md - Use
##or###for section headers - Use
####for subsection headers - Reference images as
./public/image-name.png
- Update
Re-sync Content (if needed):
- If
text.mdis updated after creation, run:node scripts/sync-gallery.js --slug <slug> - This updates the HTML between SYNC markers in
index.html
- If
Preview:
- Open
gallery/<slug>/index.htmlin browser to preview - Or use live server for real-time updates
- Open
Step 4: Verify
Confirm that:
- Project directory exists at
gallery/<slug>/ content/gallery.jsonhas been updated with new entry- Project appears in the gallery (check homepage)
Content Authoring Format
Projects use a standardized Markdown format in text.md:

# Project Title
### Project Brief
- Date: YYYY.MM
- Project Name: Project Title
- Tag: Tag 1, Tag 2
- Company: Company Name
### Section Title
Paragraph text here.

#### Subsection Title
More detailed content.
### Another Section
- Bullet point A
- Bullet point B

Key points:
- The "Project Brief" section is ignored during sync (metadata comes from gallery.json)
- Headings:
##or###for sections,####for subsections - Images: Keep in
public/directory, reference as./public/<name> - The sync script converts Markdown to HTML and injects it between sync markers
Embedding Video
Projects can include embedded video content from platforms like Vimeo or YouTube:
In text.md:
- Add video link at any position in your content flow where you want the video to appear
- Use standard Markdown link format:
[Watch the installation video](https://vimeo.com/417398448) - The video will appear in the order you place it within your content sections
In index.html:
- After running the sync script, manually add a responsive iframe embed at the corresponding position
- Use the
.video-embedwrapper class (included in templates) for responsive 16:9 aspect ratio - Example HTML structure:
<div class="video-embed"> <iframe src="https://player.vimeo.com/video/417398448?fl=pl&fe=sh" title="Video description" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen loading="lazy"> </iframe> </div>
Supported platforms:
- Vimeo: Convert link to
https://player.vimeo.com/video/VIDEO_ID - YouTube: Convert link to
https://www.youtube.com/embed/VIDEO_ID
- Vimeo: Convert link to
Reference example:
- See
gallery/my-friends-are-my-power-station/for working implementation - Shows video link in
text.mdand corresponding iframe embed inindex.html
- See
Note: The sync script does not automatically convert video links to iframes. You must manually insert the iframe HTML after syncing content.
Template Information
Two-Column Template (assets/templates/two-column/):
- Grid layout: sticky left title + scrolling right content
- Best for: Case studies, product narratives, design processes
- Responsive: Collapses to single column on mobile
Stacked Template (assets/templates/stacked/):
- Vertical flow: title above content
- Best for: Art projects, visual portfolios, galleries
- Simpler structure for image-heavy content
Both templates include:
- Hero image container (2:1 aspect ratio by default)
- Responsive design with mobile breakpoints
- SEO meta tags and Open Graph support
- Automatic fallback for missing cover images
Troubleshooting
Duplicate project error:
- Check if project with same name or URL already exists in
content/gallery.json - Use a different slug or update the existing project
Sync markers not found:
- Ensure
index.htmlcontains<!-- SYNC:CONTENT-START -->and<!-- SYNC:CONTENT-END -->markers - Templates should include these by default
Images not showing:
- Verify images are in
gallery/<slug>/public/directory - Check image paths in
text.mduse correct format:./public/<name>.ext - Ensure
cover.pngexists for hero image
Resources
scripts/
new-gallery.js- Main project scaffolding script (Node.js, no external dependencies)sync-gallery.js- Content sync utility that parses Markdown and injects into HTML
assets/
templates/two-column/- Two-column layout template filestemplates/stacked/- Stacked layout template files
references/
GALLERY_GUIDE.md- Complete documentation of the gallery workflow and standards