Today I forked Spernakit 3.31.0 and started replacing its React frontend.

That probably needs some explanation. Last year I wrote about how the PowerShell, Pode, and htmx stack brought me back to application development, then started wearing me down. Simple pages were pleasant. Multi-panel dashboards, drill-downs, filters, live metrics, and several parts of a page updating at once turned into a mess of swap targets and DOM IDs. TodoMVC was the last test. React followed, finally clicked while I built KeyStrike, and became the frontend in Spernakit.

I haven’t forgotten any of that. I also have not used htmx 4, and it has been long enough that I wanted to see what changed.

This time I’m keeping Bun and Elysia on the server, along with the service and data boundaries developed in the React version. Pages and fragments are rendered as typed TSX on the server, then htmx handles navigation, form submissions, and targeted updates in the browser. Server-sent events carry the live notifications and dashboard refreshes. A small browser module looks after lifecycle work that does not belong in an HTML response.

The old applications had accumulated endpoints and fragments without much of an application layer underneath them. Having that layer already in place seems to be helping. I can prepare a view on the server and send the HTML, with much less coordination between fragments than I remember.

Strict content security policy came first because every later screen has to live inside it, and then I converted the application in roughly the order somebody uses it: login and public authentication, sessions, preferences, profile, account security, notifications, files, workspaces, dashboards, and the administrative areas. By the end of the day the fork had 33 commits and called itself version 0.1.0. React and Vite are still in the tree as a parity reference while I build the replacement gates.

There is another reason for doing this. Giving it the same product shape on a materially different frontend should produce useful training data.

I don’t know whether this becomes Spernakit 4, a separate template line, or an experiment I eventually delete. The React version is still the one that ships. This fork hasn’t been through a full audit yet and actually looks pretty rough. That part I expected.