This commit is contained in:
Tomas Dvorak committed 2026-05-05 09:48:07 +02:00
1 parent d854614a87
commit 48c3e15a38
295 files changed
+178378 -1036

No files matched your search

+16 -12
View File
@@ -21,12 +21,13 @@
- frontend dashboard now hydrates from API when a Neon Auth JWT is available
- frontend dashboard degrades to contract-shaped preview mode when auth is unavailable
- Neon Auth token acquisition remains adapter-isolated and still needs production validation against live Neon Auth
- `[done/partial]` Milestone 4: Stripe subscription sync and entitlement baseline completed
- `[done/partial]` Milestone 4: Paddle subscription sync and entitlement baseline completed
- normalized billing snapshot model added to backend and OpenAPI contract
- backend-owned subscription state now syncs through one overwrite path
- Stripe checkout session endpoint added
- Stripe webhook endpoint added with signature verification and event filtering
- Paddle checkout launch endpoint added
- Paddle webhook endpoint added with signature verification and event filtering
- billing snapshot refresh endpoint added
- customer portal endpoint added
- plan entitlements now derive from normalized plan state
- dashboard now surfaces billing status, entitlements, and checkout actions
- mock/no-key fallback still works for local development
@@ -133,15 +134,16 @@ v1 reminder strategy:
- Czech-first provider support is preferred, with room for generic fallback providers later
## Billing
Bookra uses Stripe for B2B SaaS subscription billing.
Bookra uses Paddle for B2B SaaS subscription billing.
Stripe scope in v1:
Paddle scope in v1:
- tenant subscription plans
- plan upgrades/downgrades
- add-ons such as SMS or expanded limits
- webhook-based subscription state sync
- customer self-serve billing portal
Stripe is not used for end-customer booking checkout in v1.
Paddle is not used for end-customer booking checkout in v1.
## Remote-First Architecture
Bookra follows the `tdvorak-fullstack` profile with remote deployment overrides.
@@ -243,15 +245,16 @@ Key entities:
- delivery logging now exists for reminder execution
### Phase 4
- Stripe subscriptions
- Paddle subscriptions
- SMS add-on support
- plan enforcement
- hardening, logging, and operational tooling
- status: in progress
- current implementation:
- billing snapshot persistence added
- Stripe checkout route added
- Stripe webhook route added
- Paddle checkout route added
- Paddle webhook route added
- Paddle portal route added
- subscription refresh route added
- entitlement mapping is now available to the frontend
- API edge now includes security headers and public route rate limiting
@@ -271,6 +274,7 @@ Key entities:
- `/book/:tenantSlug` stays public and customer-facing
- Neon Auth remains intentionally isolated behind adapters because the managed product is still beta.
- Billing now follows a backend-owned snapshot model rather than trusting incremental webhook payloads.
- `apps/auth-service` is now retired from active runtime and docs.
- Reminder delivery now has a working runtime path instead of just a queued schema.
- sqlc generation and goose migration execution are now runnable through workspace scripts.
- Protected backend requests now perform automatic app-side identity sync before tenant membership resolution.
@@ -280,14 +284,14 @@ Key entities:
- Neon Auth token extraction is wired structurally, but still needs live browser validation against a real Neon Auth environment.
- Tenant membership bootstrap now syncs identities structurally, but staging still needs seeded membership records and onboarding flows for first-time tenants.
- First-time onboarding exists, but there are still no CRUD screens for locations, staff, services, or schedules after workspace creation.
- Stripe lifecycle sync is implemented structurally, but still needs live environment validation against real products, price IDs, and webhook signatures.
- Paddle lifecycle sync is implemented structurally, but still needs live environment validation against real products, price IDs, client token, and webhook signatures.
- Real email/SMS provider integrations are not implemented yet; current delivery providers are safe noops.
- The internal reminder dispatch route exists, but Railway scheduling and secret rotation still need production setup.
## Next Build Targets
- replace preview-mode dashboard hydration with fully validated Neon Auth JWT flow
- sync Neon Auth identities into tenant membership records and onboarding bootstrap
- validate Stripe checkout/webhooks and reminder dispatch against live staging infrastructure
- validate Paddle checkout/webhooks/portal and reminder dispatch against live staging infrastructure
- replace noop notification providers with the first production email transport and a gated SMS transport
- add real app management screens for services, staff, locations, and availability after onboarding
@@ -308,7 +312,7 @@ Bookra is successful when a small business can:
- send reminders reliably
- manage cancellations and waitlists
- view simple business health metrics
- subscribe to a paid plan through Stripe
- subscribe to a paid plan through Paddle
## Final Positioning
Bookra is not an ERP, not a medical system, and not a marketplace.