vibelink-push
/vibelink-push
Share the current project via Vibelink.
What this skill does
- Analyzes the project to detect name, description, and technologies
- Detects if this is a remix of another vibelink project
- Starts the dev server (if applicable)
- Takes a screenshot of the running app (if browser tools available)
- Creates or updates
vibelink.jsonmetadata - Zips the project (excluding node_modules, .git, etc.)
- Uploads to vibelink.to
- Returns the shareable link
Instructions
When the user runs /vibelink-push, follow these steps:
Step 1: Analyze the project
Look for these files to understand the project:
package.json- for name, description, dependenciesREADME.md- for descriptionvibelink.json- existing metadata (if any)- Source files - to detect technologies
Detect technologies by looking at:
- Dependencies in package.json (React, Vue, Svelte, etc.)
- File extensions (.ts, .tsx, .py, .rs, etc.)
- Config files (tailwind.config.js, vite.config.ts, etc.)
Step 2: Check for existing vibelink.json and detect remixes
Check if vibelink.json exists and examine it:
Case A: No vibelink.json exists
- This is a new project
- Generate a new projectId
- Ask user for name, description, author
Case B: vibelink.json exists with NO forkedFrom field
- This is the original project being updated
- Keep the same projectId
- Update metadata if needed
Case C: vibelink.json exists WITH a forkedFrom field, but same author
- This is the user's own remix being updated
- Keep the same projectId
- Update metadata if needed
Case D: vibelink.json exists and project is in ~/vibelinks/ directory
- This was downloaded from vibelink - it's a remix!
- MUST generate a NEW projectId (never overwrite someone else's project)
- Set
forkedFromto the original projectId - Ask user: "This looks like a remix of {originalName}. What do you want to call your version?"
- Suggest a name like "{originalName} Remix" or let them choose
Step 3: Check for existing project ID
For NEW projects:
- Do NOT generate a project ID - the server will generate one
- The server returns the generated ID in the response
For UPDATES (when vibelink.json already has a projectId and you have a saved token):
- Use the existing projectId from vibelink.json
- Include the saved author token
Step 4: Try to capture a preview screenshot
If browser automation tools (mcp__claude-in-chrome__*) are available:
- Detect the dev server command and port from package.json scripts or common patterns
- Start the dev server in the background
- Wait for it to be ready (check if port is listening)
- Navigate to localhost:{port} using mcp__claude-in-chrome__navigate
- Take a screenshot using mcp__claude-in-chrome__computer with action: "screenshot"
- Save the screenshot to
./vibelink-preview.png - Stop the dev server
If browser tools are not available or the app can't be started, skip this step.
Step 5: Create the zip
Create a zip file excluding:
node_modules/.git/dist/build/.next/__pycache__/*.pyc.env(but include.env.exampleif it exists).DS_Storevibelink-upload.zip(previous upload)
Use: zip -r vibelink-upload.zip . -x "node_modules/*" -x ".git/*" ...
Step 6: Upload to vibelink.to
Determine if this is a NEW project or UPDATE:
Check if vibelink.json has a projectId AND you have a saved token in ~/.vibelink-tokens/{projectId}:
- If BOTH exist: this is an UPDATE
- Otherwise: this is a NEW project
Upload the project using curl:
For NEW projects (server generates the ID):
curl -X POST https://vibelink.to/upload \
-F "metadata=@vibelink.json" \
-F "zip=@vibelink-upload.zip" \
-F "preview=@vibelink-preview.png" # only if preview exists
For UPDATES (include projectId and authorToken):
curl -X POST https://vibelink.to/upload \
-F "projectId={projectId}" \
-F "authorToken={token}" \
-F "metadata=@vibelink.json" \
-F "zip=@vibelink-upload.zip" \
-F "preview=@vibelink-preview.png" # only if preview exists
Handle the response:
The response JSON includes:
projectId: The project's ID (server-generated for new projects)url: The shareable URLisUpdate: Whether this was an updateauthorToken: (Only for new projects) Save this!
On success (200):
- Parse the JSON response to get the
projectId - If response contains
authorToken:- Create tokens directory:
mkdir -p ~/.vibelink-tokens - Save token:
echo "{token}" > ~/.vibelink-tokens/{projectId} - Update vibelink.json with the server-generated
projectId
- Create tokens directory:
- Display the shareable link
Error responses:
- 403 Forbidden: Invalid or missing author token for update
- 404 Not Found: Trying to update a project that doesn't exist
- 413 Payload Too Large: Project exceeds 100MB limit
- 429 Rate Limited: Exceeded 100MB/hour upload limit
On successful upload, display:
For NEW projects:
✅ Uploaded to Vibelink!
Project: {name}
{Remixed from: {originalName} - if applicable}
🔗 https://vibelink.to/{projectId}
Share this link - anyone can open it in Claude Code!
🔑 Your author token has been saved to ~/.vibelink-tokens/{projectId}
You'll need this token to update your project later.
For UPDATES:
✅ Updated on Vibelink!
Project: {name}
🔗 https://vibelink.to/{projectId}
Step 7: Clean up
Optionally remove the zip file after successful upload (keep vibelink.json).
Example vibelink.json - New project
{
"name": "Weather Dashboard",
"description": "A real-time weather dashboard with beautiful visualizations",
"author": "alexstein",
"projectId": "weather-dashboard-x7k2",
"technologies": ["React", "TypeScript", "Tailwind CSS", "OpenWeather API"],
"preview": {
"type": "image",
"src": "./vibelink-preview.png"
}
}
Example vibelink.json - Remix
{
"name": "Weather Dashboard Dark Mode",
"description": "Added dark mode and hourly forecasts to the weather dashboard",
"author": "friendname",
"projectId": "weather-dashboard-dark-k9p2",
"forkedFrom": "weather-dashboard-x7k2",
"technologies": ["React", "TypeScript", "Tailwind CSS", "OpenWeather API"],
"preview": {
"type": "image",
"src": "./vibelink-preview.png"
}
}
Important notes
- Always ask for confirmation before uploading
- Don't include sensitive files (.env, credentials, etc.)
- NEVER overwrite someone else's project - always create a new ID for remixes
- If the project is in ~/vibelinks/, it was downloaded and is definitely a remix
- Give credit by setting
forkedFromwhen remixing - Author tokens are stored in
~/.vibelink-tokens/- these are needed to update projects - If you lose your author token, you cannot update that project (create a new one instead)
Limits
Per-project size limit: 100MB
Vibelink is for small vibe-coded projects, not large repositories.
After creating the zip, check its size:
du -h vibelink-upload.zip
- Under 100MB: Good to go!
- Over 100MB: Stop and warn the user. Suggest:
- Make sure node_modules, .git, dist, build are excluded
- Remove large assets (videos, large images)
- Consider if this project is too big for vibelink
Rate limit: 100MB per hour per user
Users can upload up to 100MB total per hour. If rate limited, they'll need to wait before uploading more.