JEMA STUDIOS · DOCTRINE VS REALITY

The Gap Map

Every clause from the operating doctrine, next to what's actually built. Now live at ops.jemastudios.com — accessible from anywhere.

61%
Live
26%
Partial
13%
Not yet
How to read this. The doctrine has roughly 75 operational promises across the 9 departments. About 46 are live in the database + UI, 19 are partially built (data structures exist, automation/UI missing), 10 aren't started. The pattern isn't that the system is incomplete — it's that the surfaces are built and the connective tissue is missing. The top of this page lists the few high-leverage gaps that, if closed, make everything else feel finished.
live — runs in production, data + UI both wired
partial — schema/data exist, UI or automation missing
not yet — not modeled or built

! The five gaps worth closing — ranked by cognitive relief

Close these and the system stops needing you to push it. Everything else is polish.

1
Scheduled automation layer — the cron that fires digests, escalations, anniversaries
Doctrine says "Monthly Asset digest distributed to Executive Leadership", "Payment chase ladder T-30/14/7/3", "Anniversary outreach", "Backup alert at 48h". Today every one of these requires a click. A small set of cron-driven Edge Functions removes the need for you to remember to run anything. Single biggest cognitive relief lever.
EFFORT: ~2 days · 4–6 Edge Functions + pg_cron schedules
2
Notification system — email pipe for approvals, deadlines, alerts
"Backup failures triaged within 24 hours" only works if someone is told. Approvals pending. Payment due dates. Onboarding 30/60/90 reviews. Right now the data is there; the user has to go look for it. A notifications table + Resend (or similar) email sender turns the system from "check me" to "I'll tell you."
EFFORT: ~1–2 days · notifications table + email Edge Function + per-event triggers
3
Approval queues — Production budget · pre-approval categories · emergency spend
Doctrine specifies "Production drafts budget · Finance reviews · budget locks once approved" and four pre-approval categories (travel · gear · infra · brand). Today the expense workflow has draft→pending→approved, but production_budget doesn't have a dedicated approval queue surface. A "Pending My Approval" widget per Finance user (with approve/reject/comment) closes a major operational chokepoint.
EFFORT: ~1 day · approval_requests table + Finance widget
4
Profit & Reserves Framework — 10 / 12 / 5 / 30 tracking
Doctrine has an explicit financial discipline: Emergency 10% · Tax 12% · Operating Buffer 5% · Growth 30%. Not modeled yet. A reserves table + monthly funding ledger + dashboard that shows "% of target funded" gives Finance the discipline metric the doctrine promises.
EFFORT: ~1 day · reserves table + funding ledger + Finance widget
5
Studio Operations rental program — bookable spaces + invoiced rentals
The Studio Ops doctrine describes a revenue-generating rental program with enquiry → quote → contract → invoicing → hosting → turnover. Today the workspace exists but rental isn't modeled. Adds direct revenue the system isn't tracking yet — likely the highest-ROI gap on this list financially.
EFFORT: ~2 days · spaces + rental_bookings tables + booking calendar UI

01 Asset Management Johnson · monthly · 5 of 9 live

Single point of truth for what we have, where it is, and who holds it.
Doctrine clauseWhat's builtStatus
Pre-event canonical Dropbox folder setfile_management table tracks folder URLs; no auto-creation. Dropbox API integration pending.not yet
Shoot-day card handoff log (count · condition · receiver · timestamp)project_card_handoff table from migration 0032 captures all fields. UI live.live
Post-shoot lifecycle gates (Backup → File Selection → JPEG Delivery)production_stages tracks status; gate transitions are manual via Project Hub.partial
Physical asset custody log per itemassets table with custodian_email · 184 assets imported.live
Scheduled gear maintenanceasset_maintenance table exists; no scheduler/reminder.partial
Weekly backup verificationbackups_log table tracks per-event; no weekly aggregate report or auto-verification.partial
24-hour incident response (file loss / breach / backup fail)Incident logging not modeled; no alert pipe.not yet
Monthly digest auto-distributed to Executive Leadership"Generate Q2 Asset Digest" PDF button live in workspace; no auto-email.partial
Real-time alert if backups incomplete 48h after eventNo alert system yet.not yet

