Ship your SaaS faster.
Beaker Stack is the foundation we wished existed for shipping real B2C SaaS: one product, two surfaces, one backend, one deploy pipeline. Web and mobile from a shared codebase, auth and billing past the demo, a three-environment pipeline that catches mistakes before production, and a structure that AI coding agents can modify without breaking things.
React + Vite on the web. React Native + Expo on mobile. Supabase underneath. Stripe when you take money.
beakerstack.com · Quick start · Releases
The wedge. A credible B2C app needs web, iOS, Android, auth, billing, entitlements, and a marketing site that ranks — not eventually, from day one. Most templates give you one slice. Stitching the rest is a four-to-six-week integration project before you write product code. Beaker Stack is that work already done, in a shape that still holds when you customize it.
One codebase, not three products that drift. The slow death of cross-platform apps is duplicated business logic: validation on web, different validation on mobile, billing hooks that only exist on one surface. Shared hooks, shared types, shared billing in packages/shared mean one bug, one fix, three platforms. That is not a reuse percentage; it is how you keep “one product” true after the fork.
Three environments because “works on my machine” is not a release strategy. B2C apps that take payments cannot ship migrations that break production, and stakeholders need to click a feature in a PR, not read a diff. Beaker Stack mirrors your branch model in Supabase — local Docker, shared PR preview DB, staging on develop, production on main — and deploys path-based web previews so the artifact under review is the running change.
The test pyramid (unit, integration, E2E, database) catches regressions across web and mobile in a single PR, before merge. Optional EAS Update channels align mobile to the same preview → staging → production flow.
Built for AI coding agents. Dozens of full-stack templates exist. Few say plainly: we designed this to be modified by AI coding agents, and here is how. Typed landing and billing configs fail loudly instead of silently rendering wrong copy. Schema-generated types tie the database to TypeScript so an agent cannot drift from RLS reality. Tests are colocated with a documented decision matrix so an agent knows where new coverage belongs. Monorepo boundaries scope changes. When an agent still ships something broken, PR previews and CI are the safety net — not hope.
Fork the template; update the packages. Every template fork diverges immediately — that is fine. Beaker Stack does two things about it. CalVer tags (2026.001, …) mark exact snapshot baselines so you know what you forked and can merge upstream deliberately (docs/UPGRADING.md). Reusable pieces ship as @beakerstack/* npm packages (semver, Changesets) so you can bump test helpers or billing without re-merging the whole monorepo. See docs/VERSIONING.md.
| Distribution | What it is |
|---|---|
| Template | Fork or “Use this template”; CalVer tags + GitHub Releases |
| npm packages | Optional @beakerstack/* for existing apps; semver via Changesets |
| Package | Status | Install |
|---|---|---|
@beakerstack/test-utils |
Published on npm (0.0.1; workspace may show 0.0.0 until release PR merges) |
npm i -D @beakerstack/test-utils |
@beakerstack/billing |
In template (npm planned) | Workspace in fork today |
@beakerstack/shared |
In template (npm planned) | Workspace in fork today |
Reference inventory — the argument is above.
| Area | What you get | Doc |
|---|---|---|
| Apps | Web (Vite), mobile (Expo), shared packages/* |
ARCHITECTURE |
| Auth | Email/password, Google OAuth, optional Apple; RLS-first profiles; schema-generated types | OAUTH |
| Billing | Stripe subscriptions (not one-off checkout-only), plan gates, customer portal, usage metering | stripe-billing-setup |
| Marketing | Config-driven landing; prerendered SEO home (canonical + Open Graph) | landing README |
| CI/CD | Path-based PR previews on AWS (S3/CloudFront), staging on develop, production on main, EAS channels |
pr-preview-setup |
| Setup | npm run setup / setup:full (local + optional full cloud) |
QUICKSTART |
| Tests | Unit, integration, Maestro E2E, pgTAP DB tests; colocated with decision matrix | TESTING |
| Agents | Typed configs, generated DB types, package boundaries, test placement rules — conventions in ARCHITECTURE + TESTING | ARCHITECTURE, TESTING |
Stack: React 18.2, Vite 5, Expo SDK ~50, React Native 0.73, Node 20 in CI.
| Billing UI | Environments pipeline | Web + mobile |
|---|---|---|
![]() |
![]() |
![]() |
git clone https://github.com/<your-org>/<your-repo>.git
cd <your-repo>
npm install
npm run setupThe setup wizard handles Docker Supabase, .env.local, and type generation. Full cloud + CI: read docs/setup-prep-checklist.md before npm run setup:full, then QUICKSTART.md.
Node.js 20.19+ (>=20.19.0 in package.json; matches CI). Docker Desktop + Supabase CLI for local work.
npm run rename -- --from "Beaker Stack" --to "Your Product" --dry-runBeakerStack/
├── apps/web, apps/mobile
├── packages/shared, packages/billing, packages/test-utils
├── supabase/ # migrations, Edge Functions
├── tests/ # integration & E2E
├── scripts/ # setup, deploy, codegen
└── docs/
| Topic | Doc |
|---|---|
| First run | QUICKSTART.md |
| All guides | docs/README.md |
| Development | docs/DEVELOPMENT.md |
| Architecture | docs/ARCHITECTURE.md |
| Versioning | docs/VERSIONING.md |
| OAuth | docs/OAUTH.md |
| Stripe billing | docs/stripe-billing-setup.md |
| Testing | docs/TESTING.md |
| Mobile native | docs/guides/MOBILE.md |
| Contributing | CONTRIBUTING.md |
| Security | SECURITY.md |
Day-to-day commands: docs/DEVELOPMENT.md. Native rebuilds and EAS: docs/guides/MOBILE.md.
Template: CalVer tags (2026.001, …), notes from conventional commits — Releases. Packages: independent semver on npm.
Bug fixes, docs, agent-friendly structure improvements, and shared packages welcome. For larger changes, open a Discussion first. Stack swaps (different auth, payments, or framework) belong in your fork — CONTRIBUTING.md.



