Skip to content
← IndexAI System / 2026
01Case study

ArtistDeck

Evidence-graph EPK generator for musicians

A press-kit generator where every published claim has to trace back to a verified source before it can ship.

ArtistDeck landing page on a dark background, headline reading "Your career, remembered. Auto-enriched, verified, always ready to book."
Role
Product Direction + Architecture
Year
2026
Category
AI System

Stack

  • Next.js 15
  • TypeScript
  • Supabase
  • Postgres RLS
  • Tailwind CSS
  • Stripe
  • Playwright
  • Multi-provider LLM chain

System Trace

The path from the real brief to the result, with no simulated agent status.

  1. 01

    Brief

    Artists need credible press kits without loose claims.

  2. 02

    Structure

    The verified, provenance-tracked evidence graph is the asset; the EPK, PDF, and buyer kits are projections of it.

  3. 03

    Build

    Next.js 15 and Supabase Postgres use row-level security for access control, while enrichment resolves identity before writing anything and generated copy is linted against content rules.

  4. 04

    Verify

    1,244 unit tests across 134 spec files hold the contract, and both failure classes are blocked at the write path and covered by tests.

  5. 05

    Shipped result

    The product runs in production as a self-hosted Next.js service. It is pre-launch, so no user or revenue figures are claimed.

02The problem

An independent artist rebuilds the same press kit every time a promoter, festival, or label asks for one. It goes stale by the next release, so the version sitting in a buyer's inbox is the artist from four months ago. Making one that looks industry-grade takes a designer, and most artists at that stage are not paying a designer.

Tools that promise to fix that generate confident copy and check it against nothing, so the failure is not a clumsy sentence. It is a false credential on a document sent to a buyer.

This project produced two of those failures in its own database before the rule that prevents them existed. A distribution company was stored as a record label, because it appeared in release metadata and nothing separated the pipe to streaming services from the label that signed the record. A copyright line was read as a label credit and wrote an artist's legal name into a public field, for an artist who performs under an alias. Both rows were marked verified. Both were wrong.

03The idea

Confidence is an output of truth, never an input.

The first thesis was that the understanding was the product. That is wrong in a way worth stating plainly: reasoning is rented from a model provider by the token, and rented identically by every competitor. If the inputs are public and the reasoning is rentable, someone rebuilds the product in a weekend.

The asset is the verified, provenance-tracked evidence graph underneath, which improves every time a claim gets corrected. The EPK, the PDF and the buyer kits are projections of that graph, and they are meant to be disposable.

04System & design

Product page section headed "Built around proof. Not around hype." with four cards describing the proof score, four buyer lenses, the claim review queue, and buyer-specific kits.
The provenance model surfaced in the product itself: every achievement carries a verified, internal, or needs-source status, and a buyer only ever sees what holds up.

05Build

Setup is a name. It is the only required field. The system searches the artist's public presence across Deezer, SoundCloud, Apple Music, Last.fm, YouTube, Mixcloud, Bandcamp, Resident Advisor and Linktree, then hands the matches back to confirm or drop before anything is written, because a wrong match is how a profile gets contaminated at the first step. What survives becomes a pre-filled profile, so the artist edits rather than assembles. Layout, typography and the print export are fixed by a design system rather than left to the artist, so the output does not depend on the artist having design taste.

Claims are ranked by how far the source sits from an explicit statement. A platform's own label field or a Discogs credit is strong. A copyright line, a distributor credit or a catalog-number prefix is weak. A weak-source claim lands as needs_source and only reaches verified on confirmation from a structurally different strong source. Two reads of the same field on the same platform count as one source, not two.

A filter was the obvious fix and was rejected on purpose. Matching a stored name against the artist's stage name catches nothing when the artist uses an alias, which was the entire failure. Corroboration is the fix. A blocklist only hides the symptom.

The application is Next.js 15 on Supabase Postgres, with row-level security doing access control rather than checks in application code. Enrichment fans out across music platforms, resolves identity before writing anything, and selects press photos by clustering an artist's own official profiles with perceptual hashing, on the reasoning that the shot they pushed everywhere is the one they chose. Generated copy is linted and regenerated when it breaks a content rule. 1,244 unit tests across 134 spec files hold the contract.

  • AI Systems
  • Product Design
  • Frontend Engineering
  • Prototyping

06Result

Runs in production as a self-hosted Next.js service. 284 commits since June 2026 across roughly 237 source files.

Both failure classes are blocked at the write path and covered by tests. A row holding a person's legal name is deleted rather than downgraded, because re-tiering a row still stores the name.

There are no user or revenue figures to show here. The product is pre-launch, and manufacturing that kind of proof is the exact behaviour it exists to prevent.

07Contribution

Split five ways on purpose. Overstated authorship is the fastest way to fail a follow-up question, so what was conceived, designed, built, AI-assisted, and taken off the shelf is stated separately.

Conceived
  • The product thesis, and the correction to it: the evidence graph is the asset, not the generated copy.
  • The layer split that keeps a fact and a judgment about a fact from being stored in the same place.
  • Corroborate-then-promote as the provenance rule, after rejecting a name filter as the fix.
  • Buyer-specific kits for festival, venue, label and press as projections of one graph.
Designed
  • The press-kit design system and the quality bar it is held to.
  • Information hierarchy for the public kit and for the print and PDF export.
  • The content rules the generator enforces, covering photo authenticity, face framing, and what a bio is allowed to claim.
Built
  • Schema and access-control model, with row-level security as the enforcement layer rather than application checks.
  • The provenance rules, specified to the point of being testable.
  • Review and acceptance of every change against those rules.
AI assisted
  • Most of the implementation code was written by AI coding agents working from my specifications and under my review.
  • Bios and pitches are model-generated at request time, then linted against the content rules and regenerated when they fail.
External systems
  • Next.js, React, TypeScript, Tailwind CSS.
  • Supabase for auth, Postgres and storage. Stripe for subscriptions.
  • OpenAI, Anthropic and DeepSeek model APIs on a fallback chain.
  • Playwright for the test suite. sharp for image processing.
  • MusicBrainz, Discogs, Beatport and Spotify as source data.