02 Production (with Field Creatives) Bernard · Uriel · monthly · 7 of 9 live

End-to-end execution of every shoot. Field Creatives sit inside Production as the talent pool.
Doctrine clauseWhat's builtStatus
Six-stage shoot lifecycleproduction_stages + project_production_status + project_production_stage_notes — full schema.live
36-item checklist gating progressionproduction_checklist_items table with 36 seeded items.live
T-7 to T-3 pre-event team meeting (~20 min)team_meeting_notes table; Production workspace has the slot.live
Crew assignment + cross-region travel trackingproduction_assignments with is_backup + Country Director cross-region travel pattern surfaceable.live
Production budget drafted → routed to Finance for approvalproject_production_budget table from migration 0032. Approval queue/UI not yet built.partial
End-of-day card return with timestamped recordproject_card_handoff captures all parties + timestamp.live
Field Creatives roster (Photo & Cinema)team table · dept = "Photography & Cinematography" · ACD = Domi Kodjo Prince.live
Per-event Post-Shoot Reviews feed Creative Project Reviewscreative_project_reviews table exists; auto-feed loop manual.partial
Monthly Production digest with SLA breach analysisWorkspace has "Generate Digest" button; no auto-distribution.partial

03 Post-Production Pius · monthly · centralized HQ · 6 of 7 live

Image and film finishing. Two tracks, one standard.
Doctrine clauseWhat's builtStatus
Two tracks (Photo + Video) with parallel editor poolsdeliverables type column + editor_assignments routes per-deliverable.live
Ingest from Asset Management after backup verifieddeliverables can link to backups_log; backup-verify gate manual.live
Editor pool with seniority (Junior · Mid · Senior · Lead)team.ladder_level field exists; seniority not yet driving auto-assignment.partial
Canonical SLAs (7/7/21/21/90 working days)delivery_slas table is the canonical source. UI uses it everywhere.live
QC Gate hard block — 5 mandatory checks before Deliveredqc_checks table with all 5 booleans + trigger preventing Delivered without pass.live
Revisions logged per project with reason + accountable editorrevisions table fully wired.live
Monthly digest with SLA scorecard + backlogGenerate-PDF button live; no auto-distribution or auto-aggregation.partial

04 Delivery & Customer Experience Maame · monthly · 5 of 8 live

Owns the client experience from booking through delivery and beyond.
Doctrine clauseWhat's builtStatus
T-30 client questionnaire auto-trigger (next-day for last-minute)client_questionnaires table (v2 schema). Auto-trigger not built — manual send today.partial
Hybrid client + CX fill with per-field provenanceSchema supports both editors. Provenance audit-trail partial.partial
9-step Creative Consultationconsultations table + UI fully matches the 9 steps. Live in Consultation surface.live
Consultation outputs (notes · planner · brief · PDF · Otter link)All fields in schema. PDF export live. Otter integration manual link.live
Payment follow-up partnership with Finance (chase ladder relationship side)CX dashboard has payment queue; Finance has the chase ladder. No joint surface that pairs them yet.partial
Post-event feedback collection + gifting logfeedback + gifting_log tables live.live
Anniversary outreach + legacy storytellingpast_clients table (1,782 imported). No scheduler firing anniversary emails.not yet
Monthly CX digest auto-emailed to Executive LeadershipGenerate-PDF live; auto-distribution not.partial

05 Education & Internship Edward · monthly · 2 of 7 live

Builds the next generation through curriculum, mentorship, on-the-job exposure.
Doctrine clauseWhat's builtStatus
Intern intake + cohort assemblyCurrent cohort tracked in team table. associate_intake table for applicants.live
Structured curriculum delivery (modules)No curriculum/modules table yet.not yet
Rotational placement inside Production for shoot shadowingproduction_assignments can flag interns; rotation calendar not modeled.partial
Periodic KPI review per intern with coaching feedbackkpi_logs table exists; intern-specific cadence not enforced.partial
Promotion pathway: intern → associate → full-timeemployment_type field supports all transitions; no workflow surface for the promotion event.partial
Continuing education tracks for tenured teamNot modeled.not yet
Cohort Completion Rate + Module Completion % KPIsNo view aggregating cohort completion.not yet

