Alex CMS
A Next.js CMS with a fully dynamic content-type registry — no hardcoded post models — plus a journey-based homepage, an orchestrator workflow, and per-item content scoring.
- Category
- cms_web
- Tech stack
- Next.js, TypeScript, MySQL, mysql2
- Metrics
- 8 content types, Homepage fully CMS-driven
- Role
- Design + build
Content
Content types (Discoveries, Projects, Guides, Resources, Build Lab, Signals, Proof, Builds, Thinking, Experiments, Connect, Alex OS, Notes) are rows in a content_types table, not TypeScript models. Fields, validation, and display rules are also data. The homepage, navigation, and journey sections are resolved from that same data at request time — there's no code path that assumes a fixed set of content types.
Problem
A hand-coded content model means every new kind of content needs a schema migration and new frontend code. That doesn't scale for a site that keeps changing shape.
Architecture
Next.js 15 app with a MySQL-backed dynamic registry (content_types, content_type_fields, content_items), a six-stage orchestrator (Create/Improve/Verify/Publish/Learn/Automate), and journey/homepage config also stored as data (journeys, section_settings).
Decisions
Deliberately excluded Postgres/Redis/a vector DB from the CMS's own stack to keep the system of record simple — those live in Alex OS only, where they're genuinely needed for embeddings.
Limitations
Some content types created early on (Discoveries, Projects, Guides, Resources) were archived when the newer Experience types were introduced and had thin or empty field schemas until this content pass revived them.
Next steps
Keep building out real content across the revived types; tighten navigation to reflect all public content types.
Outcome
Fully dynamic content model with zero hardcoded types.