Lab
A recipe site with ingredient scaling, nutrition tracking, and a cooking mode that keeps the screen on. Recipe apps have too many ads and none of them scale fractions correctly. Recipes are markdown files; Keystatic is the editor.
A reference catalogue of equipment across Anytime Fitness gym locations in Singapore. Built from personal frustration with arriving at a gym that didn't have the rack I needed. Equipment is hand-curated as JSON and grouped by function — cables together regardless of brand, squat options as a distinct category.
A personal activity analytics dashboard built on my gym visit data. The gym app gives me PDFs of visit history but no charts. This parses and visualises the data: monthly trends, time-of-day heatmaps, membership pauses. Started as gymlog; renamed when the scope expanded to include yoga, swimming, and other activities beyond the gym.
A deterministic workout generator built for one athlete: me. Workout apps optimise for everyone, which means they work for no one in particular. This one encodes a specific rotation, equipment access, and fatigue logic. Fully client-side, no API — the generation is a 6-position cycle with 14-day memory and a periodisation phase system.
Anyone can ship an app right now. Not everyone governs what they've built.
Schema owns the data model, design tokens own the visual layer, docs own the workflow. Anything duplicated drifts.
Stale references and obsolete docs mislead more than missing ones. Gaps compound quietly.
Remove structural weaknesses before they become load-bearing. Good systems get easier to change over time, not harder.
Data shape issues belong in the schema, not patched in the UI. Style decisions belong in the design system, not inline.
A precise MVP with an explicit deferred list prevents accumulation. What you leave out matters as much as what you ship.