seigfred
back to work
ai creative platform live

Dojo Content Machine

A self-serve creative studio for martial-arts schools. A school uploads its logo, uniform and dojo photos once, picks the content it needs through a guided brief, and the platform generates on-brand images and ads in the background — then stores them in a private, per-school gallery. Shipped to customers as Studio Vault.

React / ViteNode / ExpressSupabaseOpenAIBlack Forest LabsStripe
brief/adults-program.job credits 396/ 400

guided brief · instagram post · 4:5 · 2 variations

Create an Adults program ad with one adult student doing fighting guard that feels focused & confident.

A scripted preview — the brief is filled in, brand references are read, credits are reserved, and the variations land in the gallery. Loops for illustration.

The problem

Schools need a steady stream of marketing images — trial-class ads, class photos, promos — that actually look like their dojo and their uniforms. Stock photos look generic, shoots are expensive, and pointing staff at a raw AI image tool gets you off-brand results, no organisation, and no way to run it as a paid service.

What I built

A full product around the AI, not a webpage wired to an image API. The AI draws the picture; the platform makes it secure, organised, billable and dependable.

  • Brand references, saved once — logo, uniform, dojo and instructor photos live in private storage and are reused on every generation.
  • Guided creative briefs — customers choose the content type and describe the scene through structured options; the backend builds the final prompt, so the frontend never sends raw prompts to a provider.
  • Background generation — jobs move through queued → generating → needs review / failed, while the UI polls for progress instead of holding a request open.
  • Multiple AI providers — OpenAI image models and Black Forest Labs Flux sit behind one interface, so providers can be swapped or compared.
  • Credits & subscriptions — Stripe Checkout, the customer portal and webhooks drive plans and monthly allowances; credits are reserved up front and refunded for unfinished work.
  • Agency workspaces — agencies keep separate brand profiles and galleries for each client school.
  • Admin dashboard — customers, usage, credits, generated images, failed jobs and AI settings in one place.

Under the hood

A layered Express backend — Route → Controller → Service → DB query → Supabase — with Joi validation and auth checked on every request. A recovery sweep runs on boot and every 10 minutes, failing stale jobs and refunding their credits so an interrupted generation never silently eats a customer's allowance.

Billing is reconciled under a per-school database lease, so webhooks and admin imports can't race each other, and the billing logic is tested against the real migrations in an isolated PGlite database. React + Vite with TanStack Query and Zustand on the front, deployed on Render behind a health check.

Outcome

Schools get consistent, on-brand content without a shoot or a designer, and the business gets a product it can actually sell — accounts, payments, credits, client separation and failure recovery included.

2AI image providers
6safeguards per request
Livein production
// proof

A look inside

// next

Want an AI product that runs like a real business?