small things i built. each with its own vibe.
hover a card to see a hint of the aesthetic. click to visit the full page. none of them are gigantic. that's the point.
pulse
one window for every local dev server. probes, port watch, traffic tap, ascii sentinels.
● api 200 · 14ms ● web 200 · 38ms ◐ redis starting ✗ db exit 139
drift
sql linter and formatter. 70 rules, postgres/mysql/sqlite/bigquery/ansi. single binary, 50-200x faster than sqlfluff.
select * from users
^^^^^^ select-star
where email like '%x'
^^^^ wildcard-first
tempo
pretty focus timer for the terminal. tags, heatmap, streaks, macos menubar companion.
● uni 12:34 ╭─────────────╮ │ ██░░░ 52% │ ╰─────────────╯
cram
spaced-repetition flashcards from a plain markdown file. sm-2 algorithm. built for students.
Q: derivative of x^2? (press space) A: 2x [hard] [ok] [easy]
rabbitmark
bookmarks that remember why you saved them and which rabbit hole they belong to.
▸ postgres wal internals 2 items · 4d ago ▸ sqlite fts indexing 5 items · 1w ago
llmdiff
send one prompt to openai and anthropic. see both answers side by side with tokens, latency, cost.
gpt-4o claude-3.5 84t · 2.1s 67t · 1.4s $0.00021 $0.00018
typesprint
monkeytype for developers. real code snippets instead of pangrams about foxes.
async def fetch(url):
return await get(url)
72wpm · 96% · 27s
ephemeral
notes that disappear on a timer. because not every thought deserves to be kept forever.
23h · check tz handling 2h · reply to morgan 3m · maybe valkey? ~fading~
commitgen
reads your staged diff and suggests a conventional-commit message. rule-based, no api calls.
$ commitgen feat(auth): add login flow · new login_user() · imports bcrypt
dolater
a todo list that won't let you add a fourth thing. three slots. finish or drop.
1 · fix auth race 2 · reply to morgan 3 · finish cram readme ! blocked — list is full
goalgraph
track big goals as a graph of dependencies. see what's blocked, know what you can actually work on.
✦ ship the app
└─ ✦ finish backend
└─ ★ pick a db
← you are here
nanolm
10m-param language model trained by hand. bpe, rotary attention, adamw, a tiny rlhf pass. no transformers import.
step 04300/20000 loss 2.847 lr 3.0e-4 tok/s 38217 sampling @ T=0.8 ...
raytrace1k
physically-based pathtracer in a single c file. bvh, cook-torrance, mis, russian roulette. no deps but libm.
triangles 12418 bvh depth 22 █████░░░░ 68% 49.2 Mray/s
jitvm
toy language with a bytecode vm and a one-pass x86-64 jit. fib(40) 38x faster than cpython. no llvm.
0004 iconst 2 0005 lt cmp rdi, rax jge .L1 mov rax, rdi
qubit
20-qubit circuit simulator in numpy. shor factors 15. grover in √n. vqe for small molecules. no qiskit.
|ψ⟩ = (|00⟩+|11⟩)/√2 ┌───┐ ┤ H ├──●── └───┘ │ ──────X──
foldlab
ab-initio folding sandbox. simulated annealing + metropolis mc on hp lattice. 40m moves/sec. pdb output.
move 1e6 E -12 T 1.42 move 1e7 E -14 T 0.62 ○─●─●─○ ● . . ● △G = -14 kT
nanokern
multitasking x86 kernel in ~3000 lines of c + asm. protected mode, paging, scheduler, syscalls. fits in my head.
entering protected mode [ok] paging (cr0 pg) [ok] spawning init [ok] nanokern 0.3.0 · 0.04s
mailsift
terminal email client. imap sync, notmuch-style tags, quits with :q like god intended.
INBOX (1847) 14:03 felix@ re: friday? 12:44 github [tempo] pr... *08:51 mom recipe
shh
share a secret once. encrypted in your browser, server never sees plaintext. first open burns it.
you type: sk-live_A3kQ... ↓ encrypt shh.frkhd.com/x/gf83hdL2 ↓ friend opens next refresh: 404.
spin
terminal music player with an fft spectrum and vu meters. winamp energy, modern taste.
♫ mingus · pork pie hat 04:52 / 05:44 85% L ▂▃▅▆█▇▅▃▂▁▂▃▄▅▆▇▆ vu ▮▮▮▮▮▮▮▮░ -6db
chessdrift
uci chess engine in zig. alpha-beta, iterative deepening, magic bitboards. it beats me 41/50.
depth 14 in 3.8s best: Nxd5 eval +0.42 pv: Nxd5 exd5 Qxd5 nps: 748k
ttyblog
a blog engine that only reads .txt files. first line is the title. that's it.
2026-04-19 · small tools plain text is obsolete-proof. the unix philosophy holds. [1/3]
smaller clis on github
no dedicated landing. just well-documented repos.