From 3a93a71a04fe6caccefa6f151c16bebd482a344f Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Sun, 17 May 2026 08:22:02 -0700 Subject: [PATCH 01/10] docs: OSS presentation for GitHub evaluators (#232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: relocate guides and consolidate OAuth under docs/ Move ARCHITECTURE, VERSIONING, and UPGRADING into docs/. Merge OAuth setup into docs/OAUTH.md and remove redundant oauth guides. * docs: OSS presentation — README thesis, SECURITY, and guide polish Rewrite README around "why this shape" (agents, environments, fork model). Add SECURITY.md, DEVELOPMENT.md, expanded VERSIONING, link-check scope, README images, issue templates, and cross-doc link updates. * fix(docs): address PR review on OAuth stubs, mobile auth, and test-utils Restore OAuth redirect stubs, clarify test-utils is on npm at 0.0.1, rewrite mobile auth docs for native Google Sign-In, fix ARCHITECTURE tree path, linkcheck internal docs, and use absolute URL in CI comment. * docs: use Beaker Stack as product name in documentation Align prose with BRANDING.displayName while keeping BeakerStack for repo URLs, clone paths, and code identifiers. * fix(docs): address PR review on OAUTH production section Remove deprecated Google+ API steps, drop duplicate ToC, nest production headings under ## Production setup, align style with the rest of the doc, and fix feature_request.yml validations. --- .changeset/config.json | 1 + .changeset/fiery-terms-wash.md | 2 +- .github/ISSUE_TEMPLATE/bug_report.yml | 34 + .github/ISSUE_TEMPLATE/config.yml | 8 + .github/ISSUE_TEMPLATE/feature_request.yml | 29 + .github/RELEASE_TEMPLATE.md | 13 + .github/workflows/check-merge-strategy.yml | 2 +- .markdown-link-check.json | 3 + CONTRIBUTING.md | 35 +- QUICKSTART.md | 4 +- README.md | 197 +++--- SECURITY.md | 35 ++ VERSIONING.md | 44 -- apps/mobile/README.md | 2 +- apps/mobile/supabase/migrations/README.md | 2 +- apps/web/src/components/landing/README.md | 2 +- .../sections/__tests__/FeatureRows.test.tsx | 4 +- apps/web/src/config/landing.ts | 2 +- ARCHITECTURE.md => docs/ARCHITECTURE.md | 2 +- docs/DEVELOPMENT.md | 82 +++ docs/OAUTH.md | 594 ++++++++++++++++++ docs/README.md | 21 +- UPGRADING.md => docs/UPGRADING.md | 4 +- docs/VERSIONING.md | 97 +++ docs/guides/MOBILE.md | 2 +- docs/guides/billing-plan-catalog.md | 2 +- docs/images/readme/billing.png | Bin 0 -> 50566 bytes docs/images/readme/environments-pipeline.png | Bin 0 -> 74176 bytes docs/images/readme/hero.png | Bin 0 -> 91366 bytes docs/images/readme/mobile-hero.png | Bin 0 -> 69416 bytes .../DEBUGGING_NAVIGATION.md | 0 docs/oauth/MOBILE_OAUTH_SETUP.md | 112 +--- docs/oauth/OAUTH_QUICK_SETUP.md | 120 +--- docs/oauth/OAUTH_SETUP.md | 430 +------------ docs/oauth/README.md | 15 +- docs/preview-access-control.md | 2 +- docs/specs/beakerstack-billing-ui-v1.md | 16 +- docs/specs/beakerstack-billing-v1.md | 34 +- docs/stripe-billing-setup.md | 16 +- docs/supabase-preview-setup.md | 2 +- docs/testing/TESTING_OAUTH.md | 8 +- package.json | 6 +- packages/test-utils/README.md | 2 +- 43 files changed, 1098 insertions(+), 888 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/RELEASE_TEMPLATE.md create mode 100644 SECURITY.md delete mode 100644 VERSIONING.md rename ARCHITECTURE.md => docs/ARCHITECTURE.md (99%) create mode 100644 docs/DEVELOPMENT.md create mode 100644 docs/OAUTH.md rename UPGRADING.md => docs/UPGRADING.md (88%) create mode 100644 docs/VERSIONING.md create mode 100644 docs/images/readme/billing.png create mode 100644 docs/images/readme/environments-pipeline.png create mode 100644 docs/images/readme/hero.png create mode 100644 docs/images/readme/mobile-hero.png rename docs/{guides => internal}/DEBUGGING_NAVIGATION.md (100%) diff --git a/.changeset/config.json b/.changeset/config.json index e4764606..2619e13d 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -13,6 +13,7 @@ "ignore": [ "web", "mobile-app", + "@beakerstack/billing", "@beakerstack/shared", "@beakerstack/shared-tests" ], diff --git a/.changeset/fiery-terms-wash.md b/.changeset/fiery-terms-wash.md index 7dc8061c..43c807eb 100644 --- a/.changeset/fiery-terms-wash.md +++ b/.changeset/fiery-terms-wash.md @@ -2,4 +2,4 @@ '@beakerstack/test-utils': patch --- -Initial release of test-utils package. Provides wait() and testId() helpers for use in BeakerStack-based test suites. +Initial release of test-utils package. Provides wait() and testId() helpers for use in Beaker Stack-based test suites. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..b17aaea3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,34 @@ +name: Bug report +description: Something broken in the template or published packages +title: "[bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for reporting. Search [existing issues](https://github.com/Artificer-Innovations/BeakerStack/issues) first. + For usage questions, prefer [Discussions](https://github.com/Artificer-Innovations/BeakerStack/discussions). + - type: textarea + id: description + attributes: + label: What happened? + description: What did you expect vs what you saw? + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + placeholder: "1. npm run setup\n2. ..." + validations: + required: true + - type: input + id: version + attributes: + label: Template tag or commit + placeholder: "2026.001 or abc1234" + - type: input + id: environment + attributes: + label: Environment + placeholder: "Node 20, macOS, local Supabase" diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..71a9f00c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Questions (Discussions) + url: https://github.com/Artificer-Innovations/BeakerStack/discussions + about: Usage help and design questions + - name: Security report + url: https://github.com/Artificer-Innovations/BeakerStack/blob/main/SECURITY.md + about: Report vulnerabilities privately — do not file a public issue diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..412bb2ba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,29 @@ +name: Feature request +description: Propose a change to the upstream template +title: "[feat]: " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + For large or opinionated changes, open a [Discussion](https://github.com/Artificer-Innovations/BeakerStack/discussions) first. + Stack swaps (e.g. different auth or payment provider) usually belong in forks — see [CONTRIBUTING.md](https://github.com/Artificer-Innovations/BeakerStack/blob/main/CONTRIBUTING.md). + - type: textarea + id: problem + attributes: + label: Problem or use case + description: What are you trying to accomplish? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed solution + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + validations: + required: false diff --git a/.github/RELEASE_TEMPLATE.md b/.github/RELEASE_TEMPLATE.md new file mode 100644 index 00000000..15a03ab8 --- /dev/null +++ b/.github/RELEASE_TEMPLATE.md @@ -0,0 +1,13 @@ + + +## Summary + +[3–4 sentences: what this release represents, headline capabilities, any breaking fork steps.] + +- **Landing:** https://beakerstack.com +- **Quick start:** https://github.com/Artificer-Innovations/BeakerStack/blob/main/QUICKSTART.md +- **Feedback:** https://github.com/Artificer-Innovations/BeakerStack/discussions + +--- + + diff --git a/.github/workflows/check-merge-strategy.yml b/.github/workflows/check-merge-strategy.yml index 1545d5de..db7e1800 100644 --- a/.github/workflows/check-merge-strategy.yml +++ b/.github/workflows/check-merge-strategy.yml @@ -39,7 +39,7 @@ jobs: Using "Squash and merge" on PRs targeting \`main\` can cause merge conflicts when merging \`develop\` → \`main\` later. - See [ARCHITECTURE.md](../../blob/develop/ARCHITECTURE.md#pull-request-process) for details. + See https://github.com/Artificer-Innovations/BeakerStack/blob/develop/docs/ARCHITECTURE.md#pull-request-process for details. --- diff --git a/.markdown-link-check.json b/.markdown-link-check.json index 38115316..b1376eb3 100644 --- a/.markdown-link-check.json +++ b/.markdown-link-check.json @@ -5,6 +5,9 @@ }, { "pattern": "^https://github.com//" + }, + { + "pattern": "^https://deploy\\.yourdomain\\.com" } ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41a5e5d5..5fb0cb57 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,16 @@ Thank you for helping improve Beaker Stack. +## What belongs upstream + +**Welcome:** bug fixes, documentation, performance improvements to shared logic, opt-in integrations that fit the template’s architecture, and new publishable `@beakerstack/*` packages. + +**Usually not upstream:** swapping core stack choices (e.g. Firebase instead of Supabase, Paddle instead of Stripe, Next.js instead of Vite). Those belong in **downstream forks** where you own the tradeoffs. + +**Larger changes:** open a [Discussion](https://github.com/Artificer-Innovations/BeakerStack/discussions) first — especially features that affect every adopter’s fork or CI secrets. Link the Discussion in your PR. + +Issues: use [GitHub Issues](https://github.com/Artificer-Innovations/BeakerStack/issues) with the appropriate template (bug vs feature). Questions and usage help fit Discussions (Q&A). + ## Workflow 1. Create a branch from `develop` (or the branch your team uses for integration). @@ -16,6 +26,25 @@ Thank you for helping improve Beaker Stack. 4. Open a pull request with a clear description of **what** changed and **why**. +## Commits and release notes + +**Conventional commits** are required on the integration branch. [git-cliff](https://github.com/orhun/git-cliff) uses them for **template** CalVer release notes. + +Examples: + +- `feat: add usage summary to billing dashboard` +- `fix: correct PR preview redirect for trailing slash` +- `docs: clarify OAuth redirect URLs in OAUTH guide` +- `chore: bump Supabase CLI in CI` + +**Template-only changes** (anything outside publishable `packages/*`) need a conventional commit only — no Changeset. + +**Publishable package changes** (`@beakerstack/test-utils` today) require a Changeset — see below. + +**Mixed PRs** (template + package): use a conventional commit message and include a Changeset if any publishable package files changed. + +Versioning overview: [docs/VERSIONING.md](docs/VERSIONING.md). + ## Pre-commit hook The repository uses [lint-staged](https://github.com/lint-staged/lint-staged) and [Husky](https://typicode.github.io/husky/) to enforce code quality on every commit. @@ -117,6 +146,10 @@ See `packages/test-utils/` for a minimal working example. - **Topic index:** [docs/README.md](docs/README.md). - Before merging doc-only changes, run **`npm run docs:linkcheck`** (uses [markdown-link-check](https://github.com/tcort/markdown-link-check) with [.markdown-link-check.json](.markdown-link-check.json)). +## Template releases (maintainers) + +CalVer template releases use [.github/workflows/release-template.yml](.github/workflows/release-template.yml). Before publishing, paste the prose block from [.github/RELEASE_TEMPLATE.md](.github/RELEASE_TEMPLATE.md) **above** the git-cliff-generated notes in the GitHub Release body. + ## Questions -Use GitHub Issues or your team's usual channel. For OAuth-specific setup, start with [docs/oauth/README.md](docs/oauth/README.md). +Use [Discussions](https://github.com/Artificer-Innovations/BeakerStack/discussions) for usage questions and [Issues](https://github.com/Artificer-Innovations/BeakerStack/issues) for bugs. OAuth setup: [docs/OAUTH.md](docs/OAUTH.md). diff --git a/QUICKSTART.md b/QUICKSTART.md index 910e7b03..68d65501 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -58,7 +58,7 @@ You should see a banner and a prompt similar to: ```text ======================================================================== + + -+ BeakerStack + ++ Beaker Stack + + + + Choose (1) local setup or (2) full cloud wizard. + + + @@ -164,6 +164,6 @@ Work through these when you are ready; they are intentionally dense. - [ ] Firebase / Google Cloud OAuth clients; `google-services.json` where required. - [ ] Supabase Auth Google provider + redirect URLs: [docs/supabase-preview-setup.md](docs/supabase-preview-setup.md), [docs/supabase-staging-production-setup.md](docs/supabase-staging-production-setup.md). -**Deep dives:** [docs/pr-preview-setup.md](docs/pr-preview-setup.md), [ARCHITECTURE.md](ARCHITECTURE.md), [docs/README.md](docs/README.md). +**Deep dives:** [docs/pr-preview-setup.md](docs/pr-preview-setup.md), [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/README.md](docs/README.md). Do not commit `.env*` files; sensitive paths are listed in [.cursorignore](.cursorignore). diff --git a/README.md b/README.md index 88dda263..9c2ec64c 100644 --- a/README.md +++ b/README.md @@ -1,153 +1,136 @@ # Beaker Stack -Beaker Stack is a **monorepo template** for building **Supabase-backed** applications that ship on **web (React + Vite)** and **mobile (React Native + Expo)** at the same time: **one product, two surfaces, one backend, one deploy pipeline.** +**Ship your SaaS faster.** -Most full-stack templates optimize for getting an app running. Beaker Stack optimizes for the **pipeline around it**—local parity, PR previews, staging from `develop`, production from `main`, and shared business logic so web and mobile do not drift. +[![Test](https://github.com/Artificer-Innovations/BeakerStack/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/Artificer-Innovations/BeakerStack/actions/workflows/test.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) +[![Node](https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white)](package.json) +[![Release](https://img.shields.io/github/v/release/Artificer-Innovations/BeakerStack?label=template&display_name=release)](https://github.com/Artificer-Innovations/BeakerStack/releases/tag/2026.001) +[![Discussions](https://img.shields.io/github/discussions/Artificer-Innovations/BeakerStack)](https://github.com/Artificer-Innovations/BeakerStack/discussions) -> **What you end up with:** **Production** at `https://yourdomain.com`, **staging** at `https://staging.yourdomain.com`, and **every pull request** getting an **ephemeral web URL** at `https://deploy.yourdomain.com/pr-/` (path-based previews on AWS). When CI secrets are configured, **Expo EAS** update channels align to preview, staging, and production. Env keys and GitHub Actions secrets follow a **single manifest** so pipelines trust the same layout you use locally. It is the small-team version of infrastructure many solo stacks skip—without giving up a sane SDLC. +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. -## Why this shape - -**1. SDLC from day one, not later.** The usual small-project arc is: move fast, add CI when it hurts, add staging when it really hurts, skip PR previews entirely. That is cheap on day one and expensive on day ninety—manual deploys, no rollback story, and a “staging” environment that is really hope. Beaker Stack assumes the **pipeline is part of the product**: developers test against **local** Supabase; **every PR** gets a **deploy URL** (and optional mobile channel) so the change runs in an environment close to production; **merged work on `develop`** flows to **staging**; **production** is fed by a **deliberate `develop` → `main`** promotion, not ad-hoc pushes. - -**2. Review discipline: the artifact under review is the running change, not only the diff.** Every PR gets a **URL** so reviewers answer whether the behavior works **in situ**, without cloning the branch. That catches integration issues before merge. There is a one-time cost to wire DNS and secrets; **per-PR marginal cost stays low** once the stack exists. - -**3. Shared code as discipline, not a headline percentage.** Most teams end up with a React tree and a React Native tree that **drift**. Putting business logic, validation, and types in **`packages/shared`** is not mainly a reuse metric—it is a rule that **one product on two surfaces** stays true **by construction**, not aspirationally. +React + Vite on the web. React Native + Expo on mobile. Supabase underneath. Stripe when you take money. -## Why the setup wizard exists +![Beaker Stack PR checks, setup wizard, and mobile app](docs/images/readme/hero.png) -Standing up Route 53, ACM, three Supabase tiers, EAS, and GitHub secrets **by hand** would contradict the claim that small teams can afford this shape. **`npm run setup`** (local path: Docker Supabase, `.env.local`, type generation) and **`npm run setup:full`** (remote resources, optional AWS bootstrap, optional `gh` sync) exist **because** the thesis is that ceremony is cheap **when the template does the work on day one**. One command (plus honest prerequisites in [QUICKSTART.md](QUICKSTART.md)) is how “SDLC from day one” stops being aspirational. +[beakerstack.com](https://beakerstack.com) · [Quick start](QUICKSTART.md) · [Releases](https://github.com/Artificer-Innovations/BeakerStack/releases) -**Who it is for:** Teams whose bottleneck is **shipping safely** (reviews, previews, staged promotion) at least as much as raw feature throughput—and who want Supabase plus **paired web and mobile** without two divergent codebases. - -**How this differs from app-first starters (e.g. T3, create-t3-turbo, default Expo templates):** Those optimize for **getting an app running**. Beaker Stack optimizes for the **pipeline around the app**: local parity, PR-in-situ review, staging from `develop`, production from `main`, and secrets/env layout that CI can trust. If you only need one surface and a single deploy button, a simpler template is the right trade. If you want **small-team SDLC without the usual “add it when we need it” regret**, this shape is the bet. +## Why this shape -The specific machinery (tiered Supabase, AWS static hosting with PR paths, EAS channels, and the `setup-manifest` map for Actions secrets) is listed below. **That list is how the opinions are implemented, not why you would adopt them.** +**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. -**Stack versions (from the repo today):** web uses **React 18.2** and **Vite 5**; mobile uses **Expo SDK ~50** and **React Native 0.73**; CI uses **Node 20** and **Supabase CLI 2.54.11** (see `.github/workflows`). +**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. -**Out of the box you get:** Email + Google auth flows (with optional Apple per [docs/oauth/OAUTH_SETUP.md](docs/oauth/OAUTH_SETUP.md)), user profiles + RLS patterns, Maestro-oriented E2E layout, and scripts for local Docker Supabase plus full-cloud bootstrap. +**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. -**[Get started → QUICKSTART.md](QUICKSTART.md)** — **Use this template**, local “hello world” in minutes, full-cloud checklist when you are ready. +**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. -| Need | Doc | -| --------------------- | ------------------------------------------------------------ | -| Full topic index | [docs/README.md](docs/README.md) | -| Stripe billing setup | [docs/stripe-billing-setup.md](docs/stripe-billing-setup.md) | -| Environments & design | [ARCHITECTURE.md](ARCHITECTURE.md) | -| Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) | +**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](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](docs/VERSIONING.md). -## Features +## Template + npm packages -- **Monorepo** — `apps/web`, `apps/mobile`, `packages/shared`, `supabase/`. -- **Supabase** — Local Docker + shared preview + staging + production remotes ([ARCHITECTURE.md](ARCHITECTURE.md)). -- **Auth** — Email/password and Google (Supabase + native Google on mobile when configured); user-scoped RLS; extend migrations for org/tenant models if needed. -- **Web (AWS)** — PR previews, staging, production static hosting via CloudFormation helpers under `scripts/pr-preview/`. -- **Mobile (Expo)** — EAS dev client workflow; CI can publish OTA updates per environment when secrets are set. -- **CI/CD** — PR workflow, `develop` → staging, `main` → production ([.github/workflows](.github/workflows)). -- **Setup UX** — `npm run setup` menu and `npm run setup:full` phased wizard (`--dry-run`, `--from=PHASE`); secrets only in gitignored files. +| Distribution | What it is | +| ---------------- | --------------------------------------------------------------------------------------------------------------------------- | +| **Template** | Fork or “Use this template”; CalVer tags + [GitHub Releases](https://github.com/Artificer-Innovations/BeakerStack/releases) | +| **npm packages** | Optional `@beakerstack/*` for existing apps; semver via Changesets | -## Prerequisites (summary) +| 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 | -- **Local dev:** Node **20** recommended (`>=18` in `package.json`), npm `>=9`, Docker Desktop, Supabase CLI; native toolchains if you build iOS/Android; Maestro for some E2E commands. **Typical time:** about **5–15 minutes** after `npm install` if Docker images are warm (see [QUICKSTART.md](QUICKSTART.md)). -- **Full cloud + CI:** accounts, DNS, ACM, IAM, Supabase PAT, `EXPO_TOKEN`, GitHub secret sync — often **1–3 hours** the first time. Details and checklists: [QUICKSTART.md](QUICKSTART.md) and [docs/reference/github-actions-secrets.md](docs/reference/github-actions-secrets.md). +## What's in the repo -### What is not included (costs and vendor bills) +Reference inventory — the argument is above. -This template wires **real** cloud resources. You pay vendors under **their** pricing, not ours. Expect ongoing charges roughly along these lines (order-of-magnitude; check current pricing): +| Area | What you get | Doc | +| --------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | +| Apps | Web (Vite), mobile (Expo), shared `packages/*` | [ARCHITECTURE](docs/ARCHITECTURE.md) | +| Auth | Email/password, Google OAuth, optional Apple; RLS-first profiles; schema-generated types | [OAUTH](docs/OAUTH.md) | +| Billing | Stripe subscriptions (not one-off checkout-only), plan gates, customer portal, usage metering | [stripe-billing-setup](docs/stripe-billing-setup.md) | +| Marketing | Config-driven landing; prerendered SEO home (canonical + Open Graph) | [landing README](apps/web/src/components/landing/README.md) | +| CI/CD | Path-based PR previews on AWS (S3/CloudFront), staging on `develop`, production on `main`, EAS channels | [pr-preview-setup](docs/pr-preview-setup.md) | +| Setup | `npm run setup` / `setup:full` (local + optional full cloud) | [QUICKSTART](QUICKSTART.md) | +| Tests | Unit, integration, Maestro E2E, pgTAP DB tests; colocated with decision matrix | [TESTING](docs/TESTING.md) | +| Agents | Typed configs, generated DB types, package boundaries, test placement rules — conventions in ARCHITECTURE + TESTING | [ARCHITECTURE](docs/ARCHITECTURE.md), [TESTING](docs/TESTING.md) | -- **Supabase** — Remote projects typically need a **paid** tier for serious staging/production (often on the order of **~$25/month per project** on Pro-class plans; preview can sometimes stay smaller). Local dev stays free in Docker. -- **AWS** — Route 53 hosted zones, ACM (certs are usually free), S3 storage, CloudFront egress, and Lambda@Edge or function charges where the stack uses them—all **usage-based**. -- **Expo / EAS** — Free tier exists; **EAS Update** and **build minutes** can move you to paid plans as usage grows. -- **Google Cloud** — OAuth clients and Firebase-related APIs may incur charges at scale; small teams often stay within free tiers for auth-only usage. +Stack: React 18.2, Vite 5, Expo SDK ~50, React Native 0.73, Node 20 in CI. -If you need a **zero-cloud** path, stay on **local** Supabase and skip `setup:full` until you are ready. +## Screenshots -## Documentation +| Billing UI | Environments pipeline | Web + mobile | +| --------------------------------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------- | +| ![Billing plans UI](docs/images/readme/billing.png) | ![Three-environment pipeline](docs/images/readme/environments-pipeline.png) | ![Web and mobile](docs/images/readme/mobile-hero.png) | -- [QUICKSTART.md](QUICKSTART.md) — **Start here** -- [docs/README.md](docs/README.md) — All guides (OAuth, AWS, Supabase, testing) -- [docs/guides/MOBILE.md](docs/guides/MOBILE.md) — Native rebuild and dev-client commands -- [docs/BRANDING.md](docs/BRANDING.md) — Icons and theme -- [docs/TESTING.md](docs/TESTING.md) — Test strategy -- [docs/renaming.md](docs/renaming.md) — Rename the template (also [QUICKSTART.md](QUICKSTART.md) after install) +## Quick start -## Project Structure - -``` -BeakerStack/ -├── apps/ -│ ├── mobile/ # React Native (Expo) -│ └── web/ # React (Vite) web app -├── packages/ -│ └── shared/ # Shared components, hooks, types -├── supabase/ # Database migrations, functions -├── tests/ # Integration & E2E tests -├── scripts/ # Development and setup scripts -└── docs/ # Documentation +```bash +git clone https://github.com//.git +cd +npm install +npm run setup ``` -## Development - -### Useful scripts - -- `npm run setup` — Interactive: local stack (default) or full cloud wizard -- `npm run setup:local` — Local only -- `npm run setup:full` — Cloud provisioning and optional `gh` sync -- `npm run dev:all` — Local Supabase + web + mobile -- `npm run test` / `npm run lint` / `npm run type-check` / `npm run format` +The setup wizard handles Docker Supabase, `.env.local`, and type generation. Full cloud + CI checklist: [QUICKSTART.md](QUICKSTART.md). -### Database +**Node 18+** (`>=18` in `package.json`); **Node 20** matches CI. Docker Desktop + Supabase CLI for local work. -- **`supabase/migrations/` is canonical at the repo root** — run `supabase migration new …`, `supabase start`, and `supabase db reset` from the repository root (mobile developers: see [`apps/mobile/supabase/migrations/README.md`](apps/mobile/supabase/migrations/README.md)). -- `supabase start` / `supabase stop` — Local Supabase -- `npm run gen:types` — TypeScript types from DB -- `supabase db reset` — Reset local DB +### Renaming the template -### Testing - -- `npm run test:unit` — Unit tests (mobile, web, shared, and `scripts/`) -- `npm run test:unit:scripts` — Repo script tests only (`scripts/__tests__/`, Node test runner) -- `npm run test:integration` — Integration tests -- `npm run test:e2e` — E2E (Maestro) -- `npm run test:db` — Database tests - -### Development helper - -- `npm run dev:check` / `npm run dev:clean` / `npm run dev:start` - -### Mobile (from repo root) +```bash +npm run rename -- --from "Beaker Stack" --to "Your Product" --dry-run +``` -- `npm run mobile` / `npm run mobile:ios` / `npm run mobile:android` / `npm run mobile:clean` +[docs/renaming.md](docs/renaming.md) -For **native clean rebuilds**, simulator uninstall, and `prebuild --clean`, see **[docs/guides/MOBILE.md](docs/guides/MOBILE.md)**. +## Project structure -## Deployment (CI/CD) +``` +BeakerStack/ +├── apps/web, apps/mobile +├── packages/shared, packages/billing, packages/test-utils +├── supabase/ # migrations, Edge Functions +├── tests/ # integration & E2E +├── scripts/ # setup, deploy, codegen +└── docs/ +``` -| Trigger | Workflow | -| --------------------- | -------------------------------------------------------------------------- | -| **Pull requests** | [pr-preview-environment.yml](.github/workflows/pr-preview-environment.yml) | -| **Push to `develop`** | [deploy-staging.yml](.github/workflows/deploy-staging.yml) | -| **Push to `main`** | [deploy-production.yml](.github/workflows/deploy-production.yml) | +## Documentation -Details: [docs/pr-preview-setup.md](docs/pr-preview-setup.md). +| Topic | Doc | +| -------------- | ------------------------------------------------------------ | +| First run | [QUICKSTART.md](QUICKSTART.md) | +| All guides | [docs/README.md](docs/README.md) | +| Development | [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) | +| Architecture | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | +| Versioning | [docs/VERSIONING.md](docs/VERSIONING.md) | +| OAuth | [docs/OAUTH.md](docs/OAUTH.md) | +| Stripe billing | [docs/stripe-billing-setup.md](docs/stripe-billing-setup.md) | +| Testing | [docs/TESTING.md](docs/TESTING.md) | +| Mobile native | [docs/guides/MOBILE.md](docs/guides/MOBILE.md) | +| Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) | +| Security | [SECURITY.md](SECURITY.md) | -## Releases and versioning +## Development -Template snapshots are tagged on `main` using **CalVer** (`2026.001`, `2026.002`, …). Each release includes generated notes covering what changed and whether there are any breaking steps. `@beakerstack/*` packages use independent **semver** on npm. +Day-to-day commands: [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md). Native rebuilds and EAS: [docs/guides/MOBILE.md](docs/guides/MOBILE.md). -| Trigger | Workflow | -| ------------------- | --------------------------------------------------------------------------------------------------------- | -| **Manual dispatch** | [release-template.yml](.github/workflows/release-template.yml) — cuts a new CalVer tag and GitHub Release | +## Releases -See [VERSIONING.md](VERSIONING.md) for what counts as a breaking change and [UPGRADING.md](UPGRADING.md) for how to pull template changes into an existing fork. +Template: CalVer tags (`2026.001`, …), notes from conventional commits — [Releases](https://github.com/Artificer-Innovations/BeakerStack/releases). Packages: independent semver on npm. ## Contributing -See [CONTRIBUTING.md](CONTRIBUTING.md). +Bug fixes, docs, agent-friendly structure improvements, and shared packages welcome. For larger changes, open a [Discussion](https://github.com/Artificer-Innovations/BeakerStack/discussions) first. Stack swaps (different auth, payments, or framework) belong in your fork — [CONTRIBUTING.md](CONTRIBUTING.md). ## License [MIT](LICENSE) + +## Built with + +[Supabase](https://supabase.com), [Stripe](https://stripe.com), [React](https://react.dev), [React Native](https://reactnative.dev), [Expo](https://expo.dev), [Vite](https://vitejs.dev). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..80c59ee9 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,35 @@ +# Security Policy + +## Reporting a vulnerability + +**Do not** open a public GitHub issue for security vulnerabilities. + +Report privately to: + +- **Email:** [security@artificerinnovations.com](mailto:security@artificerinnovations.com) +- **GitHub:** [Private vulnerability reporting](https://github.com/Artificer-Innovations/BeakerStack/security/advisories/new) + +Include a description, steps to reproduce, and impact. We aim to acknowledge reports within a few business days. + +## Scope + +**In scope** + +- Source code in this repository (template apps, `packages/*`, `supabase/` migrations and Edge Functions) +- Published `@beakerstack/*` npm packages maintained from this repo +- RLS policies, auth flows, and billing patterns shipped as part of the template + +**Out of scope** + +- Deployments and infrastructure you operate in your own AWS, Supabase, or Stripe accounts +- Secrets, API keys, or environment configuration you add in forks +- Vulnerabilities in third-party services (Supabase, Stripe, Expo, etc.) — report those vendors directly +- Downstream applications built from forks unless they are clearly attributable to template code as shipped here + +## Template disclaimer + +Beaker Stack is a **starting point**, not a certified secure product. Before production use, review authentication, authorization (especially Row Level Security), billing webhooks, and Edge Function secrets in **your** fork. Customize policies and threat model for your product and compliance needs. + +## Supported versions + +Security fixes are applied on the active development branch and included in subsequent template releases and package semver bumps. Forks are responsible for merging those updates. diff --git a/VERSIONING.md b/VERSIONING.md deleted file mode 100644 index c9a27f19..00000000 --- a/VERSIONING.md +++ /dev/null @@ -1,44 +0,0 @@ -# Versioning - -BeakerStack uses two parallel versioning schemes — one for the monorepo template and one for its published packages. - -## Template releases — `YYYY.NNN` - -Template releases are **monorepo snapshot tags** on `main`. A tag like `2026.003` means: _this is what BeakerStack looked like at that point in time, and it is a good base to fork from._ - -Tags use **CalVer with a zero-padded sequence number** within the year: - -``` -2026.001 first release of 2026 -2026.002 second release of 2026 -2026.013 thirteenth release of 2026 -``` - -`NNN` increments arbitrarily — there is no meaning to how much time passes between releases. - -### What counts as a breaking change - -A template release is **breaking** if adopters who have forked the template need to take manual action before upgrading. That includes: - -- A new required GitHub Actions secret or repository variable -- A renamed or removed secret / variable that CI depends on -- A changed top-level folder structure (e.g. a directory moved or renamed) -- A changed setup script behavior (flags renamed, phases reordered, outputs changed) -- A new migration step needed to align an existing fork with the updated baseline - -Breaking changes are called out explicitly in the release notes generated for that tag. - -### `main` vs. tagged releases - -| Ref | What it is | Recommended for | -| ---------- | ------------------- | ------------------------------------------------------------------- | -| `main` | Current stable HEAD | Following along with active development | -| `2026.NNN` | Snapshot tag | Starting a new fork; upgrading an existing fork in a controlled way | - -If you are forking BeakerStack to build a product, start from a tagged release so your upgrade story is clear from day one. - -## Package releases — semver - -`@beakerstack/*` packages published to npm use standard **semantic versioning** (`MAJOR.MINOR.PATCH`). Each package is versioned independently via changesets. Release notes for package releases live on the package's GitHub Release page. - -Package versions are independent of template CalVer tags. diff --git a/apps/mobile/README.md b/apps/mobile/README.md index f5d11afd..8dd43ff2 100644 --- a/apps/mobile/README.md +++ b/apps/mobile/README.md @@ -4,6 +4,6 @@ Most scripts run from the **repository root** (`npm run mobile`, etc.). See [`do ## Local Supabase schema -Database migrations live only under **`supabase/migrations/`** at the repo root. From the BeakerStack checkout root, run `supabase start`, `supabase migration new …`, and `supabase db reset` — do not expect duplicated `.sql` files under [`supabase/migrations/`](./supabase/migrations/) (see the policy note there). +Database migrations live only under **`supabase/migrations/`** at the repo root. From the Beaker Stack checkout root, run `supabase start`, `supabase migration new …`, and `supabase db reset` — do not expect duplicated `.sql` files under [`supabase/migrations/`](./supabase/migrations/) (see the policy note there). Optional [`supabase/config.toml`](./supabase/config.toml) here keeps mobile-oriented auth redirect URLs separate from the root config; it is not the source of migration SQL. diff --git a/apps/mobile/supabase/migrations/README.md b/apps/mobile/supabase/migrations/README.md index 228cf591..53014303 100644 --- a/apps/mobile/supabase/migrations/README.md +++ b/apps/mobile/supabase/migrations/README.md @@ -1,6 +1,6 @@ # Schema migrations live at the repository root -SQL migrations are **not** duplicated under this app. Author and apply them only from the BeakerStack repository root: +SQL migrations are **not** duplicated under this app. Author and apply them only from the Beaker Stack repository root: - **Directory:** `supabase/migrations/` (relative to repo root) - **CLI:** Run `supabase start`, `supabase migration new …`, `supabase db reset`, and linked `supabase db push` from the **repository root**, using the root `supabase/config.toml`. diff --git a/apps/web/src/components/landing/README.md b/apps/web/src/components/landing/README.md index e2188b1a..a7347ced 100644 --- a/apps/web/src/components/landing/README.md +++ b/apps/web/src/components/landing/README.md @@ -1,6 +1,6 @@ # Landing page -Config-driven B2C marketing landing page for BeakerStack. +Config-driven B2C marketing landing page for Beaker Stack. ## Rebrand in one file diff --git a/apps/web/src/components/landing/sections/__tests__/FeatureRows.test.tsx b/apps/web/src/components/landing/sections/__tests__/FeatureRows.test.tsx index a6b9a4e8..6c431fe9 100644 --- a/apps/web/src/components/landing/sections/__tests__/FeatureRows.test.tsx +++ b/apps/web/src/components/landing/sections/__tests__/FeatureRows.test.tsx @@ -18,7 +18,7 @@ const rows = [ body: 'A single npm run setup provisions your local environment.', ctaLabel: 'Read the architecture', ctaHref: - 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/ARCHITECTURE.md', + 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/docs/ARCHITECTURE.md', mediaSrc: 'https://placehold.co/560x315?text=Setup', mediaAlt: 'Setup screenshot', mediaSide: 'left' as const, @@ -54,7 +54,7 @@ describe('FeatureRows', () => { const link = screen.getByRole('link', { name: /Read the architecture/ }); expect(link).toHaveAttribute( 'href', - 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/ARCHITECTURE.md' + 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/docs/ARCHITECTURE.md' ); expect(link).toHaveAttribute('target', '_blank'); expect(link).toHaveAttribute('rel', 'noopener noreferrer'); diff --git a/apps/web/src/config/landing.ts b/apps/web/src/config/landing.ts index 2a371f1f..3ff488de 100644 --- a/apps/web/src/config/landing.ts +++ b/apps/web/src/config/landing.ts @@ -261,7 +261,7 @@ export const landingConfig: LandingConfig = { body: 'Three Supabase databases—local Docker, shared PR testing, and staging—mirror your branching model. Migrations are validated before they touch production. PR previews deploy automatically to path-based S3/CloudFront URLs. EAS Update channels give mobile the same preview → staging → production flow.', ctaLabel: 'Read the architecture docs', ctaHref: - 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/ARCHITECTURE.md', + 'https://github.com/Artificer-Innovations/BeakerStack/blob/main/docs/ARCHITECTURE.md', mediaSrc: publicUrl('landing/environments-pipeline.avif'), mediaAlt: 'Three-environment pipeline diagram', mediaSide: 'right', diff --git a/ARCHITECTURE.md b/docs/ARCHITECTURE.md similarity index 99% rename from ARCHITECTURE.md rename to docs/ARCHITECTURE.md index c3d42462..e2ac0a74 100644 --- a/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -2455,7 +2455,7 @@ git commit -m "docs: update setup instructions in README" - Deploy to S3: `s3://deploy-bucket/pr-{number}/` - Invalidate CloudFront cache for `/pr-{number}/*` - **Duration**: ~2-3 minutes - - **Result**: https://deploy.yourdomain.com/pr-{number}/ + - **Result**: `https://deploy.yourdomain.com/pr-{number}/` 4. **Deploy Mobile Preview** - Download database types artifact diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 00000000..7444293b --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,82 @@ +# Development + +Day-to-day commands for working on Beaker Stack (or a fork). For first-time setup, see [QUICKSTART.md](../QUICKSTART.md). + +## Prerequisites + +- **Node.js 20** recommended (`>=18` in root `package.json`), npm `>=9` +- **Docker Desktop** and **Supabase CLI** for local database/auth +- Native toolchains (Xcode, Android Studio) only if you build iOS/Android locally +- **Maestro** for `npm run test:e2e` (optional until you run E2E) + +## Common scripts (repo root) + +| Command | Purpose | +| --------------------------------------------------------------- | ------------------------------------------------------------------------ | +| `npm run setup` | Interactive wizard: local stack (default) or full cloud | +| `npm run setup:local` | Local Supabase + env only | +| `npm run setup:full` | Cloud provisioning, optional AWS bootstrap, optional `gh` secret sync | +| `npm run dev:all` | Local Supabase + web + mobile concurrently | +| `npm run web` | Vite dev server only | +| `npm run mobile` | Expo dev server (port 8082) | +| `npm run test` | Unit + integration + DB tests | +| `npm run lint` / `npm run type-check` / `npm run format` | Quality gates | +| `npm run dev:check` / `npm run dev:clean` / `npm run dev:start` | Environment helper ([`scripts/dev-helper.sh`](../scripts/dev-helper.sh)) | + +## Database + +- **Canonical migrations:** `supabase/migrations/` at the repository root +- `supabase start` / `supabase stop` — local Supabase +- `supabase migration new ` — new migration (from repo root) +- `supabase db reset` — reset local DB +- `npm run gen:types` — regenerate TypeScript types from schema + +Mobile developers: see [`apps/mobile/supabase/migrations/README.md`](../apps/mobile/supabase/migrations/README.md) (migrations still live at repo root). + +## Testing + +| Command | Layer | +| --------------------------- | --------------------------------------------------- | +| `npm run test:unit` | Vitest across mobile, web, shared, billing, scripts | +| `npm run test:unit:scripts` | Repo script tests only | +| `npm run test:integration` | Integration tests | +| `npm run test:e2e` | Maestro E2E | +| `npm run test:db` | Database tests (pgTAP) | +| `npm run test:all` | `test` + E2E | + +Strategy and conventions: [TESTING.md](TESTING.md). OAuth testing: [testing/TESTING_OAUTH.md](testing/TESTING_OAUTH.md). + +## Mobile + +From the repo root: + +- `npm run mobile` / `npm run mobile:ios` / `npm run mobile:android` +- `npm run mobile:clean` — stop Metro/Expo-related processes + +Native rebuilds, simulator uninstall, `prebuild --clean`, and EAS flows: [guides/MOBILE.md](guides/MOBILE.md) and [MOBILE_BUILD_TESTING.md](MOBILE_BUILD_TESTING.md). + +## Deployment (CI/CD) + +| Trigger | Workflow | +| ----------------- | ----------------------------------------------------------------------------- | +| Pull requests | [pr-preview-environment.yml](../.github/workflows/pr-preview-environment.yml) | +| Push to `develop` | [deploy-staging.yml](../.github/workflows/deploy-staging.yml) | +| Push to `main` | [deploy-production.yml](../.github/workflows/deploy-production.yml) | + +PR preview setup: [pr-preview-setup.md](pr-preview-setup.md). Environment design: [ARCHITECTURE.md](ARCHITECTURE.md). + +## Branch flow + +- Feature branches → PR into `develop` (squash merge) +- `develop` → promotion PR into `main` (merge commit) +- `main` → production deploys and npm package releases (when changesets are pending) + +See [ARCHITECTURE.md](ARCHITECTURE.md#pull-request-process) and [CONTRIBUTING.md](../CONTRIBUTING.md). + +## Documentation changes + +Before merging doc-only PRs, run: + +```bash +npm run docs:linkcheck +``` diff --git a/docs/OAUTH.md b/docs/OAUTH.md new file mode 100644 index 00000000..53b78184 --- /dev/null +++ b/docs/OAUTH.md @@ -0,0 +1,594 @@ +# OAuth + +Beaker Stack ships OAuth UI and session handling for web and mobile. You configure providers in Google/Apple consoles and Supabase — the app code is already wired. + +## Overview + +### What's already implemented + +- OAuth UI (Google / Apple buttons) on web; native Google Sign-In on mobile +- **Web:** `signInWithOAuth`, redirect handling, `/auth/callback` route +- **Mobile:** `@react-native-google-signin/google-signin` → `signInWithIdToken` with Supabase (see `packages/shared/src/hooks/useAuth.native.ts`) +- Unit tests for auth flows + +### What you configure + +- OAuth apps in Google Cloud (and Apple Developer for Sign in with Apple) +- Client IDs/secrets in Supabase (local: `config.toml` + `.env.local`; cloud: dashboard) +- Redirect URLs that match Supabase's callback exactly + +### Reading order + +1. **Quick local setup** (below) — localhost Google + Supabase in ~15 minutes +2. **Production setup** — staging/production Google + Apple, Supabase cloud +3. **Mobile native flow** — native Google Sign-In and Supabase ID token exchange + +Related: [testing/TESTING_OAUTH.md](testing/TESTING_OAUTH.md) + +--- + +## Quick local setup + +This is a quick reference for setting up OAuth with your existing Google OAuth credentials. + +### Step 1: Configure Google OAuth Redirect URLs + +**IMPORTANT**: Google sees Supabase's callback URL, NOT your app's callback URL. + +Your Google OAuth app needs to allow these redirect URLs: + +1. Go to [Google Cloud Console](https://console.cloud.google.com/) +2. Navigate to "APIs & Services" → "Credentials" +3. Click on your OAuth client ID +4. **Clear any existing redirect URIs** that point to your app (like `http://localhost:5173/auth/callback`) +5. Add **BOTH** of these **Authorized redirect URIs** (Supabase might use either): + + ``` + http://localhost:54321/auth/v1/callback + http://127.0.0.1:54321/auth/v1/callback + ``` + + **Why both?** Supabase may send either `localhost` or `127.0.0.1` depending on how it's accessed. Google treats them as different URLs, so we need both. + + **Note**: These are `localhost:54321` or `127.0.0.1:54321` (Supabase), NOT `localhost:5173` (your web app) + + (For production, also add: `https://your-project-ref.supabase.co/auth/v1/callback`) + +6. Click "Save" + +**How it works:** + +- Your app redirects to Google → Google redirects to Supabase (`localhost:54321/auth/v1/callback`) → Supabase redirects to your app (`localhost:5173/auth/callback`) +- Google only sees the Supabase URL, so that's what must be in Google Cloud Console + +### Step 2: Configure Supabase (Local Development) + +**Note**: Local Supabase Studio doesn't have a "Providers" UI. You must configure OAuth via `config.toml` and environment variables. + +1. **Create/Update `.env.local`** in the root directory (create it if it doesn't exist): + + ```bash + SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID=your-client-id-here + SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET=your-client-secret-here + ``` + + Replace `your-client-id-here` with your actual Google Client ID and `your-client-secret-here` with your actual Google Client Secret. + +2. **Verify config.toml** is set up correctly: + - The file `supabase/config.toml` should already have `[auth.external.google]` section + - It should have `enabled = true` + - It uses environment variables: `env(SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID)` and `env(SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET)` + +3. **Restart Supabase** to load the new configuration: + + ```bash + supabase stop + supabase start + ``` + + **Important**: Supabase reads `.env.local` from the root directory where you run `supabase start` + +### Step 3: Verify Configuration + +1. **Check config**: + + ```bash + # Verify Supabase is reading the config + supabase status + ``` + +2. **Test OAuth in your app**: + - Navigate to `/login` in your web app + - Click "Sign in with Google" + - You should be redirected to Google's OAuth consent screen + - After consent, you should be redirected back and logged in + +### Troubleshooting + +**Issue: "redirect_uri_mismatch" error (Error 400)** + +- **Common mistake**: You added `http://localhost:5173/auth/callback` to Google → **WRONG!** +- **Correct solution**: Add **BOTH** to Google Cloud Console: + - `http://localhost:54321/auth/v1/callback` + - `http://127.0.0.1:54321/auth/v1/callback` +- **Why both?** Supabase may use either `localhost` or `127.0.0.1` - Google treats them as different URLs +- Remove any app URLs from Google Cloud Console redirect URIs +- The flow: Google → Supabase → Your App (Google only sees Supabase's URL) +- **Still failing?** Check browser Network tab to see which redirect_uri Supabase actually sends + +**Issue: OAuth button doesn't work** + +- Solution: Check that `enabled = true` in `config.toml` and you've restarted Supabase + +**Issue: "Invalid client" error** + +- Solution: Verify your Client ID and Secret are correct in Supabase Studio + +### Next Steps + +Once Google OAuth is working, you can: + +- Test the full sign-in flow +- Test sign-up flow (first-time Google user) +- Test protected routes with OAuth users + +### Testing Checklist + +After configuring everything: + +- [ ] Restarted Supabase (`supabase stop && supabase start`) +- [ ] Waited 2-3 minutes for Google settings to propagate (if just changed) +- [ ] Tried OAuth flow in incognito/private browser window +- [ ] Verified redirect URI in browser Network tab matches `http://localhost:54321/auth/v1/callback` + +If you see `redirect_uri_mismatch` error: + +1. Check browser Network tab → find Google OAuth request → verify the `redirect_uri` parameter +2. Ensure it's exactly: `http://localhost:54321/auth/v1/callback` (not `127.0.0.1`, not your app URL) +3. If different, the issue is in Supabase config or Google hasn't updated yet + +--- + +## Production setup + +This guide walks you through setting up Google and Apple OAuth for your Beaker Stack in production. The OAuth implementation is already complete in the codebase - you just need to configure the OAuth providers. + +### Checklist + +**Already in the codebase:** + +- OAuth UI (Google / Apple buttons) and `signInWithOAuth` on web +- Redirect handling and error states +- Unit tests for auth flows + +**You configure:** + +- OAuth apps in Google Cloud and Apple Developer +- Client IDs and secrets in Supabase +- Redirect URLs that match Supabase callbacks exactly + +**Rough time:** + +- **Google OAuth**: ~15 minutes +- **Apple OAuth**: ~30-45 minutes (requires Apple Developer account) +- **Supabase Config**: ~5 minutes +- **Testing**: ~10 minutes + +### Google OAuth setup + +#### Prerequisites + +- Google account +- Access to [Google Cloud Console](https://console.cloud.google.com/) + +#### Step 1: Create a Google Cloud Project + +1. Go to [Google Cloud Console](https://console.cloud.google.com/) +2. Click "Select a project" → "New Project" +3. Enter project name: `Beaker Stack` (or your preferred name) +4. Click "Create" +5. Wait for project creation (usually ~30 seconds) + +#### Step 2: Configure OAuth consent screen + +No additional Google API needs to be enabled for sign-in — configure the OAuth consent screen, then create credentials. + +1. Go to "APIs & Services" → "OAuth consent screen" +2. Select "External" user type +3. Click "Create" +4. Fill in required fields: + - **App name**: `Beaker Stack` + - **User support email**: Your email + - **Developer contact email**: Your email +5. Click "Save and Continue" +6. **Scopes**: Click "Add or Remove Scopes" + - Add: `userinfo.email` + - Add: `userinfo.profile` + - Add: `openid` +7. Click "Save and Continue" +8. **Test users** (optional for development): + - Add your email and any test user emails +9. Click "Save and Continue" +10. Review and click "Back to Dashboard" + +#### Step 3: Create OAuth credentials + +1. Go to "APIs & Services" → "Credentials" +2. Click "Create Credentials" → "OAuth client ID" +3. Select "Web application" +4. Enter name: `Beaker Stack Web Client` +5. **Authorized JavaScript origins**: + ``` + http://localhost:5173 + https://yourdomain.com + ``` +6. **Authorized redirect URIs**: + + ``` + http://localhost:54321/auth/v1/callback + https://your-project-ref.supabase.co/auth/v1/callback + ``` + + **Important**: Replace `your-project-ref` with your actual Supabase project reference ID (found in Supabase Dashboard → Settings → API) + +7. Click "Create" +8. **Save these credentials** (you'll need them for Supabase): + - Client ID (looks like: `123456789-abc123.apps.googleusercontent.com`) + - Client Secret (looks like: `GOCSPX-abc123xyz789`) + +#### Step 4: Configure for mobile (optional) + +If you want OAuth to work in the mobile app: + +1. Create another OAuth client ID +2. Select "iOS" or "Android" +3. Follow platform-specific instructions +4. Add the bundle ID / package name from your Expo app + +--- + +### Apple OAuth setup + +#### Prerequisites + +- Apple Developer account ($99/year) +- Access to [Apple Developer Portal](https://developer.apple.com/) + +#### Step 1: Create an App ID + +1. Go to [Apple Developer Portal](https://developer.apple.com/account/) +2. Navigate to "Certificates, Identifiers & Profiles" +3. Click "Identifiers" → "+" button +4. Select "App IDs" → Click "Continue" +5. Select "App" → Click "Continue" +6. Fill in: + - **Description**: `Beaker Stack` + - **Bundle ID**: `com.yourcompany.beakerstack` (must match your app) +7. Under "Capabilities", check "Sign in with Apple" +8. Click "Continue" → "Register" + +#### Step 2: Create a Services ID (for Web) + +1. Go back to "Identifiers" → "+" button +2. Select "Services IDs" → Click "Continue" +3. Fill in: + - **Description**: `Beaker Stack Web` + - **Identifier**: `com.yourcompany.beakerstack.web` +4. Check "Sign in with Apple" +5. Click "Continue" → "Register" + +#### Step 3: Configure Sign in with Apple + +1. Click on your Services ID (`com.yourcompany.beakerstack.web`) +2. Check "Sign in with Apple" +3. Click "Configure" +4. **Primary App ID**: Select your App ID from Step 1 +5. **Domains and Subdomains**: + ``` + yourdomain.com + your-project-ref.supabase.co + ``` +6. **Return URLs**: + + ``` + https://your-project-ref.supabase.co/auth/v1/callback + ``` + + **Important**: Replace `your-project-ref` with your Supabase project reference + +7. Click "Next" → "Done" → "Continue" → "Save" + +#### Step 4: Create a Private Key + +1. Go to "Keys" → "+" button +2. Enter **Key Name**: `Beaker Stack Sign in with Apple Key` +3. Check "Sign in with Apple" +4. Click "Configure" +5. Select your Primary App ID +6. Click "Save" → "Continue" → "Register" +7. **Download the key file** (.p8 file) + - **Important:** You can only download this once. Save it securely. +8. Note the **Key ID** (10-character string, e.g., `ABC123DEFG`) + +#### Step 5: Get Your Team ID + +1. Go to "Membership" in the Apple Developer Portal +2. Note your **Team ID** (10-character string, e.g., `XYZ987WXYZ`) + +#### Step 6: Prepare Credentials for Supabase + +You'll need these values: + +- **Services ID**: `com.yourcompany.beakerstack.web` +- **Team ID**: From Step 5 +- **Key ID**: From Step 4 +- **Private Key**: Contents of the .p8 file from Step 4 + +--- + +### Supabase configuration + +#### For Local Development + +1. Open your local Supabase dashboard: + + ```bash + supabase start + # Opens at http://localhost:54323 + ``` + +2. Go to "Authentication" → "Providers" + +3. **Configure Google**: + - Toggle "Google" to enabled + - Enter **Client ID** from Google setup + - Enter **Client Secret** from Google setup + - Click "Save" + +4. **Configure Apple**: + - Toggle "Apple" to enabled + - Enter **Services ID** (e.g., `com.yourcompany.beakerstack.web`) + - Enter **Team ID** + - Enter **Key ID** + - Paste **Private Key** (entire contents of .p8 file) + - Click "Save" + +#### For Production (Supabase Cloud) + +1. Go to your [Supabase Dashboard](https://app.supabase.com/) +2. Select your project +3. Go to "Authentication" → "Providers" +4. Follow the same steps as local development above + +#### Redirect URLs + +Supabase automatically handles redirect URLs at: + +``` +Local: http://localhost:54321/auth/v1/callback +Production: https://your-project-ref.supabase.co/auth/v1/callback +``` + +Your app will handle the redirect and extract the session. + +--- + +### Testing OAuth + +#### Local testing (web) + +1. Start your local Supabase: + + ```bash + supabase start + ``` + +2. Start your web app: + + ```bash + cd apps/web + npm run dev + ``` + +3. Navigate to login page: `http://localhost:5173/login` + +4. Click "Sign in with Google" or "Sign in with Apple" + +5. **Expected flow**: + - Opens OAuth provider login popup/redirect + - User authenticates with Google/Apple + - Redirects back to your app + - User is logged in + - Redirects to home/dashboard + +#### Local testing (mobile) + +Mobile Google sign-in uses the native SDK and `signInWithIdToken`, not a browser OAuth redirect. See [Mobile native flow](#mobile-native-flow) and [MOBILE_BUILD_TESTING.md](MOBILE_BUILD_TESTING.md). + +#### Manual verification + +After successful OAuth login, verify: + +1. **User appears in Supabase**: + - Open Supabase Studio + - Go to "Authentication" → "Users" + - You should see the new user with provider info + +2. **Auth state in app**: + - Check the debug UI on home page + - Should show `user` and `session` populated + - `user.app_metadata.provider` should be `google` or `apple` + +3. **User profile created**: + - Go to "Table Editor" → `user_profiles` + - Should see a profile for the new user (created by trigger) + +--- + +### Troubleshooting + +#### Google OAuth Issues + +##### "Error 400: redirect_uri_mismatch" + +- **Cause**: Redirect URI not configured in Google Cloud Console +- **Fix**: Add the exact redirect URI to "Authorized redirect URIs" + ``` + http://localhost:54321/auth/v1/callback + ``` + +##### "Access blocked: This app's request is invalid" + +- **Cause**: OAuth consent screen not configured +- **Fix**: Complete the OAuth consent screen setup in Step 2 + +##### "Error 401: invalid_client" + +- **Cause**: Client ID or Secret incorrect in Supabase +- **Fix**: Double-check credentials in Supabase dashboard + +#### Apple OAuth Issues + +##### "invalid_client" + +- **Cause**: Services ID, Team ID, or Key ID incorrect +- **Fix**: Verify all IDs match exactly (case-sensitive) + +##### "Invalid key" + +- **Cause**: Private key not formatted correctly +- **Fix**: Paste the entire contents of the .p8 file, including: + ``` + -----BEGIN PRIVATE KEY----- + [key contents] + -----END PRIVATE KEY----- + ``` + +##### "Redirect URI mismatch" + +- **Cause**: Return URL not configured in Apple Developer Portal +- **Fix**: Add exact URL in Services ID configuration + +#### General OAuth Issues + +##### "OAuth provider not configured" + +- **Cause**: Provider not enabled in Supabase +- **Fix**: Enable provider in Supabase dashboard + +##### "Popup blocked" + +- **Cause**: Browser blocking OAuth popup +- **Fix**: Allow popups for localhost/your domain + +##### OAuth works locally but not in production + +- **Cause**: Production redirect URLs not configured +- **Fix**: Add production URLs to both OAuth provider and Supabase + +--- + +### Security best practices + +#### Credentials storage + +- **Never** commit OAuth credentials to git +- Store secrets in the Supabase dashboard (or your secret manager) +- Use environment variables for any app-side config +- Keep `.p8` files secure and backed up + +#### Redirect URLs + +- Use HTTPS in production (HTTP only for localhost) +- Whitelist specific domains (avoid wildcards) +- Keep redirect URLs as specific as possible + +#### Scopes + +- Only request necessary scopes (email, profile) +- Do not request unnecessary permissions +- Explain to users why you need each scope + +--- + +### Next steps + +Once OAuth is configured: + +1. Test OAuth login flow +2. Verify user creation in the database +3. Test on multiple browsers +4. Test on mobile (see [Mobile native flow](#mobile-native-flow)) +5. Document any custom OAuth flows for your team +6. Set up monitoring for OAuth errors + +--- + +### Additional resources + +- [Supabase OAuth Documentation](https://supabase.com/docs/guides/auth/social-login) +- [Google OAuth Documentation](https://developers.google.com/identity/protocols/oauth2) +- [Apple Sign In Documentation](https://developer.apple.com/sign-in-with-apple/) + +--- + +### Support + +If you encounter issues: + +1. Check [Troubleshooting](#troubleshooting) under Production setup +2. Review Supabase logs in dashboard +3. Check browser console for errors +4. Verify all credentials are correct +5. Ensure redirect URLs match exactly + +**Common gotcha**: Redirect URLs must match EXACTLY (including protocol, port, and path). + +--- + +## Mobile native flow + +How sign-in differs on mobile vs web. + +### Web vs mobile + +**Web** uses the browser OAuth redirect flow: `signInWithOAuth` → Google → Supabase callback → your app’s `/auth/callback` route. + +**Mobile (Google)** uses the native SDK, not a browser redirect loop: + +1. User taps “Sign in with Google” +2. `@react-native-google-signin/google-signin` shows the native Google UI +3. App receives a Google **ID token** +4. `packages/shared/src/hooks/useAuth.native.ts` calls `supabase.auth.signInWithIdToken({ provider: 'google', token })` +5. Supabase session is established; the app navigates to the authenticated stack + +Apple and email flows follow their own paths; configure providers in Supabase and platform consoles as for web where applicable. + +### What is wired in the repo + +- `@react-native-google-signin/google-signin` in `apps/mobile` (requires a **development build**, not Expo Go) +- `useAuth.native.ts` — Google Sign-In configuration from env (`EXPO_PUBLIC_GOOGLE_*` client IDs) +- `scheme: 'beaker-stack'` in `apps/mobile/app.config.js` (for other deep links; Google sign-in does not rely on `beaker-stack://auth/callback` for the native flow) + +### Configure Google for mobile + +1. In [Google Cloud Console](https://console.cloud.google.com/), create **iOS** and/or **Android** OAuth clients (in addition to the web client used by Supabase redirects). +2. Set bundle ID / package name to match `apps/mobile/app.config.js`. +3. Add the **Web client ID** to `.env.local` / EAS secrets as required by the Google Sign-In SDK (see `useAuth.native.ts` and mobile env docs). +4. Enable Google in Supabase Auth for your project. + +### Test on device or simulator + +1. Use a dev client build (`npm run mobile:build:dev:ios` or Android equivalent) — see [MOBILE_BUILD_TESTING.md](MOBILE_BUILD_TESTING.md). +2. `npm run mobile` from the repo root; open Login and tap Google sign-in. +3. Confirm the user appears in Supabase Studio → Authentication. + +### Troubleshooting (mobile) + +**“Google Sign-In module not available”** — run a development build, not Expo Go. + +**Sign-in succeeds but no session** — verify web client ID env vars and that `signInWithIdToken` is allowed for Google in Supabase. + +**Play Services errors (Android)** — emulator/device needs Google Play services; see SDK docs. + +For web OAuth redirect issues, use the troubleshooting sections above (Quick local / Production). diff --git a/docs/README.md b/docs/README.md index 94433836..6a749886 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,14 +15,11 @@ Start on the repo root **[README.md](../README.md)** and **[QUICKSTART.md](../QU | [project-label-bridge.md](project-label-bridge.md) | **Optional:** label-driven org GitHub Project updates (`npm run setup:project-label-bridge`) | | [branch-protection-setup.md](branch-protection-setup.md) | Branch rules | -## OAuth (canonical order) +## OAuth -| Document | Purpose | -| ---------------------------------------------------------- | ----------------------------- | -| [oauth/README.md](oauth/README.md) | OAuth doc map | -| [oauth/OAUTH_QUICK_SETUP.md](oauth/OAUTH_QUICK_SETUP.md) | Quick local Google + Supabase | -| [oauth/OAUTH_SETUP.md](oauth/OAUTH_SETUP.md) | Production OAuth setup | -| [oauth/MOBILE_OAUTH_SETUP.md](oauth/MOBILE_OAUTH_SETUP.md) | Native mobile OAuth | +| Document | Purpose | +| -------------------- | ---------------------------------------------------------------------------------- | +| [OAUTH.md](OAUTH.md) | **Canonical guide** — local setup, production (Google + Apple), mobile native flow | ## Testing and quality @@ -55,13 +52,17 @@ Start on the repo root **[README.md](../README.md)** and **[QUICKSTART.md](../QU | [stripe-billing-setup.md](stripe-billing-setup.md) | Stripe account → webhooks → Edge secrets → price sync | | [guides/billing-plan-catalog.md](guides/billing-plan-catalog.md) | Plan `features` / `usage_limits`, `billing:apply-plans`, rollout checklist | | [guides/MOBILE.md](guides/MOBILE.md) | Native rebuilds, dev client | -| [guides/DEBUGGING_NAVIGATION.md](guides/DEBUGGING_NAVIGATION.md) | Navigation debugging notes | | [mobile-ios-patching.md](mobile-ios-patching.md) | iOS-specific patches | | [REALTIME_DEVELOPMENT.md](REALTIME_DEVELOPMENT.md) | Realtime dev notes | -## Architecture +## Architecture, versioning, development -See root **[ARCHITECTURE.md](../ARCHITECTURE.md)** for environments, data flow, and design decisions. +| Document | Purpose | +| ---------------------------------- | ----------------------------------------- | +| [ARCHITECTURE.md](ARCHITECTURE.md) | Environments, data flow, design decisions | +| [VERSIONING.md](VERSIONING.md) | Template CalVer vs npm semver | +| [UPGRADING.md](UPGRADING.md) | Pull template updates into a fork | +| [DEVELOPMENT.md](DEVELOPMENT.md) | Day-to-day commands, tests, CI/CD | ## Contributing diff --git a/UPGRADING.md b/docs/UPGRADING.md similarity index 88% rename from UPGRADING.md rename to docs/UPGRADING.md index 830ea03f..590e53ee 100644 --- a/UPGRADING.md +++ b/docs/UPGRADING.md @@ -1,10 +1,10 @@ # Upgrading -This guide covers how to pull BeakerStack changes into a fork you have already set up. See [VERSIONING.md](VERSIONING.md) for how template tags and package versions work. +This guide covers how to pull Beaker Stack changes into a fork you have already set up. See [VERSIONING.md](VERSIONING.md) for how template tags and package versions work. ## Prerequisites -Add the BeakerStack repo as an upstream remote if you have not already: +Add the Beaker Stack repo as an upstream remote if you have not already: ```bash git remote add upstream https://github.com/Artificer-Innovations/BeakerStack.git diff --git a/docs/VERSIONING.md b/docs/VERSIONING.md new file mode 100644 index 00000000..471a1292 --- /dev/null +++ b/docs/VERSIONING.md @@ -0,0 +1,97 @@ +# Versioning + +Beaker Stack uses **two parallel versioning schemes**: CalVer for the monorepo **template**, and semver for **npm packages**. They are intentional and serve different consumers. + +| Distribution | Version format | How it ships | Release notes | +| ------------ | ----------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------- | +| **Template** | CalVer `YYYY.NNN` (e.g. `2026.001`) | Git tag on `main`, GitHub Release, "Use this template" | [git-cliff](https://github.com/orhun/git-cliff) from conventional commits | +| **Packages** | semver `MAJOR.MINOR.PATCH` | npm (`@beakerstack/*`) | Changesets → package CHANGELOG + GitHub Release | + +Template release notes: [GitHub Releases](https://github.com/Artificer-Innovations/BeakerStack/releases). There is no hand-maintained root `CHANGELOG.md`; use Releases for "what's new." + +--- + +## Template releases — `YYYY.NNN` + +Template releases are **monorepo snapshot tags** on `main`. A tag like `2026.003` means: _this is what Beaker Stack looked like at that point in time, and it is a good base to fork from._ + +Tags use **CalVer with a zero-padded sequence number** within the year: + +``` +2026.001 first release of 2026 +2026.002 second release of 2026 +2026.013 thirteenth release of 2026 +``` + +`NNN` increments arbitrarily — there is no meaning to how much time passes between releases. + +### Why CalVer for the template + +Fork-based templates do not have a single linear "installed version" in the npm sense. Consumers copy the repo and diverge immediately. **"Breaking change" is fuzzy** when the unit of adoption is a fork, not a dependency pin. CalVer tags answer: _"what snapshot am I based on, and when was it cut?"_ without implying semver compatibility across unrelated forks. + +### Root `package.json` version + +The root package is `"private": true` and is **not published to npm**. Its `"version"` field (`2026.1.0` today) is a semver-shaped mirror of the latest template tag (`2026.001`) for tooling that expects a version string. **The canonical template version is the git tag**, not `package.json`. + +### What counts as a breaking change + +A template release is **breaking** if adopters who have forked the template need to take manual action before upgrading. That includes: + +- A new required GitHub Actions secret or repository variable +- A renamed or removed secret / variable that CI depends on +- A changed top-level folder structure (e.g. a directory moved or renamed) +- A changed setup script behavior (flags renamed, phases reordered, outputs changed) +- A new migration step needed to align an existing fork with the updated baseline + +Breaking changes are called out explicitly in the release notes generated for that tag. + +### `main` vs. tagged releases + +| Ref | What it is | Recommended for | +| ---------- | ------------------- | ------------------------------------------------------------------- | +| `main` | Current stable HEAD | Following along with active development | +| `2026.NNN` | Snapshot tag | Starting a new fork; upgrading an existing fork in a controlled way | + +If you are forking Beaker Stack to build a product, start from a tagged release so your upgrade story is clear from day one. + +### Pulling template updates into a fork + +See [UPGRADING.md](UPGRADING.md). Expect merge conflicts when you have customized shared files; release notes list manual steps (secrets, migrations, script flags). Template tags do not auto-update forks — you merge or cherry-pick deliberately. + +--- + +## Package releases — semver + +`@beakerstack/*` packages published to npm use standard **semantic versioning**. Each package is versioned independently via [Changesets](https://github.com/changesets/changesets). Release notes for package versions appear on each package's GitHub Release and in `packages/*/CHANGELOG.md` after publish. + +### Why semver for packages + +npm consumers expect semver. Patch/minor/major communicate API and behavior expectations for **dependencies**, which is a different contract than "whole template snapshot." + +### Published vs. in-template today + +| Package | npm status | Notes | +| --------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `@beakerstack/test-utils` | **Published on npm** (`0.0.1` today) | Workspace `package.json` may stay `0.0.0` until the Changesets release PR merges; pending `.changeset/` files are normal | +| `@beakerstack/billing` | **In template only** (`private: true`) | Use via workspace; npm publish planned | +| `@beakerstack/shared` | **In template only** (`private: true`) | Ignored in Changesets until publish is intentional | +| `@beakerstack/shared-tests` | Internal | Not published | + +Infrastructure for npm publish (Changesets, `NPM_TOKEN`, build on `main`) is in place. Only packages removed from `.changeset/config.json` `ignore` and marked non-private with `publishConfig` will ship to npm. + +### How template and package releases interact + +- A **template tag** may ship at a point in time when package folders contain certain code, but the tag does not version those packages for npm. +- **Package releases** can happen independently when changesets merge to `main`, without a new CalVer tag. +- A template release **may** coincide with bumping in-repo package versions, but adopters who only use the template via fork care about the **CalVer tag**; adopters who `npm install @beakerstack/*` care about **package semver**. + +--- + +## Cutting releases (maintainers) + +| Kind | Trigger | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Template CalVer | Manual: [release-template.yml](../.github/workflows/release-template.yml) — paste prose from [RELEASE_TEMPLATE.md](../.github/RELEASE_TEMPLATE.md) above git-cliff output | +| npm packages | Push to `main` with pending changesets → Changesets "chore: release packages" PR → merge → publish | + +Commits on the template must use **conventional commits** (`feat:`, `fix:`, etc.) so git-cliff can group release notes. Changes under publishable `packages/*` require `npx changeset` in the PR. See [CONTRIBUTING.md](../CONTRIBUTING.md). diff --git a/docs/guides/MOBILE.md b/docs/guides/MOBILE.md index bcab0475..cad44d6b 100644 --- a/docs/guides/MOBILE.md +++ b/docs/guides/MOBILE.md @@ -21,7 +21,7 @@ Use these when native projects are stale, simulators lost the app, or native mod | `npm run ios:uninstall` / `npm run android:uninstall` | Remove the app from booted simulator / connected device before reinstalling | | `npm run prebuild:clean` | Regenerate `ios/` and `android/` with Expo prebuild (destructive; review diffs) | -For EAS builds, dev-client install flows, and CI-driven previews, see [MOBILE_BUILD_TESTING.md](../MOBILE_BUILD_TESTING.md) and [oauth/MOBILE_OAUTH_SETUP.md](../oauth/MOBILE_OAUTH_SETUP.md). +For EAS builds, dev-client install flows, and CI-driven previews, see [MOBILE_BUILD_TESTING.md](../MOBILE_BUILD_TESTING.md) and [OAUTH.md](../OAUTH.md) (mobile native flow). ## Local Supabase schema diff --git a/docs/guides/billing-plan-catalog.md b/docs/guides/billing-plan-catalog.md index 653f0123..539faaf1 100644 --- a/docs/guides/billing-plan-catalog.md +++ b/docs/guides/billing-plan-catalog.md @@ -1,6 +1,6 @@ # Billing plan catalog (features and usage limits) -This guide is the **checklist for changing entitlements** in BeakerStack: booleans, numeric caps, and metered `usage_limits`. It complements [stripe-billing-setup.md](../stripe-billing-setup.md) (Stripe keys, webhooks, price sync). +This guide is the **checklist for changing entitlements** in Beaker Stack: booleans, numeric caps, and metered `usage_limits`. It complements [stripe-billing-setup.md](../stripe-billing-setup.md) (Stripe keys, webhooks, price sync). ## Source of truth diff --git a/docs/images/readme/billing.png b/docs/images/readme/billing.png new file mode 100644 index 0000000000000000000000000000000000000000..2442b0ee95cd10b308c993c74fc8337c997b38ed GIT binary patch literal 50566 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 Ugi`Id-+(W9X%(qz3FE;32UZ(gz5oCK literal 0 HcmV?d00001 diff --git a/docs/images/readme/environments-pipeline.png b/docs/images/readme/environments-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..569688c2b2763065a9569c72c6e5613b9523242c GIT binary patch literal 74176 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

yR|DnH+ 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 literal 0 HcmV?d00001 diff --git a/docs/images/readme/hero.png b/docs/images/readme/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c7bc18189ab61c78ae7460dd9396675af3c864 GIT binary patch literal 91366 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 R%rF1|002ovPDHLkV1h?#ZD{}i literal 0 HcmV?d00001 diff --git a/docs/images/readme/mobile-hero.png b/docs/images/readme/mobile-hero.png new file mode 100644 index 0000000000000000000000000000000000000000..bdef72142025fde6b25443d180c3499209c8e387 GIT binary patch literal 69416 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Ŷk1??TP!m0ddG;he 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%0A%h4F1VKLd#aJ#^u`{meR{SjC;-2l?U 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 **Status:** Shipped in the BeakerStack template. Setup: [`docs/stripe-billing-setup.md`](../stripe-billing-setup.md). QA: [`apps/web/docs/billing-testing.md`](../../apps/web/docs/billing-testing.md). Core module: [`docs/specs/beakerstack-billing-v1.md`](./beakerstack-billing-v1.md). +> **Status:** Shipped in the Beaker Stack template. Setup: [`docs/stripe-billing-setup.md`](../stripe-billing-setup.md). QA: [`apps/web/docs/billing-testing.md`](../../apps/web/docs/billing-testing.md). Core module: [`docs/specs/beakerstack-billing-v1.md`](./beakerstack-billing-v1.md). Production-quality billing pages matching the template's existing visual language. The `/billing` route family has four sub-pages; the data model supports monthly/annual cadence and invoice history. Billing is a sibling route to `/profile` (no global settings shell). @@ -232,7 +232,7 @@ Billing icon: Lucide `CreditCard`. Profile keeps its existing icon. Dashboard ke When constraint warning is present, the action button is disabled with text "Resolve issues to downgrade" OR enabled with text "Downgrade anyway" depending on whether the constraint is hard (numeric cap exceeded) or soft (feature usage). For v1, all constraints are hard — button is disabled. Document this in code comments so it's easy to relax later. -**Implementation note (BeakerStack):** boolean entitlement loss is treated as a **soft** constraint (warning shown, downgrade CTA remains enabled); **collections cap, items-per-collection cap, and metered usage** against the target plan remain **hard** (CTA disabled until resolved). This supersedes the “v1 all hard” behavior for booleans only. +**Implementation note (Beaker Stack):** boolean entitlement loss is treated as a **soft** constraint (warning shown, downgrade CTA remains enabled); **collections cap, items-per-collection cap, and metered usage** against the target plan remain **hard** (CTA disabled until resolved). This supersedes the “v1 all hard” behavior for booleans only. **Confirmation modal for downgrades:** clicking a downgrade button opens a modal with: @@ -303,7 +303,7 @@ These are extensions to the existing module. No domain vocabulary, no tier-speci ### Components in `apps/web/src/components/billing/` (template-level, opinionated) -These live in the app, not the package. They're the styled, BeakerStack-flavored building blocks that forks edit directly to change look. +These live in the app, not the package. They're the styled, Beaker Stack-flavored building blocks that forks edit directly to change look. | Component | Purpose | | ------------------------------- | -------------------------------------------------------------------------------------- | @@ -323,7 +323,7 @@ These live in the app, not the package. They're the styled, BeakerStack-flavored For each `.web.tsx`, ship a `.native.tsx` sibling for mobile parity. Shared logic and prop types go in a sibling `.ts` file. -**Boundary rationale:** anything that needs to look generically "billing-y" with no design opinion stays in `packages/billing`. Anything that has BeakerStack-specific styling, copy patterns, or layout opinions lives in `apps/web`. The test: a fork that wants a totally different look should be able to rewrite all of `apps/web/src/components/billing/` without touching `packages/billing`. +**Boundary rationale:** anything that needs to look generically "billing-y" with no design opinion stays in `packages/billing`. Anything that has Beaker Stack-specific styling, copy patterns, or layout opinions lives in `apps/web`. The test: a fork that wants a totally different look should be able to rewrite all of `apps/web/src/components/billing/` without touching `packages/billing`. ## 6. Data model additions @@ -393,7 +393,7 @@ Each handler resolves `user_id` by looking up `stripe_customer_id` against `bill These are explicitly out of scope. Document them in code comments where the temptation to build them might arise, so future contributors know they were deliberately deferred. - **Native payment method editing.** Always link out to Stripe customer portal for card updates. The `hosted_invoice_url` and Stripe portal handle every payment-method-adjacent flow. -- **PDF invoice generation.** We use Stripe's `invoice_pdf_url` directly. Don't generate PDFs in BeakerStack. +- **PDF invoice generation.** We use Stripe's `invoice_pdf_url` directly. Don't generate PDFs in Beaker Stack. - **Native invoice itemization.** The invoice table shows summary; users click "View" to see Stripe-hosted line items. - **Team / seats / per-user pricing.** Not part of v1. The data model assumes one subscription per user. - **Proration preview.** Stripe handles proration server-side at upgrade/downgrade time. We don't compute or display previews; we trust Stripe. diff --git a/docs/specs/beakerstack-billing-v1.md b/docs/specs/beakerstack-billing-v1.md index 1ab9fec2..49595a4a 100644 --- a/docs/specs/beakerstack-billing-v1.md +++ b/docs/specs/beakerstack-billing-v1.md @@ -1,19 +1,19 @@ -# BeakerStack Billing v1 +# Beaker Stack Billing v1 **Shared billing and entitlements infrastructure for Artificer Innovations factory products.** -_A module within BeakerStack, open source MIT_ +_A module within Beaker Stack, open source MIT_ **Version:** 1.0 Draft **Purpose:** Technical specification for minimal v1 billing features supporting B2C SaaS projects -> **Status:** Implemented in `@beakerstack/billing` and the BeakerStack template. This spec may lag the codebase in minor API naming; use [`apps/web/docs/billing-testing.md`](../../apps/web/docs/billing-testing.md) for operational QA. +> **Status:** Implemented in `@beakerstack/billing` and the Beaker Stack template. This spec may lag the codebase in minor API naming; use [`apps/web/docs/billing-testing.md`](../../apps/web/docs/billing-testing.md) for operational QA. --- ## Purpose -BeakerStack Billing is a shared module within the BeakerStack full-stack template that provides subscription billing, entitlements management, and usage tracking. It's designed to serve multiple products from a single implementation, supporting the Artificer Innovations factory's need for consistent billing infrastructure across seed products. +Beaker Stack Billing is a shared module within the Beaker Stack full-stack template that provides subscription billing, entitlements management, and usage tracking. It's designed to serve multiple products from a single implementation, supporting the Artificer Innovations factory's need for consistent billing infrastructure across seed products. V1 is scoped specifically to what simple B2C SaaS products needs for launch, plus a few forward-compatible design choices that make v2 cleaner. The goal is shippable infrastructure in 3-4 weeks, not a complete billing platform. @@ -64,11 +64,11 @@ A user's current entitlements are computed from their active subscription plus t **Principle 3: Multi-product from day one.** -The schema and APIs support multiple products from the start. Adding multiple simple B2C SaaS products should require zero schema changes to BeakerStack Billing. +The schema and APIs support multiple products from the start. Adding multiple simple B2C SaaS products should require zero schema changes to Beaker Stack Billing. **Principle 4: Usage limits enforced at the application layer.** -BeakerStack Billing tracks usage events but does not automatically prevent actions when limits are hit. Each product calls `getRemainingUsage()` and decides how to handle limit exhaustion (typically by showing an upgrade prompt, but products can implement their own logic). +Beaker Stack Billing tracks usage events but does not automatically prevent actions when limits are hit. Each product calls `getRemainingUsage()` and decides how to handle limit exhaustion (typically by showing an upgrade prompt, but products can implement their own logic). **Principle 5: Free tier is first class.** @@ -89,7 +89,7 @@ The billing module itself has exactly two modes: Stripe test mode and Stripe liv │ API calls ▼ ┌─────────────────────────────────────────────┐ -│ BeakerStack Billing Module │ +│ Beaker Stack Billing Module │ │ - Entitlement checks │ │ - Usage tracking │ │ - Subscription management │ @@ -643,7 +643,7 @@ The module itself is agnostic to which mode is configured; Stripe handles the di - **Development and staging environments:** always use test mode - **Production deployments of real products:** use live mode -- **Demo sites showcasing BeakerStack capabilities:** always use test mode, never live mode +- **Demo sites showcasing Beaker Stack capabilities:** always use test mode, never live mode - **Never mix modes within an environment:** test subscriptions cannot be converted to live subscriptions A misconfiguration where a production environment accidentally uses test keys results in payments failing silently (Stripe rejects the test keys for live transactions or processes them as test). The inverse (test environment using live keys) is worse: real charges could occur in a demo or development context. Guard against this with environment variable management discipline. @@ -664,7 +664,7 @@ This pattern lets demo sites show clean instant upgrades by default while preser ### beakerstack.com specific behavior -The BeakerStack demo site at beakerstack.com implements application-layer demo mode as described above. Specifically: +The Beaker Stack demo site at beakerstack.com implements application-layer demo mode as described above. Specifically: - Stripe test mode is configured (test keys only, never live) - Default upgrade path shortcuts Stripe entirely for faster exploration @@ -673,11 +673,11 @@ The BeakerStack demo site at beakerstack.com implements application-layer demo m - Demo accounts accumulate without automatic reset (deferred; manual cleanup as needed) - README documents the demo vs production configuration clearly -This approach serves as the reference implementation for other BeakerStack users who want to build their own demo sites. +This approach serves as the reference implementation for other Beaker Stack users who want to build their own demo sites. -### Mode switching for new BeakerStack users +### Mode switching for new Beaker Stack users -When a developer clones BeakerStack to build their own product, the README walks them through: +When a developer clones Beaker Stack to build their own product, the README walks them through: 1. Creating a Stripe account (free) 2. Obtaining test mode API keys @@ -691,7 +691,7 @@ The mode switch itself is a configuration change, not a code change. The billing ## Open source considerations -Because BeakerStack is open source MIT, BeakerStack Billing is also open source. This means: +Because Beaker Stack is open source MIT, Beaker Stack Billing is also open source. This means: **Generic enough for others to use.** Don't hardcode Artificer Innovations specifics. The module should work for any Stripe-based SaaS using Supabase. @@ -786,15 +786,15 @@ These are beakerstack.com and future-demo-site concerns rather than billing modu --- -## Appendix: BeakerStack open-source template (billing v1 alignment) +## Appendix: Beaker Stack open-source template (billing v1 alignment) -This section extends the billing spec for the **BeakerStack** monorepo: a production-quality `packages/billing` module plus a **template-level** B2C demo. It does not change the core architectural principles above; it constrains how the factory ships the module and how the template validates it. +This section extends the billing spec for the **Beaker Stack** monorepo: a production-quality `packages/billing` module plus a **template-level** B2C demo. It does not change the core architectural principles above; it constrains how the factory ships the module and how the template validates it. ### Template goals 1. Ship a production-quality `packages/billing` module per this document’s core architecture. 2. Build a meaningful B2C-flavored demonstration in `apps/web` (and mirror key pieces in `apps/mobile`) that exercises enough of the module surface to genuinely validate it, not just render a pricing table. -3. Draw a clean, explicit line between the reusable billing module and the BeakerStack template app layer. +3. Draw a clean, explicit line between the reusable billing module and the Beaker Stack template app layer. ### Tier structure: Free / Pro / Max (template demo) @@ -863,7 +863,7 @@ Document in **`apps/web/docs/billing-testing.md`** (canonical CLI walkthrough), **Explicit non-goal for v1:** No admin **“simulate webhook”** UI in the template — avoids payload drift and scope creep. -### Implementation checklist (BeakerStack repo — shipped) +### Implementation checklist (Beaker Stack repo — shipped) - DB migration: billing tables, RLS, core RPCs (`record_usage_event`, reads, `ensure_free`), pgTAP under **`supabase/migrations/`** at repo root. - Edge Functions: `stripe-webhook`, `billing-stripe`; secrets and CI deploy. diff --git a/docs/stripe-billing-setup.md b/docs/stripe-billing-setup.md index 482bcd36..d93f6dc2 100644 --- a/docs/stripe-billing-setup.md +++ b/docs/stripe-billing-setup.md @@ -1,6 +1,6 @@ -# Stripe billing setup (BeakerStack) +# Stripe billing setup (Beaker Stack) -This guide walks you from **zero** to a working **test-mode** Stripe integration with BeakerStack’s billing stack: **Supabase Postgres** (`billing_*` tables), **Edge Functions** (`stripe-webhook`, `billing-stripe`), and the **web/mobile** apps using `@beakerstack/billing`. +This guide walks you from **zero** to a working **test-mode** Stripe integration with Beaker Stack’s billing stack: **Supabase Postgres** (`billing_*` tables), **Edge Functions** (`stripe-webhook`, `billing-stripe`), and the **web/mobile** apps using `@beakerstack/billing`. **Related docs (narrower topics):** @@ -12,7 +12,7 @@ This guide walks you from **zero** to a working **test-mode** Stripe integration ## 0. Billing model overview (what you are actually setting up) -BeakerStack uses Stripe for **commercial billing primitives** and Supabase for **application-side entitlement state**. +Beaker Stack uses Stripe for **commercial billing primitives** and Supabase for **application-side entitlement state**. ### Source of truth split @@ -43,9 +43,9 @@ This repo’s `billing:sync-stripe` command can create/update Products and Price If a plan is paid, it must have a valid Stripe Price and the matching `billing_plans.stripe_price_id`. If that link is missing, checkout is not ready. -### Environment model (BeakerStack default) +### Environment model (Beaker Stack default) -BeakerStack runs four stack versions, each with its own Supabase target and billing wiring: +Beaker Stack runs four stack versions, each with its own Supabase target and billing wiring: | Environment | Supabase target | Stripe key mode | Webhook endpoint in Stripe | | ----------- | ------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------- | @@ -92,7 +92,7 @@ Stripe **test mode** can deliver the same events to every registered webhook URL 1. Open [Stripe Dashboard](https://dashboard.stripe.com/) and turn **Test mode** on (toggle in the header). 2. Go to **Developers → API keys**. 3. Copy: - - **Publishable key** — `pk_test_…` (optional for future client-side Stripe.js; BeakerStack billing checkout is mostly server-driven via Edge). + - **Publishable key** — `pk_test_…` (optional for future client-side Stripe.js; Beaker Stack billing checkout is mostly server-driven via Edge). - **Secret key** — `sk_test_…` → this value is `STRIPE_SECRET_KEY` for Edge Functions and for the sync script. Keep secret keys out of git; use Supabase Dashboard secrets and local `.env` files that are gitignored. @@ -202,7 +202,7 @@ See [supabase/functions/README.md](../supabase/functions/README.md) for JWT beha Checkout fails if `billing_plans.stripe_price_id` is null for a paid plan. The repo includes: -- **Sync config:** [apps/web/src/billing/billing-sync.json](../apps/web/src/billing/billing-sync.json) — lists paid `planId`s and monthly/annual amounts for the template product. +- **Sync config:** [packages/billing/src/presentation/billing-sync.json](../packages/billing/src/presentation/billing-sync.json) — lists paid `planId`s and monthly/annual amounts for the template product. - **Script:** `npm run billing:sync-stripe` → runs [scripts/sync-billing-stripe.mjs](../scripts/sync-billing-stripe.mjs). **CI:** [`.github/workflows/pr-preview-environment.yml`](../.github/workflows/pr-preview-environment.yml), [`deploy-staging.yml`](../.github/workflows/deploy-staging.yml), and [`deploy-production.yml`](../.github/workflows/deploy-production.yml) run **`npm run billing:sync-stripe`** after the database is migrated (preview: after the preview DB prepare step; staging/production: after `supabase db push`) and **before** deploying Edge Functions, so `billing_plans` always has Stripe price IDs for checkout without a manual sync. @@ -215,7 +215,7 @@ export SUPABASE_URL=https://.supabase.co # or http://127.0.0.1:54 export SUPABASE_SERVICE_ROLE_KEY= npm run billing:sync-stripe -# equivalent: node scripts/sync-billing-stripe.mjs --config apps/web/src/billing/billing-sync.json +# equivalent: node scripts/sync-billing-stripe.mjs --config packages/billing/src/presentation/billing-sync.json ``` The script creates or reuses a Stripe Product (tagged with `billing_product_id` metadata), creates Prices as needed, and **updates** `billing_plans` rows for the listed `planId`s. diff --git a/docs/supabase-preview-setup.md b/docs/supabase-preview-setup.md index 8ed3eeb3..1dc70e12 100644 --- a/docs/supabase-preview-setup.md +++ b/docs/supabase-preview-setup.md @@ -279,5 +279,5 @@ If you change your preview domain: - [Supabase Auth Configuration](https://supabase.com/docs/guides/auth) - [Google OAuth Setup](https://supabase.com/docs/guides/auth/social-login/auth-google) -- [Supabase URL Configuration](https://supabase.com/docs/guides/auth/url-configuration) +- [Supabase redirect URLs](https://supabase.com/docs/guides/auth/redirect-urls) - [Email Auth Settings](https://supabase.com/docs/guides/auth/auth-email) diff --git a/docs/testing/TESTING_OAUTH.md b/docs/testing/TESTING_OAUTH.md index 84517838..c0c55199 100644 --- a/docs/testing/TESTING_OAUTH.md +++ b/docs/testing/TESTING_OAUTH.md @@ -95,7 +95,7 @@ This is **expected behavior** until OAuth credentials are configured. ### With OAuth Credentials (After Setup) -Follow the setup instructions in [OAuth setup for production](../oauth/OAUTH_SETUP.md) first, then: +Follow the setup instructions in [OAuth setup for production](../OAUTH.md) first, then: #### Test Google OAuth @@ -323,7 +323,7 @@ cd apps/web && npm test -- --coverage **Possible Causes**: 1. OAuth not configured in Supabase - - **Fix**: Follow [../oauth/OAUTH_SETUP.md](../oauth/OAUTH_SETUP.md) + - **Fix**: Follow [../OAUTH.md](../OAUTH.md) 2. Redirect URL mismatch - **Fix**: Ensure redirect URLs match in Google/Apple console and Supabase 3. Popup blocked @@ -372,7 +372,7 @@ After testing OAuth: 1. ✅ Verify all unit tests pass 2. ✅ Test email/password authentication -3. ⏸️ Configure OAuth credentials (see [../oauth/OAUTH_SETUP.md](../oauth/OAUTH_SETUP.md)) +3. ⏸️ Configure OAuth credentials (see [../OAUTH.md](../OAUTH.md)) 4. ⏸️ Test OAuth authentication with real credentials 5. ⏸️ Implement mobile OAuth (Task 3.4) 6. ⏸️ Add protected routes @@ -388,7 +388,7 @@ If you encounter issues: 1. Check browser console for errors 2. Check Supabase logs in Studio 3. Verify environment variables are set -4. Review [../oauth/OAUTH_SETUP.md](../oauth/OAUTH_SETUP.md) for configuration +4. Review [../OAUTH.md](../OAUTH.md) for configuration 5. Check `packages/shared/src/hooks/useAuth.ts` for auth logic **Common Gotchas**: diff --git a/package.json b/package.json index b05f16f1..7960ef1b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "beakerstack", - "version": "1.0.0", - "description": "Opinionated monorepo template for Supabase-backed apps shipping to web (React + Vite) and mobile (React Native + Expo), with PR previews, staged deploys, and shared business logic across surfaces.", + "version": "2026.1.0", + "description": "Ship your SaaS faster — opinionated Supabase template for web (React + Vite) and mobile (Expo), with billing, PR previews, and staged CI/CD.", "private": true, "workspaces": [ "packages/*", @@ -134,7 +134,7 @@ "rename": "node ./scripts/rename-project.mjs", "setup:project-label-bridge": "node scripts/github/setup-project-label-bridge.mjs", "docs:actions-secrets": "node ./scripts/generate-actions-secrets-doc.mjs", - "docs:linkcheck": "npx --yes markdown-link-check@3.12.2 README.md QUICKSTART.md -c .markdown-link-check.json", + "docs:linkcheck": "bash -c 'set -euo pipefail; shopt -s nullglob; files=(README.md QUICKSTART.md CONTRIBUTING.md SECURITY.md docs/*.md docs/guides/*.md docs/internal/*.md docs/oauth/*.md docs/reference/*.md docs/specs/*.md docs/testing/*.md); npx --yes markdown-link-check@3.12.2 \"${files[@]}\" -c .markdown-link-check.json'", "billing:sync-stripe": "node scripts/sync-billing-stripe.mjs --config packages/billing/src/presentation/billing-sync.json", "stripe:ensure-webhook": "node scripts/ensure-stripe-webhook-endpoint.mjs", "billing:apply-plans": "tsx scripts/apply-billing-plans-from-config.ts" diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md index 167ac904..3cac1255 100644 --- a/packages/test-utils/README.md +++ b/packages/test-utils/README.md @@ -1,6 +1,6 @@ # @beakerstack/test-utils -Testing utilities for [BeakerStack](https://github.com/Artificer-Innovations/BeakerStack)-based projects. +Testing utilities for [Beaker Stack](https://github.com/Artificer-Innovations/BeakerStack)-based projects. ## Installation From 29ea6248dd76dbb3a368a25d61c2533acf4bf0a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sarah=20Mitchell=20=F0=9F=A4=96?= Date: Sun, 17 May 2026 08:28:27 -0700 Subject: [PATCH 02/10] fix(mobile): replace back link with AppHeader in BillingLayout (#236) --- .../screens/billing/BillingScreens.test.tsx | 8 ++++++ .../src/screens/billing/BillingLayout.tsx | 25 ++++--------------- apps/mobile/src/screens/billing/styles.ts | 7 ------ 3 files changed, 13 insertions(+), 27 deletions(-) diff --git a/apps/mobile/__tests__/screens/billing/BillingScreens.test.tsx b/apps/mobile/__tests__/screens/billing/BillingScreens.test.tsx index a598b9dd..1ec0123b 100644 --- a/apps/mobile/__tests__/screens/billing/BillingScreens.test.tsx +++ b/apps/mobile/__tests__/screens/billing/BillingScreens.test.tsx @@ -118,6 +118,14 @@ jest.mock('@beakerstack/billing/native', () => { }; }); +jest.mock('@beakerstack/shared/components/navigation/AppHeader.native', () => ({ + AppHeader: () => null, +})); + +jest.mock('../../../src/lib/supabase', () => ({ + supabase: {}, +})); + function renderWithNav(ui: React.ReactElement) { return render({ui}); } diff --git a/apps/mobile/src/screens/billing/BillingLayout.tsx b/apps/mobile/src/screens/billing/BillingLayout.tsx index 5d3ac89b..6adef1c9 100644 --- a/apps/mobile/src/screens/billing/BillingLayout.tsx +++ b/apps/mobile/src/screens/billing/BillingLayout.tsx @@ -1,7 +1,7 @@ import React, { type ReactNode } from 'react'; -import { Pressable, ScrollView, Text } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { useNavigation } from '@react-navigation/native'; +import { SafeAreaView, ScrollView } from 'react-native'; +import { AppHeader } from '@beakerstack/shared/components/navigation/AppHeader.native'; +import { supabase } from '../../lib/supabase'; import { BillingTabBar } from './BillingTabBar'; import { billingStyles } from './styles'; @@ -10,25 +10,10 @@ export function BillingLayout({ }: { children: ReactNode; }): React.ReactElement { - const navigation = useNavigation(); return ( - + + - { - const parent = navigation.getParent(); - if (parent?.canGoBack()) { - parent.goBack(); - } else { - navigation.goBack(); - } - }} - > - ← Back - - Billing {children} diff --git a/apps/mobile/src/screens/billing/styles.ts b/apps/mobile/src/screens/billing/styles.ts index 43b42b1b..954038c5 100644 --- a/apps/mobile/src/screens/billing/styles.ts +++ b/apps/mobile/src/screens/billing/styles.ts @@ -22,13 +22,6 @@ export const billingColors = { export const billingStyles = StyleSheet.create({ safe: { flex: 1, backgroundColor: billingColors.pageBg }, scrollContent: { padding: 16, paddingBottom: 40 }, - h1: { - fontSize: 22, - fontWeight: '700', - color: billingColors.textPrimary, - marginBottom: 4, - }, - backLink: { color: billingColors.indigo, fontSize: 15, marginBottom: 8 }, card: { backgroundColor: billingColors.cardBg, borderRadius: 12, From 764a823ac82675fd5c5d85ded5e21d9c2ff2a00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rahul=20Iyer=20=F0=9F=A4=96?= Date: Sun, 17 May 2026 08:34:09 -0700 Subject: [PATCH 03/10] fix: clean up GitHub deployments and environment on PR teardown (#238) * fix: clean up GitHub deployments and environment on PR teardown Closes #235 * docs: note GitHub deployment cleanup in teardown section --- .github/workflows/pr-preview-environment.yml | 86 ++++++++++++++++++++ docs/pr-preview-setup.md | 5 ++ 2 files changed, 91 insertions(+) diff --git a/.github/workflows/pr-preview-environment.yml b/.github/workflows/pr-preview-environment.yml index 8e10fa34..85e5e376 100644 --- a/.github/workflows/pr-preview-environment.yml +++ b/.github/workflows/pr-preview-environment.yml @@ -742,3 +742,89 @@ jobs: --region "${AWS_REGION_VALUE}" \ --supabase-db-url "${SUPABASE_PREVIEW_DB_URL}" + - name: Clean up GitHub Deployment and environment + uses: actions/github-script@v7 + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + with: + script: | + // Fork PRs cannot write to Deployments API — skip cleanly. + const headRepo = context.payload.pull_request.head.repo?.full_name; + const baseRepo = `${context.repo.owner}/${context.repo.repo}`; + if (!headRepo || headRepo !== baseRepo) { + core.info(`Skipping: fork PR (${headRepo ?? 'deleted repo'}) — Deployments API write not available.`); + return; + } + + const environment = `pr-${process.env.PR_NUMBER}-preview`; + + // List all deployments for this environment (up to 100). + let deployments = []; + try { + const { data } = await github.rest.repos.listDeployments({ + owner: context.repo.owner, + repo: context.repo.repo, + environment, + per_page: 100, + }); + deployments = data; + } catch (err) { + if (err.status === 404) { + core.info(`No deployments found for ${environment} — nothing to clean up.`); + return; + } + throw err; + } + + if (deployments.length === 0) { + core.info(`No deployments for ${environment} — nothing to clean up.`); + } + + for (const dep of deployments) { + // GitHub requires inactive status before a deployment can be deleted. + try { + await github.rest.repos.createDeploymentStatus({ + owner: context.repo.owner, + repo: context.repo.repo, + deployment_id: dep.id, + state: 'inactive', + }); + } catch (err) { + if (err.status === 404) { + core.info(`Deployment ${dep.id} already gone — skipping inactive status.`); + } else { + core.warning(`Could not mark deployment ${dep.id} inactive: ${err.message}`); + } + } + try { + await github.rest.repos.deleteDeployment({ + owner: context.repo.owner, + repo: context.repo.repo, + deployment_id: dep.id, + }); + core.info(`Deleted deployment ${dep.id}.`); + } catch (err) { + if (err.status === 404) { + core.info(`Deployment ${dep.id} already deleted.`); + } else { + core.warning(`Could not delete deployment ${dep.id}: ${err.message}`); + } + } + } + + // Delete the GitHub environment so it no longer appears in the Environments list. + try { + await github.rest.repos.deleteAnEnvironment({ + owner: context.repo.owner, + repo: context.repo.repo, + environment_name: environment, + }); + core.info(`Deleted environment ${environment}.`); + } catch (err) { + if (err.status === 404) { + core.info(`Environment ${environment} already gone — nothing to delete.`); + } else { + core.warning(`Could not delete environment ${environment}: ${err.message}`); + } + } + diff --git a/docs/pr-preview-setup.md b/docs/pr-preview-setup.md index b18a8685..691996f1 100644 --- a/docs/pr-preview-setup.md +++ b/docs/pr-preview-setup.md @@ -158,6 +158,11 @@ Triggered when a PR is `closed` (merged or abandoned). - Deletes S3 prefix `pr-/` from deploy bucket. - Creates CloudFront invalidation for `/pr-/*` on deploy distribution. - Drops Supabase schema `preview_pr_` (if DB URL provided). +3. Cleans up GitHub metadata via the Deployments API: + - Marks all deployments for `pr--preview` as `inactive`. + - Deletes each deployment record. + - Deletes the `pr--preview` environment so it no longer appears in the repository Environments / Deployments views. + - Skipped for fork PRs; 404s are treated as non-fatal so teardown never fails over stale or already-removed GitHub metadata. ## Helper Scripts From 7ce0842311690be9585fb4eee935d61f9f89eaa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Morales=20=F0=9F=A4=96?= Date: Sun, 17 May 2026 08:58:11 -0700 Subject: [PATCH 04/10] fix(billing): Free tier shows US$0 instead of $0 (#240) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(billing): replace hardcoded US$0 with Intl.NumberFormat in listPriceForPlan Fixes #233 * fix(billing): remove US$0 ternary in BillingPlansPage — formatter handles zero Fixes #233 * fix(landing): replace US$0 hardcode in PricingSection with fmt(plan.price_cents) Fixes #233 * test(billing): update listPriceForPlan free tier assertion to $0 Fixes #233 * test(billing): add Free plan $0 price headline assertion to BillingPlansPage Fixes #233 * test(landing): expose priceHeadline in PlanCard mock and assert $0 for Free plan Fixes #233 --- apps/web/src/components/billing/PlanCard.web.tsx | 7 ++++++- .../billing/__tests__/PlanCard.web.test.tsx | 2 +- .../components/landing/sections/PricingSection.tsx | 8 +++----- .../sections/__tests__/PricingSection.test.tsx | 11 +++++++++++ apps/web/src/pages/billing/BillingPlansPage.tsx | 13 +++++-------- .../billing/__tests__/BillingPlansPage.test.tsx | 10 ++++++++++ 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/apps/web/src/components/billing/PlanCard.web.tsx b/apps/web/src/components/billing/PlanCard.web.tsx index d420f60b..e9bbdd83 100644 --- a/apps/web/src/components/billing/PlanCard.web.tsx +++ b/apps/web/src/components/billing/PlanCard.web.tsx @@ -126,7 +126,12 @@ export function PlanCard({ /** Display price: monthly uses DB cents; annual uses yearly amount from billing-sync (Stripe). */ export function listPriceForPlan(plan: Plan, cadence: 'monthly' | 'annual') { - if (plan.price_cents === 0) return 'US$0'; + if (plan.price_cents === 0) + return new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + maximumFractionDigits: 0, + }).format(0); if (cadence === 'monthly') { return ( new Intl.NumberFormat('en-US', { diff --git a/apps/web/src/components/billing/__tests__/PlanCard.web.test.tsx b/apps/web/src/components/billing/__tests__/PlanCard.web.test.tsx index 1ea3a821..d73296bb 100644 --- a/apps/web/src/components/billing/__tests__/PlanCard.web.test.tsx +++ b/apps/web/src/components/billing/__tests__/PlanCard.web.test.tsx @@ -37,7 +37,7 @@ const proPlan: Plan = { describe('listPriceForPlan', () => { it('formats free and paid cadence copy', () => { const free: Plan = { ...proPlan, id: 'beakerstack_free', price_cents: 0 }; - expect(listPriceForPlan(free, 'monthly')).toBe('US$0'); + expect(listPriceForPlan(free, 'monthly')).toBe('$0'); expect(listPriceForPlan(proPlan, 'monthly')).toMatch(/19/); expect(listPriceForPlan(proPlan, 'annual')).toMatch(/year/); }); diff --git a/apps/web/src/components/landing/sections/PricingSection.tsx b/apps/web/src/components/landing/sections/PricingSection.tsx index 48f666bb..152a0be1 100644 --- a/apps/web/src/components/landing/sections/PricingSection.tsx +++ b/apps/web/src/components/landing/sections/PricingSection.tsx @@ -46,11 +46,9 @@ function StaticPricingTable() { }).format(cents / 100); const priceHeadline = - plan.price_cents === 0 - ? 'US$0' - : isAnnual && annualCents != null - ? fmt(annualCents) - : fmt(plan.price_cents); + isAnnual && annualCents != null + ? fmt(annualCents) + : fmt(plan.price_cents); const priceSubline = plan.price_cents === 0 diff --git a/apps/web/src/components/landing/sections/__tests__/PricingSection.test.tsx b/apps/web/src/components/landing/sections/__tests__/PricingSection.test.tsx index 716abb89..4931146d 100644 --- a/apps/web/src/components/landing/sections/__tests__/PricingSection.test.tsx +++ b/apps/web/src/components/landing/sections/__tests__/PricingSection.test.tsx @@ -36,14 +36,17 @@ vi.mock('../../../../billing/staticPlanAdapter', () => ({ vi.mock('../../../billing/PlanCard.web', () => ({ PlanCard: ({ plan, + priceHeadline, primary, }: { plan: { id: string; display_name: string }; + priceHeadline: string; primary: { label: string; onClick: () => void }; }) => (