06 Finance & Administration Frank · monthly · 8 of 14 live

Final authority on budgets, purchase orders, payments, financial controls.
Doctrine clauseWhat's builtStatus
Annual top-down master budget, quarterly review, monthly cap monitoringNo master_budget or monthly_cap tables yet.not yet
Four pre-approval categories (travel · gear · infra · brand)No pre_approval_request workflow yet.not yet
Petty cash managed by Creative Director, auditedexpense_type can capture petty-cash; audit cycle not enforced.partial
Emergency spend with 2 valid triggers + 24h SSOT entryNo dedicated emergency_spend table.not yet
Invoicing — Zoho (Ghana) + Pixieset (international) + native141 Zoho + 156 Pixieset invoices imported. No live API sync yet.partial
Payment Chase Ladder T-30/14/7/3/past-dueInvoice statuses + due dates + escalation columns live; auto-escalation cron missing.partial
Grace extensions + addendum invoices (child clock, clean parent close)Migration 0023 fully implements grace + addendum logic.live
Expense workflow draft → pending → approved → paidMigrations 0033/0034. All 7 canonical expense_types enforced.live
Payroll 4 streams (FT · Associate · Special · Vendor)payroll table + finance_jobs view. Stream differentiation partial.partial
Production budget approval (Production drafts · Finance locks)project_production_budget table; no approval queue widget yet.partial
Multi-currency invoicing (contract currency = payment currency)currency column on invoices + payments. Live across regions.live
Profit & Reserves Framework (Emergency 10% · Tax 12% · Buffer 5% · Growth 30%)Not modeled.not yet
Quarterly P&L by region · cash position · reserve statusv_project_profitability + financeExpenseSummary views; quarterly aggregation missing.partial
Monthly Finance digestGenerate-PDF live; auto-distribution not.partial

07 Human Resources vacant · Tier A steward · quarterly · 4 of 10 live

People lifecycle + access tier authority.
Doctrine clauseWhat's builtStatus
4 employment classes (FT · Associate · Hybrid · Intern)employment_type field from migration 0031. Enforced.live
Onboarding workflow (intake → contract → tier → orientation → 30/60/90)team_onboarding table; 30/60/90 review cadence not yet automated.partial
Access tier authority (HR proposes · Tier A reviews + overrides)HR Team Access Management UI shipped today. Edge Function for create/reset PW deployed. RLS gates HR-dept Tier B + Tier A.live
Contract renewals trackingcontracts table exists; 35 rows have empty contract_end — known hygiene backlog.partial
Leave & time-off self-submit + HR approveleave_requests table not built yet.not yet
KPI review cycles per rolekpi_logs + kpi_escalations tables; cadence enforcement not automated.partial
Anniversaries + milestones + recognitionteam.hire_date supports it; no anniversary scheduler.not yet
Vacancy management partnership with CDsvacancies table exists.live
Performance management + exit processes (full audit trail)creative_project_reviews + team_offboarding tables; audit-trail partial.partial
Quarterly HR digest + tier-change audit logtier_change_audit_log table live. Digest auto-distribution not yet.live

08 Sales & Brand Ibrahim · monthly · 6 of 9 live

Top of the funnel + studio's market presence.
Doctrine clauseWhat's builtStatus
Lead capture from every source (web · referral · walk-in · social · partner)leads table + lead_source field + anon-INSERT policy for public form.live
Status progression Inquiry → Quoted → Negotiating → Booked (with Lost/On Hold)leads.status + lost_reason fully wired.live
Sales Playbook cadence (D0 · D2 · D5 · D10)sales_follow_ups table; no auto-reminders firing on the cadence.partial
Touchpoint logging (call · email · WhatsApp · status change)lead_activity_log table fully wired.live
Quote builder against region rate cards + add-onspricing table holds rate cards; no quote-generator UI yet.partial
Convert to project on Booked (copy known context)Manual trigger today; auto-conversion partial.live
Brand standards enforcement on every client-facing surfaceNo brand_standards or brand_flag table; concept-only today.not yet
Lost-reason tagging feeds funnel intelligencelost_reason column exists; intelligence dashboard partial.live
Monthly Sales digest + lead-source attributionWorkspace + funnel KPIs live; auto-distribution not.partial

