One Core. Many products.
FormaBase is a modular monolith, the Core, that owns identity, money and attribution. Every product is a thin satellite that calls the Core through one SDK and never holds a platform secret.
Products sit on top and reach the Core only through the SDK. The portal and this site are part of the Core codebase. Vendor keys sit underneath, visible to the Core alone.
product-one
Own database
product-two
Own database
product-three
Own database
portal + site
Part of the Core
The Core
One codebase · one database · nine modulesIdentity
One sign-in
Agreements
Versioned terms
Catalog
Products, prices
Billing
Subscriptions
Attribution
Links, codes
Ledger
Append-only
Payouts
Statements
Messaging
Email, SMS
Support
First line
These decisions are fixed early because each is expensive to reverse once products exist. Together they keep money and identity in one system of record, limit what any single product can reach, and let FormaBase keep running a product without depending on any one person.
- 01
One Core, many satellites
The Core is a single codebase and a single database. Products contain only their own features and their own data.
- 02
Separate code, separate access
The Core lives in the platform repository. Every product has its own repository, so a Creator can only ever see the product they build.
- 03
Versioned shared code
The brand kit and SDK are published as versioned packages. Products pin a version, so improvements apply going forward and never break a live product.
- 04
Two data tiers
The Core database is the only system of record for people, customers, subscriptions, attribution, agreements and money. Each product has an isolated database for its own features, and cannot connect to the Core database.
- 05
One doorway
Products reach the Core only through the Core API, with a key scoped to that one product.
- 06
One identity
One sign-in service for every participant and every customer. A customer has one FormaBase account across all products.
- 07
One payment account
Every product is a Stripe product tagged with its product ID, behind one webhook endpoint on the Core. Products never see a payment key.
- 08
Central attribution
Every Affiliate link goes through one redirect service that records the click. No product implements its own tracking.
- 09
Secrets stay in the Core
Payment, email, messaging and AI keys exist only in the Core. A product holds two secrets: its own Core key and its own database address.
- 10
One product ID everywhere
A single slug names a product's repository, deployment, database, payment metadata, monitoring tag, analytics property and subdomain.
The Core is one deployable application divided into modules. Each module owns its own tables and exposes functions; other modules call those functions and never query another module's tables directly. That keeps the Core simple to run today, with clean seams if a module ever needs to stand on its own.
| Module | Responsible for |
|---|---|
| Identity | Accounts, sign-in, two-factor, roles and Creator verification results |
| Agreements | Versioned agreements, acceptances and product addenda |
| Catalog | Products, statuses, prices and assets |
| Billing | Checkout, subscriptions, refunds and payment events |
| Attribution | Affiliate links, promo codes, clicks and customer attribution |
| Ledger | Append-only money entries in integer cents |
| Payouts | Payee onboarding, payout batches and statements |
| Messaging | Transactional email and messages |
| Support | Customer support and escalation to operations |
| Address | Serves | Status |
|---|---|---|
| formabase.app | This site | Live |
| portal.formabase.app | The portal for Creators, Affiliates and operations | In progress |
| api.formabase.app | The Core API, payment webhooks and background jobs | In progress |
| accounts.formabase.app | Sign-in for participants and customers | In progress |
| go.formabase.app | Affiliate link redirects and click capture | In progress |
| product.formabase.app | Each product, by default; custom domains can be added | Planned |
There are three environments: local development, a preview for every proposed change, and production. Every change is a pull request with its own preview deployment and automated checks; only reviewed changes reach production. Database changes are forward-only migrations, committed alongside the code that needs them.
| Layer | Choice | Status |
|---|---|---|
| Framework | Next.js (App Router), React, TypeScript in strict mode | Live |
| Interface | Tailwind CSS, Radix primitives, Motion, the FormaBase design system | Live |
| Hosting and delivery | Vercel, with a preview deployment for every change | Live |
| Source and checks | GitHub, with automated checks on every pull request | Live |
| Database | Neon Postgres with Drizzle ORM and committed migrations | In progress |
| Sign-in | Better Auth, with accounts in FormaBase's own database | In progress |
| Payments and payouts | Stripe, and Stripe Connect Express for payouts | In progress |
| Resend, from a dedicated sending domain | In progress | |
| Monitoring and analytics | Sentry and PostHog, tagged by product | Planned |