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
/.claude/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
Global references
/.claude/references/GALLERY_GUIDE.md- Complete documentation of the gallery workflow and standards
微信扫一扫