gudetimes1234/gleamdrill

Gleam

2

129 commits

updated Oct 6, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built a spaced-repetition drill for the NeetCode 150 that actually runs your code (r/SideProject)

I've been a software engineer for 13 years, and every time I go back to interviewing I end up relearning the same problems. Reading solutions doesn't stick. A week later they're gone. Anki with cloze cards can probably do this already. I just hate the way Anki looks and feels so much I can't do it.…

2

Oct 6, 2026

README

GleamDrill

Spaced-repetition drilling for algorithm problems — type the solution from memory, run it against real tests, grade yourself, and let FSRS decide when it comes back.

gleamdrill.com · no account needed

CI MIT Built with Gleam Sponsor

A Python drill: prompt and hint ladder on the left, the editor in the middle, your code diffed against the reference solution on the right, four cases green below

What it is

The NeetCode 150 as an Anki deck, in five languages. Solve each problem in a real editor against a real test harness, grade yourself Again/Hard/Good/Easy, and FSRS-6 schedules the next review. Gleam, Python and TypeScript run in the browser; Elixir and Go run sandboxed on the server. Works as a guest, offline, on a phone; an account syncs progress. Built end to end in Gleam (Lustre + Wisp, scheduler shared between them).

Quick start

Use it: https://gleamdrill.com.

Run it:

git clone https://github.com/gudetimes1234/gleamdrill.git && cd gleamdrill
cp .env.example .env            # set SECRET_KEY_BASE: openssl rand -hex 48
make run                        # docker compose up -d --build
open http://localhost:8080

Content

DeckDrillsRuns
NeetCode 150 — Python, Gleam, TypeScript150 each, 2+ solutions per problembrowser
NeetCode 150 — Elixir, Go150 each, 2+ solutions per problemserver sandbox
Gleam Language Tour63 lessonsbrowser, not scheduled
System Design20 multiple-choice + exam modeself-graded
System Design Board6 component-selection boards, 36-piece paletteauto-graded

Every drill is a runnable file under drills/ with its harness beside it; make verify checks every solution. Authoring conventions: docs/design.md.

Development

Gleam 1.18.1, Erlang/OTP 27, bun 1.3.14, Postgres 13+; python3, elixir, go for the verifiers. make check-versions confirms pins.

make dev           # frontend :1234 + backend :1637
make build         # regenerate content, bundle workers, build dist/
make bundle        # dist/ only, no content regeneration — what the web image runs
make verify        # every solution + scheduler + app tests
make e2e           # real browser against built app + backend
make check-format  # gleam format --check, all four projects

Layout: src/ Lustre app, server/ Wisp backend, fsrs/ and wire/ shared between both targets, drills/ content. dist/ is build output, not committed — run make build once before make e2e, make run or make serve-dist, which all serve it. Why it is shaped this way, and how it deploys: docs/design.md.

Code audit

tools/jev_audit.py asks Jev the same rubric about every first-party Gleam file — duplication, complexity, error handling, naming, risk if silently wrong — and ranks the answers. It needs TYPESAFE_API_KEY and network, so it is not part of make verify.

tools/jev_audit.py fetch --dry-run   # what would be asked, no network
make audit                           # fetch, then the ranked list
tools/jev_audit.py explain src/gleamdrill/model.gleam
tools/jev_audit.py deep --top 10     # follow-up pass on the worst-ranked files

Answers are cached under build/jev_audit/ by content hash: a re-run only pays for files that changed, and re-weighting in WEIGHTS costs nothing. The output is a ranked reading list, not a verdict — every row cites a path so it can be checked by hand.

Contributing

Add a solution + harness under drills/<language>/, a note in drills/notes/, a hint ladder in drills/approaches/, run make verify, open a PR.

Support

Free, open source, no account wall. Server costs: GitHub Sponsors · Liberapay.

License

MIT. Tour lessons under drills/tour/ are Apache-2.0 from gleam-lang/language-tour; vendored runtimes keep their own licences.

