ProductionB2B SaaSAI integrationsMulti-tenant11 min read

Multi-Tenant Platform for AI Video Production Agency

A SaaS platform for managing artist hiring, studio operations, and client projects at an AI-video agency.

Quick read

An AI video production agency was managing hiring, project intake, and operations across Slack threads, Google Forms, and spreadsheets. I designed and built a multi-tenant SaaS platform that consolidated the workflow: AI-driven test-assignment matching, AI order intake chatbot, multi-tenant studios with capability-based permissions, real-time chat, project kanban, client portal, audit trail. In 7 weeks of development: 181 commits, 6 studios, 37 users across 5 roles, 22 projects, 60 tasks. First full revenue month produced $1,752 in client revenue with 59% gross margin. Built as the sole engineer through AI-assisted development.

Context

An AI video production agency (client identity withheld; built under contract via DevBrother) operated through a patchwork of tools: artist applications came in through Slack and forms, project intake from clients arrived as free-text emails or DMs, hiring decisions were tracked in spreadsheets, project work happened in unsynced messaging threads, no single source of truth for who was working on what.

The agency's bottleneck was operational throughput, not creative work. With multiple studio directors hiring in parallel and clients requesting custom video work daily, the team needed:

  • One pipeline for artist hiring (apply → test → review → accept) with no overlap between studio directors competing for the same candidate
  • Structured order intake that converted client free-text into actionable project briefs
  • A project / task system where artist, reviewer, studio director, and client could all see status
  • Per-user notification preferences and an audit trail of who did what

I joined as the sole engineer to build this from scratch.

Solution

A multi-tenant SaaS platform with the following surfaces:

Hiring / Talent acquisition

  • Public artist application funnel with two paths: video test or portfolio submission
  • AI test-assignment matcher (Google Gemini ranks open briefs against candidate skills)
  • Pipeline review UI for studio directors and evaluators (1-5 rubric scoring)
  • Accept flow: into a specific studio, or into a shared distribution pool
  • Public artist profiles (no-auth URL, shareable in Slack)

Studios and projects

  • Multi-tenant studio model with per-studio data scoping
  • Projects with many-to-many client relationships
  • Task kanban (To Do → Rough Cut → Fine Cut → Final Cut → Approved) with drag-and-drop
  • Task health indicators (deadline tracking, block/unblock states)
  • Per-task artist assignment, fee tracking, paid flag, artist payouts

Communication

  • Per-project chat sidebar (staff ↔ client)
  • Studio-wide chat channels, DMs, threads, @-mentions
  • Edit/delete with 10-minute window
  • Real-time via Supabase broadcast, fallback polling
  • Task comments with rich editor and mention picker

Order intake

  • Public AI-chatbot funnel (Gemini) that parses free-text client requests into structured orders
  • Studio director accepts an order → platform auto-creates project, task, and client account

Notifications

  • In-app Activity Center (32 audit event types)
  • Email notifications via Brevo (25 transactional templates)
  • Push notifications via Expo (mobile app integration)
  • Per-user preferences, mute, HMAC unsubscribe tokens
  • Cron-based deadline reminders

Customer success & admin

  • Customer Health tab with weekly check-ins, health score 1-5, traffic-light status by days-since-contact
  • Team management with multi-role assignment
  • Audit log feed
  • Feedback inbox with kanban
  • Test assignment library

The role and permission model is capability-based with per-studio scoping. A user can hold multiple roles simultaneously — e.g., studio director of Studio A and artist in Studio B — with an "Acting As" switcher in the header. Studio directors see candidates and projects scoped to their studio; platform owner bypasses all scope checks.

Studio dashboard with project kanban board
Studio dashboard with project kanban.

Impact

Users

37

across 5 roles

Studios

6

active

Projects

22

in pipeline

Tasks

60

34 approved (57%)

Artist applications

46

25 accepted (54%)

Median time-to-decision

~41h

hiring pipeline

Peak activity

190

events / week

Commits

181

in 7 weeks

Revenue (April 2026, first full month of revenue):

Client revenue

$1,752

Artist payouts

$714

Gross margin

$1,038

59%

Paid tasks

