← Try the mock

Drill Room: how it's built

Timed coding drills where the interviewer never solves.

228 problems, with your approach stated before the clock starts. Run checks the examples in a throwaway sandbox. In Java, Submit sweeps generated inputs against a correct implementation on 164 of them. State is local first, with encrypted sync.

Architecture

A drill, end to end

No cron and no polling on the drill path; a one-second interval only redraws on-screen timers.

A drill, end to endBrowserServerCompute & dataModelsDrill pageLocal storageStatic problemsSign-in checkState syncRun routePostgres revisionsThrowaway microVMRunner snapshotGemini oracleLocal Ollama1234567891011
  1. Drill page → Static problems: statement, examples and stub, cached (request, sync)
  2. Drill page → Local storage: every change written here first (event, sync)
  3. Drill page → Sign-in check: sign in; every route checks the session (request, sync)
  4. Sign-in check → Postgres revisions: credential read on every call; session tokens not stored (request, sync)
  5. Drill page → State sync: save 6 s after the last change; a stale write merges (timer, async)
  6. State sync → Postgres revisions: encrypted revisions, last 30 kept (request, sync)
  7. Drill page → Run route: Run or Submit (request, sync)
  8. Run route → Throwaway Micro virtual machine — A small virtual machine started for one job and thrown away after it.: create, run, stop in a finally block (request, sync)
  9. Throwaway Micro virtual machine — A small virtual machine started for one job and thrown away after it. → Runner snapshot: boot from the prebuilt runner image (request, sync)
  10. Run route → Gemini oracle: Submit only: your code and the statement (request, sync)
  11. Drill page → Local Ollama: analysis of logged attempts, on a device that can reach it (request, async)

Submit

The bound is worked out from the statement ahead of time and never sees your code. The oracle is written per Submit.

SubmitBrowserRun routeModelsSandboxSubmitProblem fileCheck the signatureWrite the oracleSweep the inputsSmallest failing caseWhich line?Local Ollama12345678
  1. Submit → Check the signature: Java source and signature (request, sync)
  2. Check the signature → Write the oracle: code and statement, sent only after the signature passes (request, sync)
  3. Write the oracle → Sweep the inputs: oracle appended after your code, never returned (request, sync)
  4. Sweep the inputs → Smallest failing case: first disagreement, shrunk (response, sync)
  5. Problem file → Submit: stored bound, worked out ahead of time, shown beside it (event, sync)
  6. Smallest failing case → Submit: verdict, smallest case, your code's complexity (response, sync)
  7. Which line? → Local Ollama: the failing input goes to a local model (request, async)
  8. Smallest failing case → Which line?: hand off the failing case (event, sync)

Wiremocks

A mock-up of a screen — Here, a static picture of a screen, drawn to show layout and flow, not the working app. — a static picture, not the real app

The console after Run and Submit

A drawing of the console on a made-up problem; Run checks the examples, Submit sweeps generated inputs.

After Run: Testcases and Output

Pair sum: return the indices of two numbers that add to a target.

  • Case 1Pass

    nums = [4, 1, 8, 5], target = 9

    Expected [0, 3], got [0, 3]

  • Case 2Fail

    nums = [5, 5], target = 10

    Expected [0, 1], got [1, 1]

  • Case 3unchecked

    nums = [1, 5, 9], target = 14

    No expected output, so nothing was compared

Each run is capped at 12 seconds.

After Submit: the sweep

Disagrees with the reference on a generated input

Smallest failing case

nums = [4, 9, 4], target = 8

Yours returned [0, 0]; the reference returned [0, 2].

Your solution: O(n²) · Achievable: O(n)

Which line?

Which line? hands the failing input to a local model.

Running cost

