2026
CodeLock
A focus lock for Windows. When your timer runs out, the screen locks, and the way back in is solving a coding problem — correctly, and fast.
Every focus app has a dismiss button, and the person it is blocking can always reach it. CodeLock takes the button away. When the timer ends, the screen locks and hands you a programming problem chosen at that moment, so there is nothing to prepare in advance. It is a commitment device, not a prison: the write-up lists the ways around it.
I built every part of it myself: the service that keeps the timers and decides when you have earned your way out, the sandbox that runs your code safely, the lock screen, and the desktop app that actually holds the machine. Being right is not enough. Your answer also has to be fast, and a slow one keeps you locked and tells you how far off you were.
What is proven so far: 695 problems, each checked in six languages before it can be used; a faked unlock rejected against a live lock; and a public list of twelve ways to escape the lock, including the three that work. It is a personal tool, not a product yet, and the write-up keeps every limit next to the claim.
How the speed rule and the lock work
Making “fast enough” fair was most of the work. Every language starts up at a different speed, so each problem carries a time budget per language rather than one number for all. You get the better of two runs, and a small margin is added on top so a noisy measurement cannot lock you out unfairly.
The app is never allowed to decide it is unlocked. Only the server can say so, by signing a short note after your code passes and the speed check clears, and the desktop app checks that signature in a place the screen cannot touch. While writing this up I found a hole: a genuine note from one problem could open a different lock for five minutes. I closed it on 2 September 2026. That kind of bug only shows up by reading the code, not by using the app.
Checks that run on the user's own screen are suggestions. The real decision belongs on the server — and what the lock has actually survived is written down, route by route, including the rows that prove nothing.
- TypeScript
- Node 24
- Express
- Prisma
- Postgres
- Next.js 16
- React 19
- Electron
- Expo
- Docker

