PLAYER: PEDRO GANÇO CLASS: VIBECODER PLAN: MAX

~/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.

4tools
1mac mini
0yaml by hand
vibes
~/quests/01_claude_code.sh LVL 01 · MAIN QUEST

Claude Code on Mac mini

claude.com ↗ mac mini ↗

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.

🕹️ terminal🧠 max plan🔋 always on
~/quests/02_github.sh LVL 02 · MAIN QUEST

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.

🐙 repos🔑 ssh key🤖 gh cli
~/quests/03_hetzner_vps.sh LVL 03 · MAIN QUEST

Hetzner VPS

hetzner.com ↗

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.

🐳 docker🚦 traefik💶 ~5€/month
~/quests/04_cloudflare.sh LVL 04 · MAIN QUEST

Cloudflare

cloudflare.com ↗

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.

🌐 dns🛡️ proxy🎫 api token
~/quests/05_claude_md.sh SIDE QUEST

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`
🗺️ the map🤝 trust😴 you, asleep

FINAL BOSS

PRODUCTION

☠ DEFEATED ☠

This page was vibecoded with this exact setup. Speedrun time: one prompt.

🏆 ACHIEVEMENT UNLOCKED
Prompt → Production