gudetimes1234/gleamdrill

Gleam

2

129 commits

updated Oct 6, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built a spaced-repetition drill for the NeetCode 150 that actually runs your code (r/SideProject)

I've been a software engineer for 13 years, and every time I go back to interviewing I end up relearning the same problems. Reading solutions doesn't stick. A week later they're gone. Anki with cloze cards can probably do this already. I just hate the way Anki looks and feels so much I can't do it.…

2

Oct 6, 2026

README

GleamDrill

Spaced-repetition drilling for algorithm problems — type the solution from memory, run it against real tests, grade yourself, and let FSRS decide when it comes back.

gleamdrill.com · no account needed

CI MIT Built with Gleam Sponsor

A Python drill: prompt and hint ladder on the left, the editor in the middle, your code diffed against the reference solution on the right, four cases green below

What it is

The NeetCode 150 as an Anki deck, in five languages. Solve each problem in a real editor against a real test harness, grade yourself Again/Hard/Good/Easy, and FSRS-6 schedules the next review. Gleam, Python and TypeScript run in the browser; Elixir and Go run sandboxed on the server. Works as a guest, offline, on a phone; an account syncs progress. Built end to end in Gleam (Lustre + Wisp, scheduler shared between them).

Quick start

Use it: https://gleamdrill.com.

Run it:

git clone https://github.com/gudetimes1234/gleamdrill.git && cd gleamdrill
cp .env.example .env            # set SECRET_KEY_BASE: openssl rand -hex 48
make run                        # docker compose up -d --build
open http://localhost:8080

Content

DeckDrillsRuns
NeetCode 150 — Python, Gleam, TypeScript150 each, 2+ solutions per problembrowser
NeetCode 150 — Elixir, Go150 each, 2+ solutions per problemserver sandbox
Gleam Language Tour63 lessonsbrowser, not scheduled
System Design20 multiple-choice + exam modeself-graded
System Design Board6 component-selection boards, 36-piece paletteauto-graded

Every drill is a runnable file under drills/ with its harness beside it; make verify checks every solution. Authoring conventions: docs/design.md.

Development

Gleam 1.18.1, Erlang/OTP 27, bun 1.3.14, Postgres 13+; python3, elixir, go for the verifiers. make check-versions confirms pins.

make dev           # frontend :1234 + backend :1637
make build         # regenerate content, bundle workers, build dist/
make bundle        # dist/ only, no content regeneration — what the web image runs
make verify        # every solution + scheduler + app tests
make e2e           # real browser against built app + backend
make check-format  # gleam format --check, all four projects

Layout: src/ Lustre app, server/ Wisp backend, fsrs/ and wire/ shared between both targets, drills/ content. dist/ is build output, not committed — run make build once before make e2e, make run or make serve-dist, which all serve it. Why it is shaped this way, and how it deploys: docs/design.md.

Code audit

tools/jev_audit.py asks Jev the same rubric about every first-party Gleam file — duplication, complexity, error handling, naming, risk if silently wrong — and ranks the answers. It needs TYPESAFE_API_KEY and network, so it is not part of make verify.

tools/jev_audit.py fetch --dry-run   # what would be asked, no network
make audit                           # fetch, then the ranked list
tools/jev_audit.py explain src/gleamdrill/model.gleam
tools/jev_audit.py deep --top 10     # follow-up pass on the worst-ranked files

Answers are cached under build/jev_audit/ by content hash: a re-run only pays for files that changed, and re-weighting in WEIGHTS costs nothing. The output is a ranked reading list, not a verdict — every row cites a path so it can be checked by hand.

Contributing

Add a solution + harness under drills/<language>/, a note in drills/notes/, a hint ladder in drills/approaches/, run make verify, open a PR.

Support

Free, open source, no account wall. Server costs: GitHub Sponsors · Liberapay.

License

MIT. Tour lessons under drills/tour/ are Apache-2.0 from gleam-lang/language-tour; vendored runtimes keep their own licences.