Notes, guides and patches

Developer

Everything that applies across the projects rather than to one of them: how they are built, how they are installed, what changed recently, and the house rules that keep seven repositories from drifting apart.

18 Sep 2026Vixeo

Caching metadata before the first frame

Vixeo's library grid flashed empty on a cold start over a slow link, which reads as a bug even though the data arrives a moment later. The cause was ordering: the cached index was read after the first frame rather than before it.

The fix is not a spinner. A spinner is what you add when you have accepted the wait. Reading the cache synchronously before the first paint removes the wait entirely for anyone who has opened the app before, and the network response then updates in place.

11 Sep 2026Across projects

Flutter scaffold names outlive their usefulness

Three of these projects still carry the package name the Flutter scaffold gave them: Vixeo is lumen, Musillow is music_app, Viewr matched only by accident. It is cosmetic until someone reads the source and cannot find the project they were looking for.

Renaming a Dart package touches the pubspec, the import paths and the Android application id, so it is the kind of change that wants doing once, deliberately, rather than opportunistically during a feature.

28 Aug 2026Viewr

Writing a handoff without code access produces fiction

Viewr's original recommendation handoff diagnosed a naive engine and proposed a set of fixes. Several of those fixes already existed in the codebase. The document was written without access to the code, so it described a plausible system rather than the real one.

The refinement plan that replaced it starts from what is actually in the backend and records what is done, what is real and what is worth building. That ordering is the whole difference between a plan and a guess.

19 Aug 2026Across projects

The thin-client split keeps paying for itself

EthaMail, Musillow and Viewr all put the work on a server and keep the client thin. It was not a shared decision, it just turned out the same way three times.

The payoff shows up when a second platform appears. EthaMail's Tauri and Capacitor targets are packaging exercises rather than rewrites, because there is no mail logic in the client to port.