π± 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.
- On your repo's GitHub page: Settings β Pages.
- Under "Build and deployment", set Source to Deploy from a branch,
pick your
mainbranch and/ (root), and Save. - 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/" - 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:
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.Review it (Challenge 5, three questions). Commit. Push.
Watch your live site update about a minute later. No servers, no settings.
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
.envdrawer 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). Thengit logand 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.