Deploy a static site to S3 + CloudFront in 5 minutes.
Push a static HTML/CSS/JS site (or Astro / 11ty / Hugo / VitePress build output) to Lander. Auto-detects static, ships to S3 + CloudFront with auto SSL. ~$0.50/mo per site, instant cold start.[walkthrough · 5 minutes]
01
Lander auto-detects static sites by looking for an index.html in common output dirs (`dist`, `public`, `build`, `out`). No Dockerfile needed.Make sure your build outputs to ./dist or ./public
02
lander.host/onboard → Google → Free plan (no card). Install GitHub App, pick repo, push to default branch.Sign up — Free plan covers 3 static sites
03
Lander runs your build (auto-detects from package.json scripts; falls back to looking for an existing dist/), uploads files to a per-customer S3 bucket, fronts it with CloudFront + ACM, and creates a Route53 record at <slug>.app.lander.host.First deploy
04
GitHub webhook triggers a rebuild. Files diff-uploaded to S3 (only changed files). CloudFront invalidation runs automatically. Live in <60s.Subsequent pushes
[why · lander vs vercel · railway · render]
- →Free plan permits commercial use — Vercel's Hobby tier doesn't.
- →Auto-detected static = ~$0.50/mo per site, vs $9/mo for Fargate. Same custom-domain support.
- →Real CloudFront edge cache, not a serverless reseller.
[gotchas]
- ·Custom 404 pages: name them `404.html` at the root of your dist/ — Lander wires CloudFront's custom-error-response config to point there.
- ·SPA routing: if you're shipping React/Vue/Svelte SPAs, set the build output to `dist/` and Lander auto-configures CloudFront to fall back to `index.html` for client-side routing.
- ·Don't put `.env.local` in the build output. Lander gitignores common env files but double-check your dist/.
[other stacks · same flow]