New Media / Interactive Experience

Cassette Jury

A pocket jury for your creative decisions. AI juries, one creative verdict, zero focus groups.

Medium  Web / WebGLStack  Next.js · Three.js · Claude APICharacters  16
← Go to the jury

The focus group you can fit in your pocket

You're mid-project. Writing a script and stuck between two lines. Designing a flow and not sure if users need that extra prompt. Preparing a pitch and genuinely unsure whether the black trousers or the blue ones read better on stage. You need an outside perspective — not another AI that just agrees with you, but something closer to a small room of opinionated people who will actually push back.

That room is Cassette Jury. 16 AI-simulated characters, each with their own profession, personality, and agenda, packed into a wooden box and ready to deliberate on demand. Submit any open-ended creative question, watch them argue — physically, as gooey 3D blob characters — and receive a verdict.

“It is not a replacement for real user research. It is something more honest: a fast, irreverent, and oddly useful way to hear perspectives you hadn't considered, from people you couldn't have assembled, in the thirty seconds you actually have.”

The name comes from the form factor. A small group of people — a focus group — compressed into something you can carry in your pocket. Like a cassette tape. Hence: Cassette Jury.

How it works

User journey — five states
01
Select your jury
Choose of all
02
Submit your question
Open-ended
03
Jury deliberates
Blobs fight
04
Verdict revealed
With vote split
05
Hover each blob
Their reasoning

The experience is designed to be self-explanatory — no tutorial, no onboarding. The wooden box, the blobby characters, the fighting animation: all of it communicates what to do before a word is read. Each juror has a distinct physical presence that reflects their personality.

Once the AI returns its verdict, hovering each blob reveals their individual reasoning — written entirely in their own voice, in character, with no two sounding alike.

Meet the jury

A diverse cast covering a deliberate spread of profession, worldview, age, and communication style. The ensemble is designed so that most questions produce a genuine split — no monoculture, no echo chamber.

Sable Kim
Content Strategist & Part-time Chaos Agent · Los Angeles · 22
Viral instincts and sharp taste despite an 8-second attention span.
Petra Voss
Product Manager · Berlin · 39
Process-focused with strong opinions on everything.
Cleo Marchetti
Illustrator & Art Director · Milan · 46
Viscerally attuned to design. Will walk out over a bad font choice.
Jasper Holt
Startup Founder (3rd attempt) · Austin · 31
Fast-moving optimist who breaks things and thinks later.
Noor Al-Rashid
Cultural Strategist & Researcher · Dubai / London · 35
Analyzes work through context, power dynamics, and representation.
Frank Kowalski
Third-generation Plumber & Small Business Owner · Pittsburgh · 54
28-year plumbing business owner devoted to practical common sense.
Don Draper
Advertisement Creative Directer · Manhattan, USA · 34
Brilliant creative mind who pitches poetry but hides a troubled past.
Peggy Olson
Copy Writer · New York, USA · 20
Brilliant copywriter who climbed from secretary to creative powerhouse. Delivers sharp insights that challenge convention.
Joan Harris
office manager · Manhattan, USA · 29
Sharp office manager who navigates corporate politics with precision. Believes competence is what matters most.
Pete Campbell
account executive · Manhattan, USA · 26
Ambitious account executive trying to prove himself beyond his pedigree. Takes criticism personally and holds grudges.
Roger Sterling
Partner, account executive · New York, USA · 45
Inherited ad man with sharp strategic mind and devastating wit. Brutal critiques somehow feel appreciated.
Bertram Cooper
founding partner · New York, USA · 76
Eccentric founding partner with shrewd business acumen. Quiet but his observations about strategy are devastatingly precise.
Ken Cosgrove
account executive · New York, USA · 28
Account executive who writes fiction and genuinely understands clients. Observes advertising with empathy and irony.
Salvatore Romano
Art Director · Baltimore, USA · 32
Gifted art director with emotional depth and keen eye. Maintains professional boundaries while doing great work.
Harry Crane
head of television department · New York, USA · 27
Stumbled into TV expertise through ambition. Now name-drops CBS and claims revolutionary media strategies.
Takoyaki
Indie Game Developer · Havana, Cuba · 26
Indie game developer who codes existential puzzle games. Sharp observations but always apologizes immediately.

AI as structural backbone

AI is not a feature layer in Cassette Jury — it is the engine behind the entire system, operating across three distinct domains: jury simulation, character design, and visual asset generation. The same character data object that gives each juror their voice also shapes their visual silhouette and drives their 3D blob form.

