Skip to content

practice that sticks

Keep your hands from forgetting.

Read code that is almost finished. Supply the missing pieces. Real tests run in a sandbox and tell you immediately whether you were right.

Then it schedules the ones you are starting to lose, and brings them back before you do.

131 exercises · 3 language tracks · nothing to install

fib.tstypescript
function fib(n: number): number {
  if (n <= 1) return n
  return fib(n - ) + fib(n - )
}

0 of 2 filled

Try it here in the page — the answers are 1 and 2, in either order. The rest of the site runs the real suite in a sandbox.

the editor

What a session looks like.

An exercise from the TypeScript track, one run in. The blanks are the only thing you type; the tests decide.

typescript / async-patterns / basic-promise-creation 3 of 3 filled
function delayedGreeting(name: string, delayMs: number): Promise<string> {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(`Hello, ${name}!`)
    }, delayMs)
  })
}
test output
  • passed: resolves with greeting after delay
  • passed: works with different names
  • 2 passed (2.4s)
Passednext review · 3 days
testsThe grade is the suite
Every exercise ships with its own tests. What you see after a run is the runner's output — pass, fail, and why.
sandboxRuns are isolated
Each submission gets its own sandboxed microVM, created for that run, destroyed after it, and cut off at a hard time limit.
schedulePassing sets a return date
A pass moves the exercise out — a day, then three, then longer as it holds. A fail brings it back tomorrow.

the loop

Four steps, repeated until the concept stops needing them.

  1. 01read

    Start from working code

    Every exercise is a real, complete implementation with a few pieces removed. You are never staring at an empty file.

  2. 02fill

    Supply what is missing

    Blanks sit inline in the editor. Tab moves between them. The gaps are chosen to be the part of the concept you actually have to know.

  3. 03run

    Run the real test suite

    Your answer executes in a sandboxed microVM created for that submission, destroyed after it, and cut off at a hard time limit. The output you see is the test runner’s.

  4. 04return

    Meet it again before you forget

    Passing schedules the exercise forward on an SM-2 interval. Rate the recall honestly and the schedule adapts.

tracks

3 languages, each ordered from basics to the parts you forget first.

Alongside the blanks, every track carries standalone challenges, plus code-review, specification, and build-the-tool work: reading code you did not write, pinning a request down, and automating the check.

Learning paths order the challenges into ladders — browse the paths.

pricing

You pay for what costs money to run.

Every submission runs your code in its own microVM. That is the only part of this with a real cost, so it is the only thing the plans differ on.

Free

$0forever

Enough to find out whether this works for you, without a card.

  • Every track and every exercise
  • Real tests in a sandbox on each submission
  • 10 submissions, 20 runs, and 3 explanations a day
  • Spaced repetition on what you have finished

Pro

$12per month

For when you hit the daily limit and want to keep going.

MXN 219 · EUR 11 · local currency elsewhere

  • Everything in Free
  • No daily submission, run, or explanation cap
  • Explanations of failed submissions, unmetered

start practising

Nothing to install. The account does the remembering.

Exercises run in the browser against a microVM that exists for one submission and is destroyed after it. What persists is yours: where you are, and when each exercise comes back.

what an account holds
progress
Where you are in every track and learning path, per concept.
schedule
A review date per exercise, pushed out on every pass and reset by a fail.
record
Streaks and achievements as the practice accumulates.