What you understand, you keep.

Inspiration

Valoquent, my shipped iOS and Android app, scores real-time voice conversations with historical figures on a calibrated quality meter. Building it left me with a question: what happens when that score drives progression in a world you can walk, where a door opens only after you have understood the person beside it?

The fiction arrived with the form. The halls keep history's minds in paint. A Keeper curates them. Conversation opens a piece of a figure's world, and you keep what you can defend. World Labs Marble made the halls buildable in a weekend from my own painterly concept art, so the paintings could finally hang somewhere.

What It Does

You wake in your personal study. The shelves stand conspicuously empty, and the portrait on the wall has opinions about that. The Keeper of Stories, a dry and witty living painting, teaches the one rule of this place: how you speak matters.

Down the hall, Marie Curie is awake in her frame. You talk with her out loud, in your own voice, and a calibrated meter scores the exchange server-side every turn. Reach real understanding and the laboratory door beside her portrait unlocks. Inside, artifacts have materialized, and the one your conversation gave meaning to glows. Take any of them; the Keeper judges the story, never the choice. Carry your pick home and defend it. Win the argument and the artifact settles onto your shelf live in scene, points climb, and the next figure waits behind a locked door.

How I Built It

The rooms. Marble generated all three spaces, the personal study, Curie's hall, and Curie's laboratory, from my concept art through a small upload, generate, and poll pipeline written on site (single image, multi-image with azimuths, and panorama staging). The exported splats render in the browser with SparkJS and Three.js, and Marble's collider meshes make the rooms walkable. Plain ES modules, no bundler.

The wiring. Each room is a page, and each page is its own LiveKit room. A small Node server mints tokens and auto-dispatches the agent; cross-page state (who you are, what fired, what you carry) rides localStorage. Pointer-lock WASD movement against the collider, crosshair grab and carry, a Present beat at the Keeper's portrait, exit veils between rooms, a points HUD, live captions, and a canned-clip fallback tier behind every live vendor.

The mind. The portraits think with Valoquent, my shipped conversation engine, disclosed below. Its server-side scorer runs unmodified in the demo agent. ElevenLabs Conversational AI carries the voice loop, LemonSlice animates the paintings, LiveKit moves everything. Curie's door unlocks when the keyword hits on the dominant topic, and the turn count. The Keeper's verdict is behavioral: a defense affirmed without a probe earns 2 points, a probed one earns 1, and the first hall opens at 2.

The proof. Two test batteries, both written at the event. Route A replays scripted visitor archetypes against the real scorer locally to calibrate those thresholds. Route B speaks to the deployed agents over websocket audio and asserts on the live event stream. The offline battery runs 15 for 15. In the last live run before submission, asked directly where the score meter was, the Keeper answered in character: "The shelves answer that … they stay bare until a story earns its place."

Challenges I Ran Into

World models take art direction. My three hallway mocks were painted as concept art, and they are geometrically contradictory; multi-image generation wants overlapping views of one space. Two rejected hallways later, the pipeline became: stage one coherent panorama, then generate. The plus-tier model also hung at the generate acknowledgment on multi-image runs, so the script grew a long timeout and a clean socket-error exit.

Reflections become geometry. The halls have glossy floors, and the reflections baked concave dips into the collider meshes, so walking sank and snagged. The fix was flattening the floor region of both hall colliders.

Voice agents fail closed. The deployed Keeper died at the handshake with a policy violation because per-agent override toggles on the platform default off and fail silently. The live battery caught it in the middle of the night; the fix lived in a dashboard, and the rerun proved it. Config consoles are part of the deploy surface.

Solo, one machine, clean rules. My backup Mac was retired the day before on electrical-safety grounds, so the build ran on one M4 laptop with an iPad as the second display. The event rules bar coding before the event, so the entire spatial layer was written on site, on top of a disclosed shipped engine, with assets and accounts prepared in advance and a fallback behind every live dependency.

What I Learned

  • World models reward storyboarding. One coherent space, overlapping views, cheap draft previews before full generations. Beautiful paintings that never shared a room make contradictory worlds.
  • Splat worlds need collider hygiene. Anything shiny will try to become geometry.
  • Test batteries make agent tuning answerable. Does the Keeper probe thin stories, does it hold character under provocation. Transcripts settle what demos hide.
  • Fallbacks compose. Agents drive live, files drive fallback, and clips fire on a missed 3-second window, so a single vendor dying costs a beat instead of the demo.
  • A conversation meter can carry a game. A door refusing to open because the exchange stayed shallow teaches the rule faster than any tutorial text.

What's Next

More figures behind the locked doors; the silhouette tease and the next-hall gate already hang in scene. A tapestry system, specced during the event: a woven cloth beside each portrait that stitches itself in as your understanding of that life deepens, so every player's tapestry ends up a different record of the same person. And the headset path: the build already carries a VR button, controller grabs, and a lighter splat tier for standalone headsets.

Built At The Event, And What Was Not

Built at the event: the three Marble worlds and their collider integration; the Marble pipeline scripts; the three-page web app (splat rendering, first-person movement, grab and carry, door unlock, shelf settle, points HUD, captions, canned fallback tier); the token and dispatch server; the Keeper judge module (hall-state handoff, portal and points events, closing-phrase watch, teardown fail-safes); the reveal tracker wiring; both test batteries; the portrait drive audio.

Pre-existing product: Valoquent, my shipped iOS and Android conversation app, live on the App Store and Google Play. Its server-side conversation-quality scorer runs unmodified in the demo agent, and the Marie Curie persona comes from that shipped product.

Advance prep per the rules: painterly concept art and design mocks, persona and script text, accounts and deployment configuration, and capability-test code that is not part of this submission.

Sponsor credits used at the event: World Labs Marble, the Free Max coupon (Pro tier, which enables collider downloads) and World API credits. [If Tripo objects were generated at the event, add: TRIPO API credits. Otherwise delete this bracket.] Self-funded: LiveKit, ElevenLabs, LemonSlice, Cloudflare.

Built With

  • elevenlabs
  • lemonslice
  • tripo
  • valoquent
  • worldlabs
Share this project:

Updates