Intro to Vibe Coding

Challenge 06about 60 minutes

Ship It

Mission. Put what you built on the real internet, with a link you can send to your mom. (Or your investors.)

😱 The story

Everything you've built so far lives in a private world called localhost β€” "just for me, on this machine, only while my tools are running." It's a diary entry. The moment you send a link to localhost to a friend, you learn the diary-entry problem: they can't open it. Nobody can.

Shipping (or deploying) means copying your finished work to a computer whose full-time job is showing your site to the world. Your site stops being a diary entry and becomes a business card β€” a URL that works on any phone, anywhere, while you sleep.

The secret pros won't tell you: for the sites you're building, shipping takes about 10 minutes and costs nothing. The rest of this challenge is learning the loop that makes shipping routine, and one safety rule that matters forever.

🧰 What you'll learn

  • What deploying actually is (copying your work to an always-on computer)
  • GitHub Pages β€” free hosting straight from your Challenge-1 GitHub repo
  • The ship loop: change β†’ save β†’ push β†’ live
  • The one new security rule: secrets belong on the server, never in shipped code

πŸ“‹ Before you start

  • Challenge 1 done β€” project on GitHub (this is the ticket to ride)
  • A page you're not embarrassed to show humans. Almost-ready counts.

Part A β€” Your first launch (15 min)

For pages made of plain files (like your About Me and bakery pages β€” pros call these static sites: just paper, no machinery), GitHub hosts them free.

  1. On your repo's GitHub page: Settings β†’ Pages.
  2. Under "Build and deployment", set Source to Deploy from a branch, pick your main branch and / (root), and Save.
  3. Wait for the green check (1–3 minutes). Refresh until you see: "Your site is live at https://YOUR-USERNAME.github.io/vibe-coding-course/"
  4. Open it. On your phone. This is the moment. Send it to one person who will be nice about it.

πŸ€– If any button doesn't look like this (GitHub rearranges its furniture sometimes): ask your AI, "Walk me through enabling GitHub Pages for my repo, step by step, for the current GitHub layout."

Part B β€” The ship loop (15 min)

Here's the professional rhythm you'll use forever:

change (small bite)  β†’  review the diff  β†’  commit  β†’  push  β†’  live in ~1 minute

Run the loop twice right now:

  1. Ask for a small change that's worth the world seeing β€” e.g.:

    Add a line to my footer: "Last updated [today's date]".
    Change nothing else, show me the diff first.
    
  2. Review it (Challenge 5, three questions). Commit. Push.

  3. Watch your live site update about a minute later. No servers, no settings.

  4. Do it once more with a change of your choice.

Notice what you've assembled across this course: prompt (C3) β†’ diff review (C5) β†’ commit (C1) β†’ secrets check (C2) β†’ push β†’ live. That pipeline is professional software development. You're doing the real loop, just calmer.

Part C β€” When your app needs a brain (15 min, reading challenge)

Static sites are paper: text, images, buttons that work in the browser. But some ideas need machinery β€” saving a guestbook entry so it exists tomorrow, sending an email, storing passwords. That machinery is a server (a computer running your logic, in the cloud), and you'll know you need one when your idea involves remembering or doing things after the page closes.

You don't need to build a server today, but you need the map:

  • Static (paper): portfolio, event invite, bakery menu, About Me β†’ GitHub Pages, free, perfect.
  • Dynamic (paper + machinery): anything that saves data, has user accounts, or sends messages β†’ you'll eventually deploy to a hosting service (free tiers exist for all of them) and β€” this is the important part β€”

⚠️ The shipping security rule (Challenge 2 grows up): the moment you deploy anything dynamic, your secrets move from your .env drawer to the hosting service's settings panel (usually called "Environment Variables" or "Secrets"). Never paste a real API key into code because "it needs to be on the server anyway." It gets there through the settings panel, still never written in your files. When you get there, ask your AI: "How do I add my .env values as environment variables on this host?"

And the flip side to check today, on your fresh static site: view your live site's source (right-click β†’ View Page Source) and search for anything that looks like a key (sk-, key=, token). Nothing there? Ship clean.

Part D β€” Name it (optional, 10 min)

your-username.github.io/vibe-coding-course is honest but not lovely. A domain is your site's own name β€” flourandfog.com β€” rented yearly (~$10–15) from a registrar (e.g. Namecheap, Cloudflare). Buying one and connecting it is a nice 30-minute quest for another day; ask your AI "walk me through connecting a custom domain to GitHub Pages" when the moment comes. For now: free subdomain, fully respectable.


πŸ€– Prompts worth stealing

  • "Is my project a static site or does it need a server? Explain like I'm new."
  • "My GitHub Pages site shows the wrong thing / a 404. Walk me through diagnosing it." (80% of the time: files in a subfolder, or the push didn't happen β€” the loop skipped a step.)
  • "Before I deploy, check the project for anything that shouldn't be public: secrets, real names, phone numbers, API keys." ← make this a habit
  • "Help me write a one-line announcement for shipping my site."

βœ… You passed when…

  • A URL of yours loads on your phone, on real internet
  • Someone else has opened your link
  • You ran the full ship loop twice: change β†’ review β†’ commit β†’ push β†’ live
  • You checked your live source code for secrets (nothing found, or you rotated)
  • You can explain: static = paper, dynamic = paper + machinery

πŸ“š Jargon translator

Term Plain English
localhost Your private rehearsal β€” only visible on your machine
Deploy / ship Copy finished work to an always-on computer the world can reach
Hosting The always-on computer showing your site to the world
GitHub Pages Free hosting for static sites, straight from your repo
Static site Paper: files served as-is. Fast, free, no memory
Server / backend Machinery: code that runs in the cloud and remembers things
Domain Your site's own rented name, like flourandfog.com
404 "Nothing lives at this address" β€” usually a typo or a missing push

πŸ†˜ When it goes wrong

  • "404 not found" on your live site. First: did you push? (The live site updates from GitHub, not from your laptop.) Second: is the page file in the repo root? Ask your AI to check both.
  • Site live but stale β€” changes missing. The push didn't include your latest commit, or the browser cached the old version. Hard-refresh (Cmd+Shift+R). Then git log and compare what's on GitHub.
  • "Your site is taking forever to build." Wait 3 minutes. GitHub Pages is free and unhurried. Refresh the Actions/Settings page before diagnosing.
  • You accidentally deployed something you shouldn't have (a real name, a key, a phone number). Same protocol as Challenge 2: rotate/revoke first if it was a secret, then remove the content, push the cleaned version. Note: sites may be archived by third parties β€” the rotation matters more than the deletion.