Highlights
What makes Takeout unique
NOTE: this is a placeholder
One
- Platform divergence -
.native.tsx, .ios.tsx, .android.tsx, .web.tsx suffixes let you share routes but completely diverge UI per platform
- Mixed render modes - static (
+ssg.tsx), server-rendered, or client-only pages from the same router
- Typed routes -
createRoute() with auto-generated routes.d.ts for full type safety on params and links
- Native navigation -
withLayoutContext() wraps react-navigation for native tab bars, headers, and gestures
- API routes -
+api.ts suffix with typed endpoints, catch-all patterns
- LCP optimization -
experimental_scriptLoading: 'after-lcp-aggressive' defers JS until after paint
LiveStore
- Local-first reads - feature screens query local SQLite read models through LiveStore
- Event-sourced writes - app state changes are explicit domain events
- Cloudflare sync - Durable Objects provide the shared sync backend
- Feature-owned data hooks - UI modules consume domain data without coupling to store infrastructure
- Offline-friendly workflows - collection and painting flows stay responsive while sync catches up
Tamagui
- Dual animation drivers - CSS animations for static pages (lighter), spring physics for app pages (smoother)
- Theme-conditional styles -
$theme-dark and $theme-light props directly in styled()
- Group selectors -
$group-button-hover for parent-scoped state without prop drilling
- Client-side theme hydration - themes load from CSS variables, not JS bundle
Better Auth
- Cross-platform sessions - shared auth client for web and native
- Phone-first signup - generates temp email for phone-only users
- Database hooks - auto-creates public profile and user state on signup
- Invite system - whitelist + invite codes with use limits and expiration
Drizzle
- Public/private schema split - public and private server tables remain explicit
- PostgreSQL triggers - denormalized counters maintained at database level
- Migration runner - keeps server schema changes reviewable and reproducible
SST / Cloudflare
- Cloudflare home - SST manages the Cloudflare deployment target
- Durable Object sync - LiveStore sync backend runs close to users
- R2 media storage - uploaded media stays out of the event log
- Wrangler local dev - sync backend can run locally during development
CI/CD
- Commit-gated native builds -
native: prefix in commit triggers expensive iOS/Android builds
- Expo fingerprint caching - JS-only changes skip native rebuild entirely
- Auto OTA deploys - hot updates deploy automatically after CI succeeds on main
Scripts
- Local overrides - your
./scripts/ shadows built-in scripts
- Parallel runner - color-coded output with CPU-aware concurrency
- AI-assisted sync -
tko sync loads prompt and spawns claude/cursor/aider
Environment
- Single source of truth -
package.json env section generates server exports and CI config
- SST state integration - pull production env vars from deployed AWS resources