01  /  VERDICT ENGINE
Jury simulation & prompt engineering
Anthropic Claude API. Modular prompt assembly. Structured JSON output. Few-shot templates. Dynamic instruction flags.
02  /  CHARACTER DESIGN
AI character & art generation
Claude as expert character designer. Google Gemini image generation. Prompt-anchored claymation style consistency.
03  /  3D PIPELINE
Procedural mesh generation
Images → Tripo AI image-to-3D conversion → GLB export. Loaded into WebGL scene via Three.js.

The verdict engine

The Anthropic Claude API drives the jury simulation. Each character is defined in a structured dataset with a voiceProfile field — the prompt-critical field that encodes behavioral instructions directly. This separation means any character can be updated or swapped without touching the prompt logic.

The system prompt enforces a strict JSON output contract. Per-member fields include stance, reasoning, and a direct quote. The top-level response includes a witty summary, a verdict narrative, and a numeric vote split per side.

JSON output contract — schema
{
  "discussion": [{
    "name":    // jury member name
    "stance":   // "<Side 1>" | "<Side 2>"
    "reason":   // 2–3 sentences in their voice
    "quote":    // 1 punchy sentence
  } /* × jurors */],
  "summary":            // 1–3 word witty verdict
  "verdict_narrative": // one synthesis sentence
  "votes": {
    "<Side 1 label>": // count
    "<Side 2 label>": // count
  }
}

Character design pipeline

A second Claude invocation acts as an expert character designer. Given a raw user draft, it synthesises a canonical character profile in a single structured pass — generating the silhouette description, pronouns, location, and expanded bio. That silhouette field — written in natural language — then feeds directly into the Gemini image generation prompt.

Google Gemini produces two mood-variant images per character. Claymation-style visual consistency is enforced entirely through prompt-level style anchoring — no manual post-processing, no LoRA, no fine-tuning. Selected images are then passed to Tripo AI for image-to-3D conversion, producing a fully textured GLB mesh ready to load into the WebGL scene.

Art creation pipeline — text → image → 3D mesh
TEXT
Silhouette field
Natural language
CLAUDE
Character profile
Structured pass
GEMINI
2D image ×2
Mood variants
TRIPO
3D mesh GLB
Image-to-3D
SCENE
Live in Three.js
WebGL
ModelRoleOutput
Claude (Anthropic)Jury verdict engineStructured JSON with per-juror stances and reasoning
Claude (Anthropic)Character designerCanonical character profiles from raw drafts
Gemini (Google)Image generationTwo mood-variant PNG images per character
Tripo AIImage-to-3D conversionTextured GLB mesh per character from 2D reference image

The scene

The 3D scene is built in Three.js with a custom React hook (useThreeJsScene) that isolates all WebGL lifecycle from the component tree — direct imperative control. Each blob's GLB is loaded via GLTFLoader, cached to prevent redundant requests, and rendered with MeshToonMaterial for cel-shading. Morph targets from the GLB are preserved for blendshape-driven facial animation.

Physics is a fully custom Euler integration loop running at ~60fps. During the fight sequence, each blob is pulled toward a randomly assigned target with force capped at 25 units, elastic push-apart forces trigger on collision, and hard box bounds reflect velocity at the walls. Gravity is intentionally disabled during fighting to keep blobs airborne. Camera shake runs as a sinusoidal oscillator with dynamic frequency variation.

The particle system uses a pre-allocated pool of 200 billboard quads. Two emission modes run in parallel during combat: ambient smoke at one particle per blob every six frames, and impact bursts of two to three particles at near-collision midpoints. Each particle carries its own lifetime, velocity, and opacity fade curve, billboarding via mesh.lookAt(camera) per frame.

A toy with an actual point

Cassette Jury exists in the gap between “I need feedback” and “I have time and money to get it.” It doesn't replace the real thing. It fills a specific and common moment: the thirty seconds between an idea and a decision, when you just need to hear a perspective that isn't your own.

The technical ambition — the AI simulation, the character pipeline, the physics, the 3D rendering — is in service of one thing: making that thirty-second conversation feel like it actually happened. The blobs fight because real disagreement is physical. The verdict is a single line because that's all you need. The characters are opinionated because that's the only way the feedback is useful.

“No prototype, no focus group, no budget required.”

← Go to the jury
Cassette Jury fan art

Thanks to Debbie Gao for creating this pic