a flightlesstux project × claude code
Self-hosted. Gmail-inspired. Built entirely with Claude.
the problem
100%
data stays on your machine
vision
stack
one command to run it all → docker compose up -d
enter claude
accounts, emails, folders, labels, FTS5 virtual table for instant search…
otplib + @simplewebauthn/server + Duo Web SDK v4. Each layer optional, all stackable, session cookies HTTPOnly + Strict.
what we built
architecture decision
▸ Sync Strategy
emailbody:{id})debugging story
BUG #1 — swatch killing theme
Dark swatches (Slate, Midnight, Forest) addedhtml.dark themselves — then theme toggle tried to undo it but the swatch handler was running after.
BUG #2 — blocking script race
The inline<script> in layout.tsx added .dark for dark swatches on page load — overriding the theme preference already set.
BUG #3 — useEffect ordering
applyTheme() ran before applyThemeSwatch() — swatch always won.
FIX — separation of concerns
applyThemeSwatch → only sets --swatch-bgapplyTheme → sole authority on html.dark.dark injection— flightlesstux
CI / security
7 PARALLEL SECURITY JOBS
CI GATES (all 3 required)
by the numbers
COVERAGE TARGETS
AUTH LAYERS
what's next
COMING SOON
WHY BUILD WITH CLAUDE?
Self-hosted. Encrypted. Built with Claude.
made by flightlesstux × claude sonnet