~/pedroganco/side-projects $
VIBECODING
$ claude "ship it" --dangerously-skip-permissions
The whole stack behind my side projects. Four tools, one Mac mini, and Claude Code doing the heavy lifting. Clear the quests below and your terminal ships to production while you sip coffee.
The machine that never sleeps. A Mac mini in a drawer, Claude Code in the terminal, Max subscription so the tokens never run dry.
// install
# install Claude Code
$ curl -fsSL https://claude.ai/install.sh | bash
# first run opens the browser, sign in with your Claude account
$ claude
// give claude the keys
Log in once with /login and pick your Claude account with the Max plan. No API keys to manage, the subscription is the fuel tank.
Every project is a repo. Claude commits, pushes and opens PRs from the terminal while you watch.
// install
$ brew install gh
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github
$ gh auth login # pick SSH, upload the key
// give claude the keys
# ~/.ssh/config
Host github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
With the key in ~/.ssh and gh authenticated, Claude clones, pushes and opens PRs on its own. Test it: ask Claude to create a repo and push this page.
A cheap VPS runs a scary number of side projects. Docker for the containers, Traefik for domains and HTTPS.
// install
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_hetzner
$ pbcopy < ~/.ssh/id_ed25519_hetzner.pub
# create the server in the Hetzner console, paste the public key
$ ssh vps 'curl -fsSL https://get.docker.com | sh'
// give claude the keys
# ~/.ssh/config
Host vps
HostName <server-ip>
User pedro
IdentityFile ~/.ssh/id_ed25519_hetzner
Once `ssh vps` works without a password, Claude deploys alone: rsync the project, docker compose up, done.
DNS for every domain, proxy in front of the VPS. New idea, new subdomain, live in a minute.
// install
# add your domain, point the nameservers to Cloudflare
# create an A record → your VPS IP (proxied ✓)
// give claude the keys
# dash.cloudflare.com → My Profile → API Tokens
# template: Edit zone DNS
$ echo 'CLOUDFLARE_API_TOKEN=cf_xxx' >> ~/.secrets/cloudflare.env
With the token in a file Claude can read, DNS becomes scriptable: Claude creates the record, deploys the container and hands you the URL.
CLAUDE.md
The autonomy unlock. Write down which host aliases exist, where the tokens live and how deploys work. Claude reads it at the start of every session, and from then on one prompt fires the whole chain.
# ~/.claude/CLAUDE.md
- deploy: rsync + `ssh vps docker compose up -d --build`
- dns: token ~/.secrets/cloudflare.env
- github: key id_ed25519_github, use `gh`
FINAL BOSS
PRODUCTION
☠ DEFEATED ☠
This page was vibecoded with this exact setup. Speedrun time: one prompt.


