Claude-skill-registry clone-project
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.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/clone-project" ~/.claude/skills/majiayu000-claude-skill-registry-clone-project && rm -rf "$T"
skills/data/clone-project/SKILL.mdClone 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
- For case studies and product/design narratives with sticky left titles and right content (like Alibaba case study)two-column
- For art/visual projects with vertical flow of text and images (like art project layout)stacked
-
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
, orYYYY-MMYYYY - Will be stored as ISO
in gallery.jsonYYYY-MM-DD - Will be displayed as
on the pageYYYY.MM
- 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 and product design workUX/Product
- Experience design and installationsExperiential
- Content strategy and social mediaContent
- Visual design and brandingVisual
-
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
directorygallery/<slug>/ - Copies and customizes template files from
assets/templates/<type>/ - Generates
with metadataindex.html - Creates
with template contenttext.md - Creates
directory for imagespublic/ - Updates
with project entry (sorted by date, newest first)content/gallery.json - Auto-syncs content from
intotext.mdindex.html
Script locations in this skill:
- Main scaffolding scriptscripts/new-gallery.js
- Content sync utility (used by new-gallery.js)scripts/sync-gallery.js
Step 3: Guide Next Steps
After successful creation, inform the user of the following next steps:
-
Add Images:
- Place
incover.png
(required for hero image)gallery/<slug>/public/ - Add body images (e.g.,
,body-1.png
) as neededbody-2.png - Recommend PNG/JPG format, optimized for web
- Place
-
Edit Content:
- Update
with actual project contentgallery/<slug>/text.md - 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
is updated after creation, run:text.mdnode scripts/sync-gallery.js --slug <slug> - This updates the HTML between SYNC markers in
index.html
- If
-
Preview:
- Open
in browser to previewgallery/<slug>/index.html - Or use live server for real-time updates
- Open
Step 4: Verify
Confirm that:
- Project directory exists at
gallery/<slug>/
has been updated with new entrycontent/gallery.json- 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
directory, reference aspublic/./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
wrapper class (included in templates) for responsive 16:9 aspect ratio.video-embed - 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
for working implementationgallery/my-friends-are-my-power-station/ - Shows video link in
and corresponding iframe embed intext.mdindex.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
containsindex.html
and<!-- SYNC:CONTENT-START -->
markers<!-- SYNC:CONTENT-END --> - Templates should include these by default
Images not showing:
- Verify images are in
directorygallery/<slug>/public/ - Check image paths in
use correct format:text.md./public/<name>.ext - Ensure
exists for hero imagecover.png
Resources
scripts/
- Main project scaffolding script (Node.js, no external dependencies)new-gallery.js
- Content sync utility that parses Markdown and injects into HTMLsync-gallery.js
assets/
- Two-column layout template filestemplates/two-column/
- Stacked layout template filestemplates/stacked/
Global references
- Complete documentation of the gallery workflow and standards/.claude/references/GALLERY_GUIDE.md