A CMS written in the language it serves
11-01-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.