For judges · one page

Loci turns a photo of your own room into a memory palace for a list you must learn in order, then lights each stop back up as you say the list in the dark.

The path to click, receipts from a real run on the live site, how to reproduce them, and what Loci doesn't claim. Every number on this page links to where it came from.

The 30-second path

No sign-up, no key, nothing to install. Any browser; a phone works.

  1. 1

    Open Loci

    The home screen shows the method on a real room.

  2. 2

    Tap “Try it: 12 cranial nerves”

    A palace made in advance in an AI-generated student room opens at stop 1. No AI call, so no wait.

  3. 3

    Tap “Next stop” a few times

    Each stop is a real object in the photo, with a strange scene for its item.

  4. 4

    Tap “Lights out” (the moon) and type what you remember

    A right answer turns its stop green and lights that part of the room. occulomotor counts for Oculomotor; Optic at stop 5 stays dark.

  5. Read the result, then retry the misses

    First-try score, learning time and recall time. Every stop green brings the whole room back.

The 12 answers, in order

Olfactory · Optic · Oculomotor · Trochlear · Trigeminal · Abducens · Facial · Vestibulocochlear (or “auditory”) · Glossopharyngeal · Vagus · Accessory · Hypoglossal

Stop 1 · Receipts

A real run on the live site, with nothing stubbed.

On 2026-10-04, 19:44–19:47 UTC, scripts/receipt.mjs built 9 palaces on devpost-learn-loci.vercel.app the way a person does: the three AI-generated example rooms, each uploaded as if it were your own photo, times the three example lists. The browser shrank each photo, the server called the real models, and the clock ran from “Build my palace” to the first scene.

9/9

palaces built

Every one reached its first scene. The raw answers

102

stops placed by code

On 142 objects the AI found. shared/route.ts

102/102

scenes spell their item

The exact item, in the scene for its stop. shared/prompts.ts

14.45 s

median wait to learn

Upload included; the slowest took 30.02 s. DEMO.md

Cost of the whole run: $0.1151 at list prices. DeepSeek, which wrote the scenes, bills that rate: $0.0115. The Gemini part, $0.1036 at paid rates, ran on a free-tier key and was not billed. The answers report the tokens each model used, and the script prices them at the rates published on 2026-10-05.

The 9 palaces. Objects and scenes name the model that answered; the AI never decides a stop.
Room × listObjects foundStopsScenesWaitList price
Student room12 cranial nerves16 · gemini-3.5-flash1212/12 spell their item · deepseek-flash28.00 s$0.0230
Student roomFirst 12 elements16 · gemini-3.8-flash1212/12 spell their item · deepseek-flash14.43 s$0.0076
Student roomGrocery run16 · gemini-3.8-flash1010/10 spell their item · deepseek-flash13.94 s$0.0077
Studio flat12 cranial nerves16 · gemini-3.1-flash-lite1212/12 spell their item · deepseek-flash17.97 s$0.0029
Studio flatFirst 12 elements16 · gemini-3.5-flash1212/12 spell their item · deepseek-flash16.95 s$0.0236
Studio flatGrocery run16 · gemini-3.5-flash1010/10 spell their item · deepseek-flash13.43 s$0.0247
Kitchen12 cranial nerves16 · gemini-3.1-flash-lite1212/12 spell their item · deepseek-flash13.92 s$0.0027
KitchenFirst 12 elements16 · gemini-3.1-flash-lite1212/12 spell their item · deepseek-flash30.02 s$0.0030
KitchenGrocery run14 · gemini-3.5-flash1010/10 spell their item · deepseek-flash14.45 s$0.0199

Stop 2 · Reproduce

Run it yourself. The real path needs no key.

The receipt runs against the live site, so the server's own keys do the AI calls. The tests are a separate, deterministic replay: they stub the AI and never stand in for the product.

The real runlive AI

git clone https://github.com/edycutjong/loci && cd loci
npm ci && npx playwright install chromium
# 9 palaces on the live site → public/judge/receipt-<date>.json
npm run receipt

About 3 minutes. Prints one line per palace and the totals. BASE_URL=http://localhost:5174 points it at your own dev server and keys.

The testsAI stubbed

# 102 unit tests and 60,000 generated answers, no network
npm test
# 29 browser checks; the AI helpers and the microphone stubbed
npm run e2e

The same commands CI runs on every push, plus tsc and the production build.

One call, with curl and jqlive AI

curl -s https://loci.edycu.dev/rooms/kos.jpg | base64 | tr -d '\n' | jq -Rs '{image: .}' \
  | curl -s https://loci.edycu.dev/api/anchors -H 'Content-Type: application/json' -d @- \
  | jq '{model, ms, tried, usage, objects: [.anchors[].label]}'

The student room's photo, straight to the object finder: which model answered, how long it took, which models it passed over and why, the tokens it used, and the objects it found.

Stop 3 · Honest limits

What Loci doesn't claim.

  1. Recall in one sitting, nothing more

    Loci shows a first-try score, learning time and recall time. It makes no claim about next week and has no spaced repetition.

  2. The receipt's rooms are AI-generated

    Real rooms are messier. When free-tier Gemini quotas run out, objects come from gemini-3.1-flash-lite, which draws looser boxes.

  3. Voice is Chrome and Edge only

    It uses the browser's own speech recognition. Automated Chrome can't open a microphone, so voice is tested with a stand-in recognizer; typing works everywhere.

  4. Your photo goes to an AI once

    Gemini, or DeepSeek if Gemini is busy, sees it to find objects; the server keeps nothing. A free-tier Gemini key lets Google use what it receives, so leave people and papers out.