23

Positive unit economics confirmed in the first month of revenue. The platform went from MVP to operational revenue in 7 weeks of solo build.

Engineering throughput: 181 commits across the 7-week build period. Auto-deploy to production on every push to main. Test infrastructure included Vitest for unit tests, Playwright for E2E, with a parallel test schema in Supabase for isolated runs.

A 7-week build is a different category of project from a 7-month build.

Tech stack & architecture

Frontend

Next.js 14.2 (App Router) · React 18 · Inline styles (no Tailwind / CSS-in-JS)

Backend

Next.js API routes on Vercel serverless

Database

Supabase (PostgreSQL + pgcrypto)

Auth

Cookie-based session (no JWT) · Parsed server-side

Realtime

Supabase broadcast channels for chat

Email

Brevo (transactional, 25 templates)

AI

Google Gemini 2.5 Flash Lite · Test matcher + order chatbot

Anti-bot

Google reCAPTCHA v3 on public forms

Push

Expo Push API for mobile

Hosting

Vercel (auto-deploy on push to main)

Tests

Vitest (unit + API) · Playwright (E2E) on isolated test schema

The role/permission system warrants its own note. Roles live in users.role: platform_owner, studio_director, studio_manager, artist, client. An artist can additionally be is_evaluator=true. A user can hold multiple capabilities simultaneously — for example a studio director in Studio A who is also an artist in Studio B — and switch context via an "Acting As" toggle. Permissions are derived: a studio director sees pipeline candidates only for studios where they're director; a studio manager sees projects only for studios they're in.

What I learned

  • The "Acting As" pattern was the elegant solution to a problem that almost broke the role model. The agency's reality was that one person could be both an artist and a studio manager. With strict role-based access control (artists see X, managers see X + Y, directors see X + Y + Z across studios), this collapses immediately. Two accounts per person was a non-starter — duplicate identities, broken audit trails, user confusion. The fix was a capability-based permission model with an "Acting As" header switcher that lets a single account hold multiple capabilities and toggle context. Once that was in place, the strict tiered access (artist sees their work; manager sees their studio's artists + projects; director sees multiple studios + their own module) fell out cleanly. UX-wise it's a small switcher; architecturally it's the keystone of the whole system.
  • AI integrations cost ~5% of build time and unlock ~30% of value. Gemini ranks test assignments and parses order intake. Both could have been form-based UIs requiring manual work. Both ended up as automated workflows that reduced studio director overhead by an order of magnitude. The integration code is small; the leverage is large.
  • A 7-week build is a different category of project from a 7-month build. Decisions that would normally need careful weighing — choosing inline styles over Tailwind, JSON cookie sessions over JWT, Supabase broadcasts over a dedicated message queue — were made in minutes by picking the option that was simplest to ship. Some of those decisions will need revisiting at scale. Most of them won't.
  • Strategic alignment with the client's product roadmap was the lesson I learned the hard way. This is honest: the agency has been developing its own internal platform in parallel, with overlapping ambitions in project management and operations. Their stack is different from mine — different framework, different database, different conventions. By the time this surfaced, my platform was already a 7-week investment with 181 commits, and the code couldn't be ported into theirs. The mistake was a planning one I'd recognize as a rookie product move: I didn't ask, on day one, what is the long-term plan for the system this will eventually integrate with? I optimized for shipping fast and proving the model, which I did — but the integration story is now strained. The takeaway I'm carrying forward: with internal-client builds, the first design conversation is about exit and integration paths, not feature scope.

Next steps

The platform is in production and continues to handle real operations at the agency. Active backlog items: Stripe billing (currently on a feature branch, not yet on main), time-tracking (designed but not built), a reports / analytics dashboard (Activity Log and earnings tab exist; a dedicated reporting UI does not), per-studio Slack integrations (currently only one global webhook). A near-term architectural constraint to resolve is Vercel Hobby's 12-function limit — already at the ceiling, so the next iteration needs endpoint consolidation. Strategic question outstanding: given the integration limitations described above, whether the platform's long-term home is this client or whether the codebase becomes a reusable artifact for other agencies with similar operational patterns.

Read next