Skip to content
Back to work

Castd

A two-sided UGC casting marketplace: the working product in 47 minutes of commits, the agency-grade identity one evening later.

Client
Self-initiated product
Role
Product design, brand & build
Year
Jun 2026 to Jul 2026
Discipline
AI-Assisted Development
Castd

Castd is a casting call for the creator economy: brands post briefs, vetted creators apply with portfolios and rates, and the work speaks rather than the follower count. Under the metaphor sits a real two-sided marketplace, live auth, a Postgres database with row-level security, role-aware dashboards, and seeded demo tenants on both sides. It was built in two sittings a month apart: the working product in forty-seven minutes of commits in June, the identity in a single evening in July. Every frame below is the app running locally against its own database.

A floating laptop with the Castd landing page beside browser windows showing the brand guidelines and the brand dashboard
Castd: the landing page, the brand guidelines and the brand workspace

The casting call, not the job board

The product frame is borrowed from a film set, and the vocabulary is enforced everywhere: a brand posts a brief, not a job; it casts a creator, not hires an influencer; the sign-off rhythm is brief, cast, create. The scope is just as deliberate. This MVP is the match-and-apply loop and nothing else, no payments, no messaging, no delivery pipeline, though the schema already carries the join points those features will need.

A brand's workspace opens on its briefs and applicant counts. Each brief gathers applications with a pitch and a proposed rate, and accepting one is a single action with the state change reflected immediately. On the other side of the lens, creators filter the board by platform, content type and budget, open a brief and pitch in place. There are no follower minimums anywhere in the product; a creator is a portfolio, a niche and a rate.

The brand side: a brief, four applicants, one accepted
The creator side: filter the board, open a brief, pitch with a rate
A public creator profile: the portfolio does the talking

Forty-seven minutes to a working marketplace

The commit history tells the story better than I can. The repository begins as a blank scaffold at five past ten on a Saturday evening; forty-seven minutes later one commit lands the entire marketplace across a hundred and eighteen files: the schema and its row-level security policies, sign-up with role-aware onboarding, both dashboards, a five-step brief wizard, browse and apply, creator portfolios with uploads, and an idempotent seed that stands up twelve demo creators and a slate of briefs. Two fix commits and an architecture note followed, and the session closed in well under two hours.

What I care most about is the part that survived scrutiny. Access control lives in the database, not the interface: every table carries row-level security, a profile row is readable only by its owner so email addresses cannot be enumerated, and the public identity a marketplace needs is deliberately duplicated onto the creator and business tables instead. The same evening, an adversarial review pass went hunting through the signup trigger and the migration ordering and fixed what it found. Building fast did not mean skipping the boring safety work; it meant the boring safety work also happened fast.

A month later, the spotlight

For a month Castd looked like what it was, a competent MVP in default clothes. The July session replaced that with an identity built around a single idea, the spotlight. Warm paper, warm ink and one persimmon accent held to a strict ratio, seventy percent paper, twenty-five ink, five persimmon. Newsreader serif carries the display voice with at most one italic accent word per headline; Geist runs the interface; Geist Mono speaks in call-sheet eyebrows, stats and statuses. The mark is a lens ring open at the right with a persimmon dot held in the opening, the creator, in frame, on record, and that dot is the only element that ever takes brand colour.

Two WebGL surfaces carry the atmosphere: a warm mesh gradient behind heroes and a dark ember field for closing panels, both frozen when a visitor prefers reduced motion. The rest of the identity works through restraint, island buttons, hairline rules, film grain at three and a half percent, and a footer watermark that sets the name at a fifth of the viewport width.

The rebranded landing page: one italic accent word, island CTAs, the casting board
The mark: a lens ring open at the right, the persimmon dot in frame, on record
The Ember surface carries the identity into the product at sign-up

Guidelines that hand you the assets

The rebrand shipped with its own governance: a guidelines page at /brand, eight numbered sections from foundations to usage, designed and written in the same evening as the identity it documents. Like the rest of the site it is not a PDF export. The page is built from the production tokens, so the swatches are the real values, the specimens are the real fonts, and the surfaces are the live shaders.

What makes it unusual is that it behaves like tooling rather than documentation. Every colour card copies its hex or oklch value on click. The logo section has a button that copies the mark as SVG. The ratio bar animates the seventy, twenty-five, five rule. The motion section demonstrates each easing curve on hover and lists the duration tokens, including the honest one: zero, for everything, when reduced motion is on. A designer landing on this page leaves with the actual assets, not a description of them.

Scrolling the guidelines: foundations, logo anatomy, colour, type, voice, surfaces, motion
Colour as tokens: every swatch copies its hex or oklch value on click
Three voices: Newsreader display, Geist interface, Geist Mono call sheets

Brand debt costs an evening now

Castd ran for a month looking like what it was, a fast MVP wearing default components. The rebrand that replaced it, the spotlight concept, the shaders, the vocabulary, the guidelines page, took one evening of direction. Nothing about the product changed that night, and everything about how it reads did.

That gap used to justify itself. Identity work was expensive, so it waited until the product had proved something. When the full pass costs an evening, waiting stops being pragmatism and becomes a choice about what you are willing to look like in the meantime. The way I want to work now is the way this project went: ship the mechanics fast, then pay the brand debt the same week, in full.

Next case study06

View all work

ARC Pod

ARC Pod