How it works
You work entirely through your Claude Code, in two phases. First you turn a Figma frame into a live page. Then you polish that page until it is client-ready. The page is what the client sees, so the polish is where it gets finished.
Publish
One command pulls your Figma frame and builds a live, responsive web page with HTTPS, on its own client subdomain.
Finish it
Pull the live page down, let Claude edit the real page (copy, spacing, last touches), push it back live. Then share with the client.
Give your Claude Code its brief: download this and add it as a section to your existing CLAUDE.md. Do not replace your file, paste it in alongside whatever is already there. It holds the exact commands and rules.
↓ Download the CLAUDE.md sectionOne-time setup
Do this once. Hand these blocks to your Claude Code and it will wire everything up.
Install your key
Save the hamid-deploy file Omar sent you to ~/.ssh/hamid-deploy, lock its permissions, and add the server to your SSH config.
chmod 600 ~/.ssh/hamid-deploy
# add this to ~/.ssh/config
Host succ-lp
HostName 18.246.162.246
User deploy
IdentityFile ~/.ssh/hamid-deploy
IdentitiesOnly yesSet your own Figma token
When to do this: right now, before your first publish, to replace the temporary starter token already on the server. After that, you only set it again to rotate it, or if a publish ever fails with a token error.
In Figma: avatar, then Settings, then Security, then Personal access tokens. Generate a new token with scope File content: Read-only. Then register it on the server (it stays in your own account there, nobody else can read it):
$ ssh succ-lp 'succ-deploy set-token figd_your_token_here'
It prints your Figma account name on success. Re-run anytime to rotate.
Test the connection
Confirm your Claude Code can reach the server.
$ ssh succ-lp 'echo connected'Phase 1 · Publish from Figma
Turn a Figma frame into a live page. One client at a time, each on its own subdomain.
Copy the Figma frame link
In Figma, right-click the frame you want to publish, then choose Copy link to selection. The link must contain node-id.
Tell your Claude Code to publish
Pick a short client name (lowercase, hyphens, no spaces). That becomes the subdomain.
$ ssh succ-lp 'succ-deploy acme-skincare "<figma-frame-link>"'
Result: https://acme-skincare.succession.media
New client? Settle the DNS record first
A brand-new client subdomain needs one DNS A record before it can go live. You choose who adds it:
Add the record yourself
In the DNS panel, add an A record <client>.succession.media pointing to 18.246.162.246.
Send it to Omar
One command posts the exact record to Omar in the ops Slack channel.
$ ssh succ-lp 'succ-deploy request-dns acme-skincare'
Phase 2 · Polish before the client
The published page is the starting point, not the finish. Now you finish it: tell your Claude Code what to change and it edits the real page. This is the step that makes it client-ready.
Pull the live page down
Bring the published page into a local folder your Claude Code can edit.
$ rsync -avz succ-lp:/var/www/acme-skincare/ ~/succession-lps/acme-skincare/
Let Claude make the last touches
Tell your Claude Code what to fix in plain language: copy, headlines, spacing, links, anything the auto-build missed. It edits ~/succession-lps/acme-skincare/index.html directly. Images sit in the assets/ folder beside it.
Push it back live, then share
Changes go live instantly, no rebuild.
$ rsync -avz ~/succession-lps/acme-skincare/ succ-lp:/var/www/acme-skincare/
Open the live URL, confirm it looks right, then send it to the client.
House rules
- You run succ-deploy (Phase 1) and rsync to and from the server (Phase 2). Never touch the server config or other clients' folders.
- No em dashes or en dashes in any copy. Use commas, periods, or colons.
- If a publish throws an error, send the full error text to Omar. Do not try to fix the server yourself.
- Your key and your Figma token are yours. Keep them private.