About

A record of how you learned it, not just that you did

Leetly is a study tracker for interview preparation. It exists because a solved-problem count says almost nothing about whether you could solve it again next week.

Why it exists

Most trackers answer one question: how many problems have you done. That number goes up whether or not you understood anything, and it keeps going up long after the understanding has faded.

The useful questions are harder. Which problems did you struggle with? What kind of mistake do you keep making? Which of the things you solved two months ago could you still solve today? Leetly records enough detail to answer those.

What it does

Attempt tracking

Outcome, language, time taken, and what went wrong — recorded for every attempt, not just the one that passed.

Spaced repetition

Solved problems get a review schedule based on the FSRS algorithm, so revision is timed rather than guessed.

Analytics

Streaks, solve rates by difficulty, and an activity heatmap covering the last year of practice.

Mistake patterns

Categorised failures — off-by-one, wrong pattern, missed edge case — aggregated so the recurring ones surface.

Problem lists

Group problems by topic, company, or study goal, and see how much of each list is genuinely finished.

Notes

Markdown notes with syntax highlighting, attached to the problem they belong to.

How it is built

A Spring Boot API backed by PostgreSQL with schema managed by Flyway, and a Next.js frontend using the App Router. Authentication is token-based: short-lived access tokens held in memory, with rotating refresh tokens. Both applications are containerised and deployed to a VPS behind Caddy.

Every resource is scoped to its owner at the query level rather than checked after loading, so there is no unscoped query available to call by mistake.

Who made it

Built by Atin Roy. The source is on GitHub.