← All Projects

CALLSHEET

Zero-human agency. An autonomous directory and intelligence layer for UK film, broadcasting, and media.

Active Development TypeScript Next.js 16 Supabase 54 Tables
001

CALLSHEET is a one-person build. No team. No investors. No external dependencies beyond infrastructure providers. The system is designed to run with zero human intervention for routine operations — the principal (me) handles only edge cases, governance decisions, and the cases the system isn't yet trusted to handle alone.

54
Tables
118
tRPC Procedures
37
Scheduled Actions
25
Event Types
12
Flow Steps
35
Decision Types
31
Email Templates
20
Pages
6
API Routes
002

Five layers. The architectural thesis: autonomous entity behaviour can be built incrementally by layering three patterns — typed event contracts for coordination, decision logging for audit and graduation, and self-perpetuating scheduled actions for persistent behaviour without human triggering. The specific implementation (Drizzle + tRPC + deferred actions) is incidental. The essential structure is the closed-loop autonomy ladder: Observe → Log → Evaluate → Graduate → Govern → Observe.

LAYER 4 Meatspace Interface Next.js 16 · 20 pages · 118 tRPC procedures · 6 API routes LAYER 3 Domain Instances DATA & LISTINGS 19 tables · 9 consumers quality · trust · decay OPERATIONS 8 tables · 12 consumers billing · compliance · DSAR PLATFORM & PRODUCT 4 consumers search · onboard · email COMMERCIAL 4 tables · 8 consumers pricing · churn · conversion LAYER 2 Cognitive Substrate Intelligence · 6 tables · 15 consumers · quality scoring · decay detection · ceremonies · graduation · learning LAYER 1 Core Invariants Event Bus (25 events) · Scheduler (37 actions) · Flow Engine (12 steps) · Decision Log (35 types) · Email (31 templates) EXTERNAL Paddle (payments) · Supabase PostgreSQL (54 tables) · Cloudflare R2 (storage) · Resend (email) · Companies House (verification)
003
Data & Listings
Listings, taxonomy, quality scoring, verification, decay monitoring, enrichment. The largest domain — owns the directory and all trust logic.
19 tables · 158 cols · 16 enums · 9 consumers
Operations
Support tickets, compliance register, billing reconciliation, DSAR processing, human procurement. Where the system interfaces with meatspace when it has to.
8 tables · 83 cols · 7 enums · 12 consumers
Platform & Product
Search, onboarding, feature access gating, email pipeline, account closure. The surface the user touches.
4 consumers · search index · email pipeline
Commercial & Revenue
Pricing tiers, subscription lifecycle, conversion funnels, churn detection, sponsored placement, win-back sequences. All nudges data-driven.
4 tables · 41 cols · 8 consumers
004

The system doesn't start fully autonomous — it earns authority. Three capabilities can graduate from human-approved to self-executing, each with statistical thresholds and governance caps. Rollout is phased: 10% → 25% → 50% → 100%, admin-triggered weekly. Rollback fires automatically if declassification exceeds 10% in any 7-day window.

Current status: nothing has graduated yet. All three capabilities require operational data — 6 months of enrichment decisions, 50 ceremony precedents, 4 weeks of algorithm rollout. The infrastructure exists; the autonomy hasn't been earned. If it never earns it (false positive rates stay high, ceremonies don't produce useful signals), the system gracefully degrades to "principal reviews everything" — which is just a normal manually-operated platform. The downside is bounded. The upside is compounding autonomy.

Capability Threshold Cap
Enrichment cadence adjustment FP < 2%, ROI > 50%, n ≥ 12 10/month
Ceremony auto-apply Non-financial, non-visible, precedent ≥ 50 5/month
Algorithm rollout 4 weeks at 100%, declassification < 5% 1/month
005

The system's metabolism. 37 deferred action types, 18 of which re-schedule themselves after completion — the heartbeat. Most platforms at this stage have CRUD and a few cron jobs. CALLSHEET has daily compliance audits, weekly churn detection, monthly ceremonies that review taxonomy, calibrate verification, and generate briefings for the principal. Per-listing checks run on individual cadences. The system breathes on its own.

// Scheduler cadences daily [4] compliance_schedule, compliance_self_audit, search_history_cleanup, claim_abandonment_check weekly [1] proactive_churn_detection monthly [8] data_health_review, provider_outreach_ranking, conversion_funnel_analysis, revenue_health_extended, operational_health_review, sponsored_placement_learning, principal_briefing_generation, learning_hypothesis_analysis quarterly[4] taxonomy_review, verification_calibration, multi_listing_pricing, contractor_performance per-listing decay_liveness_check, enrichment_full_cycle conditional compliance_hold_recheck (7d, until cleared) checkout_precondition_retry (5m, up to 12x) article_14_progress (daily, until 30d)
006

Every listing starts unclaimed. 75% of claims auto-approve via email-domain matching and Companies House lookups. The remaining 25% enter human review. Trust badges progress through four tiers — the highest requires human-reviewed credentials.

Unclaimed
No badge, no owner. Imported data or user-submitted. Exists in directory with minimal trust signal.
Claimed
Owner verified. Email-domain match or Companies House active status. Disputes trigger human review. Contact info visible.
Verified
Background checks passed. Companies House, website ownership, trade body registries. Blue badge. Search ranking boost.
Premium Verified
Human-reviewed enhanced credentials: ID, insurance, peer references. Gold badge. Maximum quality bonus. Requires paid tier.
007

Two multi-step workflows handle the system's most complex operations. GDPR erasure has a 30-day legal deadline with auto-escalation at 7 days, 3 days, and past-deadline. Account closure runs without a deadline but coordinates with compliance holds. Both can run concurrently for the same account.

Erasure (GDPR)
6 steps. Verify identity → extract data → close tickets → process erasure (DB tx + R2 cleanup) → close DSAR case → emit completion event. 30-day deadline. 3 consecutive step failures → auto-escalate.
2 steps not skippable · deadline alerts at 7d, 3d, 0d
Account Closure
6 steps. Archive listings → cancel Paddle subs → anonymise enquiry data → delete/defer buyer data → deactivate account → emit closure event. Compliance hold = sole coordination point with erasure.
2 steps not skippable · no deadline · hold-aware
008
FrameworkNext.js 16, TypeScript strict
StylingTailwind v4, shadcn/ui
APItRPC (httpBatchLink)
AuthBetter Auth
DatabaseSupabase PostgreSQL
ORMDrizzle
PaymentsPaddle
StorageCloudflare R2
EmailResend
Searchtsvector + pg_trgm
TestingVitest + Playwright
HostingVercel · ~£36/mo