ResourceFigureStatusSource
Sandbox Central processing unit — The main chip that executes a computer's instructions., Run~2.1–2.7 seconds per runMeasured
build log, line 1019
Read on 2026-10-17
Sandbox Central processing unit — The main chip that executes a computer's instructions., Submit sweep~9–11 seconds per sweepMeasured
build log, line 1019
Read on 2026-10-17
Sandboxes createdat most 1 per Run or SubmitSet in the project's code
run route, lines 203-206 and 327-332 (a request refused before create costs nothing)
Read on 2026-10-17
One production Run, end to end5,331 ms one runMeasured
build log, line 6383 (2026-10-15; 1,547 ms of it boot)
Read on 2026-10-17
Conflicts with readme, lines 443-444 and 477 (boot under 300 ms, read on 2026-10-17): The build log is newer and measured, so it governs the row.
Runner snapshot833 Megabyte — Megabyte, a million bytes. no expiryMeasured
build log, line 6378 (2026-10-15)
Read on 2026-10-17
Conflicts with readme, line 461 (about 0.94 Gigabyte — A billion bytes of data; storage is priced per gigabyte per month. with a 14-day expiry, read on 2026-10-17): The build log is newer and measured, so it governs the row.
Vercel Sandbox plan—Not verified
owner's metered-resource table (Vercel Sandbox, plan tier marked verify, names this project)
Read on 2026-10-17
Gemini requests20 per day per modelMeasured
owner's metered-resource table (Gemini free tier row); build log, lines 1530-1531 (seen in 429 responses; the provider does not publish it, build log line 1135)
Read on 2026-10-17
Gemini requests per Submit1 (0 with your own oracle class)Set in the project's code
problem page, lines 661, 2526, 2538 and 2543 (no bound call when the file has one); oracle module, lines 356-360 (no retry)
Read on 2026-10-17
Conflicts with build log, line 1130 (2 if the first is rejected and retried, read on 2026-10-17): The log is older and the code has no retry now, so the code governs the row.
Submits a day at the cap20 per dayDerived
derived (see inputs)
Inputs: 20 requests a day (measured) ÷ 1 per Submit (configured) = 20
Read on 2026-10-17
Gemini price$0.00Published price
build log, lines 1128-1129 (quoting the free tier's price)
Read on 2026-10-17
Edge requests per Run or Submit1Set in the project's code
build log, lines 1015-1022 (one route call per click; a planning table)
Read on 2026-10-17
Vercel edge requests, planOne million — Shorthand in prices and limits, as in $1 per 1M tokens. per month, shared by about 10 projectsPublished price
owner's metered-resource table (Vercel Requests Vercel counts at its edge — Every request Vercel serves (a page, a script, an image) counts as one.)
Read on 2026-10-17
Conflicts with readme, lines 489-490 (15 projects, read on 2026-10-17): The owner's row is newer, so it governs the row.
Neon compute$0.106 per Compute unit — The unit a serverless database bills its processing time in; one unit-hour is one unit running for one hour.-hourPublished price
owner's metered-resource table (Neon Postgres; the org bills on Launch from 2026-09-29)
Read on 2026-10-17
Conflicts with readme, line 508 (free tier, read on 2026-10-17): The owner's row is newer, so it governs the row.

Attempt analysis runs on a local Ollama, no hosted Application Programming Interface — A defined way for one program to request data or actions from another.. Storage outside the drill is not counted.

Design decisions

  • The interviewer never solvesThe hint pane stays sealed until you confirm your approach; naming an approach is on the interviewer's never list.
  • One throwaway Micro virtual machine — A small virtual machine started for one job and thrown away after it. per runEach run boots from a prebuilt snapshot, so a runaway loop dies with its Micro virtual machine — A small virtual machine started for one job and thrown away after it.. Without the flag that discards a stopped session, each stop wrote a ~900 Megabyte — Megabyte, a million bytes. snapshot and one day filled storage.
  • Correctness is a sweep, never a modelA differential sweep compares your code with a correct implementation on generated inputs. A model once graded a correct solution as failing.
  • The bound never sees your codeThe bound is worked out from the statement alone, so it never sees your code and cannot echo a slow solution. Every problem file stores one; 153 are stamped as written by a local model.
  • Local-first state, encrypted syncChanges land in the browser first, then sync as encrypted revisions. Models run locally on Ollama; on the live path the one exception is the free-tier Gemini oracle.

Open questions

  • Vercel Sandbox plan: the readme (lines 79-85) infers Hobby from the 12-function cap; the owner's row says verify
  • Sandbox usage: monthly Active Central processing unit — The main chip that executes a computer's instructions. and Gigabyte — A billion bytes of data; storage is priced per gigabyte per month.-hours are not measured
  • Neon: the drill's share of Compute unit — The unit a serverless database bills its processing time in; one unit-hour is one unit running for one hour.-hours is not measured
  • Edge requests: the usage Application Programming Interface — A defined way for one program to request data or actions from another. is Pro-only, so there is no month-to-date count
  • Gemini billing: whether the key's project has a billing account is not recorded