projects · each on its own subdomain

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.

rust · tui · dev stack manager

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
pulse.frkhd.com
rust · sql linter · 5 dialects

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
drift.frkhd.com
pomodoro · tui · menubar

tempo

pretty focus timer for the terminal. tags, heatmap, streaks, macos menubar companion.

● uni 12:34
╭─────────────╮
│  ██░░░  52% │
╰─────────────╯
tempo.frkhd.com
spaced repetition · markdown · study

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]
cram.frkhd.com
read-later · threads · sqlite

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
rabbitmark.frkhd.com
llm · compare · dev tool

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
llmdiff.frkhd.com
typing test · code · practice

typesprint

monkeytype for developers. real code snippets instead of pangrams about foxes.

async def fetch(url):
    return await get(url)
72wpm · 96% · 27s
typesprint.frkhd.com
notes · ttl · auto-delete

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~
ephemeral.frkhd.com
git · commit messages · no llm

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
commitgen.frkhd.com
todo · brutalist · 3 max

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
dolater.frkhd.com
goals · dag · constellation

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
goalgraph.frkhd.com
transformer · training · from scratch

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 ...
nanolm.frkhd.com
graphics · monte carlo · 1000 lines c

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
raytrace1k.frkhd.com
compiler · jit · x86-64

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
jitvm.frkhd.com
quantum · state vector · simulator

qubit

20-qubit circuit simulator in numpy. shor factors 15. grover in √n. vqe for small molecules. no qiskit.

|ψ⟩ = (|00⟩+|11⟩)/√2
┌───┐
┤ H ├──●──
└───┘  │
──────X──
qubit.frkhd.com
protein folding · monte carlo · rust

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
foldlab.frkhd.com
os · x86 · boots in qemu

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
nanokern.frkhd.com
email · imap · vim bindings

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
mailsift.frkhd.com
secrets · one-time · zero-knowledge

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.
shh.frkhd.com
music · terminal · fft visualizer

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
spin.frkhd.com
chess engine · zig · ~2100 elo

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
chessdrift.frkhd.com
blog engine · plain text · static

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]
ttyblog.frkhd.com

smaller clis on github

no dedicated landing. just well-documented repos.