A CMS written in the language it serves
11 January 2026
The CMS is 140 files now, and the interesting thing about them is that none of them are special. Thirteen modules, a large set of themes, nineteen page transitions and five dashboard widgets, all ordinary .phlo with the same routes, props and views any application uses.
A theme is one style block:
<style ns=theme.neon>
:root {
$background: #000000
$primary: #00ffea
A widget is a view and a script. A transition is a style block. There is no plugin API to learn, no registration step, no manifest describing what you contributed, because being a file in the tree is the registration.
That is the practical benefit of a platform where the tooling and the applications share a language. Extending the CMS uses the knowledge you already have from building an app on it, and reading its source is a way of learning the language rather than a detour into a second one.
The CRUD layer itself is schema-driven, resolving a model and a mode into the class that renders it, so a list, a record and a form are three views of one declaration rather than three things to write.
The cost of making something this cheap to add is that plenty gets added. A hundred themes is a good problem, and the answer to it is curation rather than a harder API.