A pocket jury for your creative decisions. AI juries, one creative verdict, zero focus groups.
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.
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.
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.
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.
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.
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.
| Model | Role | Output |
|---|---|---|
| Claude (Anthropic) | Jury verdict engine | Structured JSON with per-juror stances and reasoning |
| Claude (Anthropic) | Character designer | Canonical character profiles from raw drafts |
| Gemini (Google) | Image generation | Two mood-variant PNG images per character |
| Tripo AI | Image-to-3D conversion | Textured GLB mesh per character from 2D reference image |
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.
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.”

Thanks to Debbie Gao for creating this pic