Build notes
Four products and this site are built and maintained by one person, which makes most engineering decisions here decisions about what not to build. These posts are the record of some of them.
They are written for the version of me that has to change this code in six months, so they are specific: the constraint that forced a design, the approach that was tried first and why it failed, the measurement that settled an argument. That makes them narrower than the guides elsewhere on this blog and more useful if you are building something comparable.
The site itself is in scope too. It is a static Astro build with a strict content security policy, and the notes on its search and performance work include the mistakes, because a widget that silently does nothing turned out to be the recognisable shape of a CSP error here.
4 posts on this
- Making a Website AI Agents Can Actually Read: the SEO/GEO Overhaul of fulinlabs.com
Why fulinlabs.com was rebuilt from a client-rendered React SPA to a static Astro site, and what that changes for Google, Bing, and AI agents like ChatGPT and Claude.
- Why I Build in Public: the Fulin Labs Approach to Side Projects
Why Fulin Labs ships small, standalone tools instead of one big product, and why the build process is documented publicly instead of kept private.
- Building a URL Shortener With Real-Time Analytics: Architecture Notes on ShortLink
Why most free URL shorteners skimp on analytics, and the design decisions behind ShortLink's real-time click tracking, custom aliases, and API.
- Learning Chinese Through Daily Micro-Games: the Design of HSK Studio
Why HSK Studio is built as a five-minute daily game instead of a full course, and how the built-in dictionary and text reader fit into that design.