09 Studio Operations manager being staffed · monthly · 1 of 8 live

Physical environment + gear hub + revenue-generating rental program.
Doctrine clauseWhat's builtStatus
140 sqm · 8-space facility inventory (studio · 2 edit suites · podcast · VIP · kitchen · store · garden)No spaces table modeling each room.not yet
Rental program (enquiry → quote → contract → invoicing → hosting → turnover)Not modeled. Highest-ROI gap in this section.not yet
Studio booking calendar (internal + external rentals on one schedule)Calendar surface exists for projects; not rental-aware.not yet
Gear hub check-in/check-out with condition loggingassets + asset_maintenance tables cover custody; no checkout UI.partial
Facility upkeep (cleaning · supplies · environmental · security)Not modeled.not yet
Visitor experience tracking (consultation hospitality · prospect tours · rental hosting)Not modeled.not yet
Repeat-rental rate KPI · utilization-by-space · rental revenueNo rental data to compute.not yet
Monthly Studio Ops digestWorkspace exists in dept_report; data pipe partial.partial

Infrastructure deployed today · 7 of 8 live

The system is no longer a thing on Kwaku's Mac. It's a thing in the world.
Doctrine implicit needWhat's builtStatus
Production URL the team can sign intohttps://ops.jemastudios.com · SSL · accessible globallylive
Custom domain (brand-aligned)ops.jemastudios.com via GoDaddy CNAME + Vercel auto-SSLlive
Hosting infrastructureVercel — Hobby tier · team jema-s-projects1 · project jema-ssotlive
Backend database + auth + storageSupabase project ayykfhfpurrxtootrbau · 79 tables · 270+ RLS · 61 auth userslive
Server-side admin operationsEdge Function admin-team-action v2 · create user + reset password · tier-gatedlive
Source code backup + version controlGitHub repo quekujema14-ctrl/jema-ssot exists; today's work not yet pushed (stale rebase blocking)push pending
Auto-deploy on git push (CI/CD)Vercel ↔ GitHub integration not yet wiredsetup pending
Cache-busting + visible build version per surfaceAll 13 bundles have no-cache meta + bottom-right build stamplive

Cross-cutting doctrine elements

Doctrine clauseWhat's builtStatus
Build for roles not people — every workspace optimized to roleRLS + access_tier + access_scope + HR Access UI deliver this.live
Workspace not report — execution-first surfacesAll 9 dept workspaces follow the pattern; reports are PDF artifacts generated from workspace.live
Canonical standards (7/7/21/21/90 SLAs · 11 dept · 7 expense types)All locked via CHECK constraints + reference tables.live
Matrix reporting (CD solid line · HQ Director dotted line)team.reports_to + dotted-line links; surfaces show both relationships.live
Tier C field-creative narrow scope (assigned shoots + own pay only)Migrations 0038 + 0039 enforce; Domi sees 0 until assignments backfilled.live
Region-scope for Country DirectorsMigration 0036 + UI enforcement (Regional View); other surfaces pending pattern replication.partial
HR self-service tier/scope managementTeam Access Management UI in HR Workspace + Edge Function shipped today.live
Activity log (who changed what)activity_log + tier_change_audit_log + per-table specialized logs.live
Build version visible per surfaceAll 13 bundles show build stamp bottom-right.live

? How to use this page

This is your finishing list. Three rules: (1) work top-down — the five ranked gaps deliver the most cognitive relief per day of work. (2) If something is live, don't touch it. (3) If something is partial, ask whether the missing piece is "automation" or "UI surface" — that tells you the size of the fix.

Total estimated effort for the top 5 gaps: 6–8 working days. After those land, the system stops needing you to push it. The "everything feels clustered" feeling goes away because the connective tissue is in place.

Open this anytime. Tell me to refresh it after migrations land.

build v2026-05-24.20:15