A studio's working week, played against a real database
A minute, no sound, loops on its own. These screens are drawn — it is a tour of what
the product does, not a recording of a live account. The transcript underneath is
the opposite: a real run, quoted.
Every line below came out of a real PostgreSQL database, in order, on 1 August 2026 — 27 steps against
32 migrations. Nothing is staged. The refusals in amber are the
database saying no, quoted exactly.
The people are invented and there is no real media, no identity document and no
studio named anywhere in it. The clinics in the tour are invented too — every
studio keeps its own list, and this software ships with none.
JOINING THE STUDIO
01Sam follows the studio’s link and appliesas Sam, who wants to work
✓application submitted
no date of birth asked for. that belongs in the encrypted vault later, attached to real id,
not sitting in an application queue where it proves nothing.
02Sam pokes around to see what else applying got themas Sam
✓nothing. no studios, no roster, no other performers
applying grants you exactly nothing until somebody says yes
03The studio reads the application and approves itas the coordinator
✓1 waiting: "Sam Placeholder" — "Available weekends, happy to travel."
✓approved, and Sam is on the roster
✓Sam is now on the roster as "talent" — free to write their own profile
one transaction. it cannot put someone on the roster without recording why.
04Approving the same application twiceas the coordinator
⃠Refused:refused — already answered
database said: "this application has already been answered"
THE RECORDS VAULT
05Rae files her own recordsas Rae, a performer
✓two records filed — an ID and a signed release
the sensitive part is encrypted before it reaches the database — the key never lives here
06The studio checks what Rae has on fileas the coordinator
✓the studio CANNOT open Rae’s records — not one row is visible to it
there is no staff read policy on that table at all. that absence is the design.
✓but it CAN see proof: 2 on file · ID yes · release yes · records form no
proof, never contents. that is the whole product in one line.
07Rae checks who has been lookingas Rae
✓1 entry in her activity log: "chain_status" touching ["record_type","expires_on"]
field names and counts. never values. she sees every look, always.
08A staff member from another studio tries Raeas the outsider
⃠Refused:refused proof about a performer who isn’t theirs
database said: "not authorized"
EXPIRY NOTICES
09Jo files a record that lapses in 10 daysas Jo, another performer
✓one record on file, expiring soon
10studio.queue_expiring_record_notices() runs, same as the 8:30am cronas the daily job
✓1 notice queued — Jo, whose record lapses inside the 30-day window
one row per person, not per record. someone with three lapsing documents still gets one message.
11The same job runs again, later the same morningas the daily job
✓0 queued this time
this is the point, not a bug: Jo was already told inside the cooldown window. without this,
a daily cron against a record lapsing in three weeks sends twenty-one identical emails, and
twenty-one identical emails is how a warning becomes something people stop reading.
THE SHOWROOM
12A fix request goes on take-04 at 00:32as the coordinator
✓fix request raised against the clip at a timecode
13The coordinator tries to approve it anywayas the coordinator
⃠Refused:refused — only the owner approves
database said: "only the studio owner can approve"
14The owner tries to approve the clip while the fix is openas the owner
⃠Refused:(!) refused — you cannot approve past an open fix request
database said: "cannot approve while 1 fix request(s) are still open"
this is the Showroom earning its keep. no amount of clicking gets round it.
15The note gets addressed and the flag closedas the coordinator
✓fix request resolved
16Now the owner approves bothas the owner
✓the still is approved for release
✓the clip is approved too, now it’s clean
THE GALLERY AND THE LINK
17An asset with an open fix request is added to the release galleryas the owner
⃠Refused:refused — it has an open fix request against it
database said: "asset 40000000-0000-4000-8000-000000000002 is not approved for release — clear its fix requests and have the owner approve it first"
enforced by the database, so no screen anywhere can route around it
18The approved still goes in, and a link is madeas the owner
✓added to the gallery
✓share link minted, labelled for whoever it’s going to
19Someone with no account opens itas a stranger with the link
✓the link opens: gallery "Selects for release", 1 item
it returns a storage path — "10000000-0000-4000-8000-000000000001/30000000-0000-4000-8000-000000000001/setup-01.jpg" — never a public URL.
the app signs a short-lived URL per request, which is why revoking works instantly.
20The owner kills the linkas the owner
✓link revoked
21They try the same URL againas the same stranger
⃠Refused:the link is dead
database said: "this link is no longer available"
⃠Refused:and a token that never existed says exactly the same thing
database said: "this link is no longer available"
✓identical messages — you cannot use this to hunt for real links
TALENT CHAT
22A thread is opened for the shootas the coordinator
✓thread created and both performers added
23Someone outside the studio is added to the threadas the coordinator
⃠Refused:(!) refused — chat never reaches outside this studio
database said: "chat is limited to people in this studio — 20000000-0000-4000-8000-000000000009 is not a member"
this guardrail is why the feature is lawful. it lives in the database, not in a form.
24Rae sends a message — twice, because her signal droppedas Rae
✓sent
⃠Refused:the retry does not create a second copy
database said: "duplicate key value violates unique constraint "chat_messages_author_id_client_id_key""
✓1 message in the thread, not 2 — shoots happen where reception doesn’t
25Jo reports a message and blocks the senderas Jo
✓report filed for a human to read
✓block applied
✓the block reads as active from Jo's side: true
✓and from Rae’s side too — a block that only worked one way would be worse than none
TAKING A COPY OF YOUR OWN FILE
26Rae uses "get a copy" and downloads everything held on heras Rae
✓the export is logged before the file is handed over, not after
doctrine 2.1: that write is awaited, never fired off alongside the response. an export nobody
can account for is worse than an export that never happened.
27Rae checks her own activity view afterwardas Rae
✓"You downloaded a copy of your data" — the row names her as both subject and actor
that is the whole point of the row. the person who did NOT download their file is the one
who needs to see it — an attacker who gets into her email once cannot take a copy without
leaving this behind.
Every refusal above came from the database itself, not from a screen — so no
screen anywhere, and no future one, can route around it.
Swap in real media, real accounts and real people. The flow is unchanged.