Refract is a production-grade TypeScript SaaS boilerplate for teams that expect to pivot: pricing, plans, and integrations should be configuration—not a rewrite.
WHAT YOU GET
- Billing — Stripe: dynamic plans/tiers, metered usage, proration, multi-currency, grace periods, checkout/upgrade/downgrade/cancel, billing controls, custom checkout UX. Idempotent webhooks and retries for production failure modes.
- Auth & B2B — Multi-tenancy, scoped RBAC, password + OAuth, sessions, users, invites/revokes.
- Infrastructure — Swap queue (SQS, BullMQ), mail (Brevo, SendGrid), cache, analytics adapters. Background jobs and email included.
- Apps — GraphQL + codegen, Apollo server/client, React + MUI, TypeScript end-to-end.
- Marketing + authenticated app in one monorepo.
- Stack — PostgreSQL (Sequelize), Redis, Express, Apollo Server.
- Observability — Structured logging, metrics (StatsD-oriented), analytics hooks.
- Tests — 80%+ on billing and auth.
- DX — Docker Compose, Makefile, CI (lint/build/test/codegen). Dev proxy: one origin for marketing, portal, API (OAuth/CORS like prod). Stripe CLI in Compose. Railway documented.
- Docs & AI — In-repo onboarding and config. Cursor rules for consistent changes across backend, portal, tooling.
- Principles — Composable core; vendor code behind swappable contracts so mail/queue/provider changes are adapter work.
- Security — Validate at boundaries; ORM for DB; RBAC as product. Prefer bounded telemetry tags.
Who — Indie founders / small B2B teams; past-MVP teams; builders avoiding full rewrites when vendors change.
Why — Explicit boundaries + functional patterns. Full stack in Docker for repeatable onboarding.
Not a demo — Built for support load, billing edge cases, roles, integrations you have not chosen.
The pivot is a config change, not a rewrite.
Tech — React 19, Vite, MUI, Redux Toolkit, Apollo Client, React Router, RHF. Node, Express, Apollo Server, Sequelize, Postgres, Redis, Passport/JWT. Stripe; SQS/BullMQ; Brevo/SendGrid.