Capabilities
Everything below ships in the codebase today. It is what you extend — not a slide-deck roadmap.
Product surface (what your users see)
| Area | What works |
|---|---|
| Auth | Email sign-up / sign-in, session handling, email confirmation (configurable) |
| Workspaces | Single account; Team plan unlocks org members and invites (no workspace switcher) |
| Boards | Creative boards: prompt composer, batch variants (e.g. 4 images), studio gallery |
| Generation | Async jobs: submit → queue → provider → storage → finalize credits |
| Credits | Balance in the UI, insufficient-credit upsell, usage tied to successful jobs |
| Billing | Plans (free / pro / team), checkout flows, portal, plan-gated features |
| Settings | Account, org members, billing, integrations catalog |
| API console | Separate app (apps/api-console): API keys, usage, billing, playground |
| Help | In-app help panel and contact support form (app context, not the marketing form) |
Try the UX without a backend: demo.oequ.io (apps/demo with mock adapters).
Platform (what you do not have to write)
Credit ledger
- Reserve → finalize with idempotent request IDs
- Refund on failed or cancelled jobs (credits are not burned on provider errors)
- Monthly allowance reset per plan (free / pro / team)
- Auditable transaction log, not a single balance column
Details: Credits & billing.
Async generation pipeline
- Provider-agnostic job model ( fal.ai wired; mock for local dev)
- Signed webhooks, storage upload, batch rows, partial failure handling
- Model catalog in
libs/generation-core, synced to Edge Functions
Details: Generation domain.
Security
- Postgres RLS as the authority — not route guards alone
- Privileged writes through Edge Functions with service role
- Plan upgrades and billing events via verified webhooks
Details: Security model, Production hardening.
Billing adapters
| Mode | Use case |
|---|---|
mock | Local demo and E2E without Stripe |
stripe | Checkout + subscription webhooks |
custom | Regional PSP, invoice, YooKassa-style webhooks |
The Angular UI talks to a BillingPort — no Stripe SDK inside feature libraries.
Details: Custom billing provider.
Public API
- Versioned REST API via Edge Function
public-v1(keys, rate limits, idempotency) - Developer console on port 4202:
npm run start:api-console - Studio (
apps/web) and API console are separate deployables
Engineering detail: docs/PUBLIC_API_CONSOLE_START_HERE.md in the monorepo.
Engineering quality
| Practice | In the repo |
|---|---|
| Hexagonal ports | Swap mock vs Supabase in app.config.ts only |
| Nx monorepo | Shared libs: ports, features-*, shell, ui |
| i18n | Transloco; English in the app shell (locale infrastructure ready for more) |
| E2E | Playwright suites for demo and web |
| Docs | This site (Nextra), llms.txt for AI assistants |
Stack
| Layer | Technology |
|---|---|
| Frontend | Angular 21+, standalone components, signals |
| UI | Spartan-ng, Tailwind CSS 4 |
| Backend | Supabase — Postgres, Auth, Storage, Edge Functions |
| AI | fal.ai (production path), mock provider (dev) |
| Docs site | Nextra 4 + Next.js (this site) |
Full table: Stack.
What is intentionally out of scope
- We do not run your production Supabase or bill your end-users
- No single vertical “AI wrapper” GTM — you bring the model and positioning
- Marketing site and this docs app are separate deployables (Vite landing + Nextra docs)
Next
- Architecture — how the pieces connect
- Adoption path — week-by-week rollout
Last updated on