Ship it for real
Custom domain. Real users. Real launch.
Look back. Ten lessons in Chapter 2. A layout. A content collection with five logs. An <Image> -optimized photo. A hype button. A search island. An API endpoint. View transitions.
One thing left. Make it real.
import { defineConfig } from "astro/config";
import vercel from "@astrojs/vercel";
export default defineConfig({
output: "static", // or 'server' for full SSR
adapter: vercel(),
site: "https://mission-control.vercel.app",
}); The adapter tells Astro where it's going to live. Each provider has one — @astrojs/vercel , @astrojs/netlify , @astrojs/cloudflare , @astrojs/node for your own server.
Two commands, in your terminal:
# add the adapter
npx astro add vercel
# deploy to production (Vercel builds for you)
vercel --prod First run asks you to vercel login and link the folder to a project. After that, every vercel --prod ships a build.
Or skip the CLI entirely: push to GitHub, import the repo in Vercel's dashboard, and every git push deploys. Free, automatic, forever.
Add a custom domain in the dashboard. Point DNS at Vercel. Mission Log goes live.
your real, live URL:
https://mission-log.vercel.app
final feature checklist:
- · ✓ shared layout, no duplication
- · ✓ 4 markdown logs, typed
- · ✓ images, optimized to webp
- · ✓ hype button (real JS)
- · ✓ API endpoint + search
- · ✓ smooth page transitions
Two chapters. Twenty lessons. One real website.
You started by editing Hello, world! . You ended with a content-driven, image-optimized, partially-hydrated, view-transitioning, deploy-on-push site.
Send Mission Control the URL. They'll be jealous.