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
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. ⌘↵ runs these.
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.
function delayedGreeting(name: string, delayMs: number): Promise<string> {
return new Promise((resolve) => {
setTimeout(() => {
resolve(`Hello, ${name}!`)
}, delayMs)
})
}- passed: resolves with greeting after delay
- passed: works with different names
- 2 passed (2.4s)
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.