Static Websites
Strip down Takeout for static sites, portfolios, and blogs
Takeout is designed as a full-stack cross-platform framework, but it can be stripped down to create lightweight static websites. This is ideal for personal sites, portfolios, blogs, and landing pages where you don’t need authentication, databases, or real-time sync.
The result is a fast, statically-generated site that deploys to Vercel (or any static host) with a perfect Lighthouse score, while keeping the powerful Tamagui design system and One’s file-system routing.
When to use this approach
A static Takeout site is best for:
- Personal portfolios and resumes
- Blogs with MDX content
- Marketing and landing pages
- Documentation sites
- Any site without user accounts or dynamic data
If you need authentication, real-time data, or user-generated content, use the full Takeout stack instead.
What gets removed
When stripping down for static sites, you remove:
- Zero - Real-time sync, optimistic updates, local-first data
- Better Auth - Authentication, sessions, OAuth providers
- Drizzle - Database ORM and migrations
- API routes - Server endpoints (
+api.tsfiles) - SST / Uncloud - Infrastructure-as-code deployment
- Native platforms - iOS and Android builds (unless needed)
- Heavy libraries - react-native-reanimated, gesture handler, etc.
What remains
The stripped-down stack keeps:
- One - File-system routing with SSG (
+ssg.tsx) for static generation - Tamagui - Design system, theming, and responsive styles
- MDX - Blog and content authoring with
@vxrn/mdx - Theme switching - Light/dark/system themes via
@vxrn/color-scheme - TypeScript - Full type safety
- Vite - Fast builds with aggressive optimizations
Vercel deployment
Configuration
Configure vite.config.ts for Vercel:
Add vercel.json to your project root:
Setting framework: null is important - it tells Vercel to use the pre-built
output from One’s Build Output API instead of auto-detecting a framework.
Setting up your Vercel project
Option 1: Git integration (recommended)
- Push your repo to GitHub, GitLab, or Bitbucket
- Go to vercel.com/new
- Import your repository
- Vercel auto-detects settings from
vercel.json - Click Deploy
Once connected, every push to main triggers a production deploy. Pull requests automatically get preview deployments.
Option 2: CLI deploy
Terminal
Testing production build locally
You can do a basic sanity check of your production build:
Terminal
Note: This runs the Hono server from dist/, not the actual Vercel output. It’s
useful for catching build errors and checking pages render, but not a perfect
simulation of Vercel.
For true Vercel testing, use a preview deploy:
Terminal
Or push to a non-main branch - Git integration automatically creates preview deployments you can test before merging.
Custom domain setup
After your first deploy:
- Go to your project in the Vercel dashboard
- Navigate to Settings > Domains
- Add your custom domain
- Update your DNS:
- A record: Point
@to76.76.21.21 - CNAME: Point
wwwtocname.vercel-dns.com
- A record: Point
If your domain is on another Vercel account, you’ll need to add a TXT record for verification. Vercel will show you the exact record to add.
Route structure
A typical static site has minimal routes:
app/
├── _layout.tsx # Root layout with header/footer
├── (site)/
│ ├── _layout.tsx # Site wrapper
│ ├── index+ssg.tsx # Home page (static)
│ └── blog/
│ ├── index+ssg.tsx # Blog index
│ └── [slug]+ssg.tsx # Blog posts (dynamic static)
Use +ssg.tsx suffix for all pages to generate static HTML at build time or
alternatively set your defaultRenderMode setting in One to “ssg”.
How to prompt for this
When using Claude Code or similar AI tools to strip down Takeout, use prompts like this, or even just reference this very page contents.
Strip this Takeout repo down to a static website. Remove Zero, Better Auth, Drizzle, API routes, and native platforms. Keep One with SSG mode, Tamagui, MDX for blog content, and theme switching. Configure for Vercel deployment.
Or more specifically:
Remove these from the Takeout repo:
- All
@rocicorp/zeroandover-zerodependencies and code- Better Auth and all auth-related files
- Drizzle, database schemas, and migrations
- API routes (app/api/ directory)
- SST and Uncloud config
- Native-only dependencies (reanimated, gesture handler, bottom-tabs)
- iOS and Android directories
Keep Tamagui, One with SSG, MDX, and theme switching. Update vite.config.ts for Vercel deploy.
Key files to modify
When stripping down manually, focus on these files:
- package.json - Remove unused dependencies, update scripts
- vite.config.ts - Set
deploy: ‘vercel’anddefaultRenderMode: ‘ssg’ - app/ - Remove auth routes, API routes, and app-specific pages
- src/ - Remove Zero queries, auth hooks, and server utilities
- tsconfig.json - Remove paths for deleted packages
Example: natewienert.com
See github.com/natewienert/natewienert for a complete example of a stripped-down Takeout site.
The result is ~33 source files with:
- Home page with projects and timeline
- Blog with MDX posts
- Theme switching (light/dark/system)
- Minimal Tamagui components
- Vercel deployment
Final package.json has only 6 main dependencies:
Build and deploy
Terminal
The build generates static HTML in .vercel/output/static - no serverless
functions needed for pure SSG sites.
Next steps
- Deployment Overview - Full deployment options
- Highlights - What makes Takeout unique
- One Documentation - File-system routing details
Edit this page on GitHub.