Kairos CMS
Designing and building, as sole developer, a centralized headless CMS that replaces 8 separate Heroku and Strapi instances, targeting at least a 40% cut in monthly infrastructure cost.
Cliente: Novanet Studio
Periodo: May 2026 – Present
Rol: Sole Full-Stack Developer & Architect (Freelance)
Techstack: Nuxt 4 · Tailwind CSS v4 · Pinia · Nuxt UI v4 · Node.js · Express 5 · TypeScript · Drizzle ORM · PostgreSQL (Neon) · Cloudinary · Zod · JWT
Contexto
Novanet Studio runs **a dedicated Heroku and Strapi instance for every web project**, which fragments maintenance and adds infrastructure cost with each new client. Kairos CMS replaces that model with **a single centralized instance**: once content is published, it becomes instantly available behind its own URL and API key, with no extra technical work. The pilot covers the studio's **8 active client projects**, and the roadmap opens the platform to external clients in V2.
Condiciones
The entire project, from *requirements and architecture to backend, frontend, QA and deployment*, is delivered by **a single developer** with no dedicated DevOps support. The hard constraints: **PaaS native with no Docker** at any phase, **no Redis** (Neon's serverless Postgres absorbs all read load by design), all media handled by Cloudinary so that **the backend never receives or stores a binary**, and collection schemas that stay **editable at any time without DDL migrations**. Older records remain accessible and are simply flagged as *out of format*. Clerk Auth and granular roles are deliberately deferred to V2.
Solución
A strict **4-layer architecture** keeps the core decoupled: Nuxt 4 for presentation, Express 5 for application logic, Drizzle ORM for data access and PostgreSQL 16 on Neon for persistence. Content is modeled as projects that hold collections, each bound to a **unique, irrevocable API key**, with sub-collections nested to any depth. Schemas persist as **JSONB instead of relational tables**, so the visual field builder can evolve them with **zero DDL migrations** while older records are preserved and flagged as *out of format*. The **endpoint kill switch** reads each collection's state from the database on every request, deliberately uncached, so a change takes effect in **under 2 seconds on every dyno**. Media travels **straight from the frontend to Cloudinary**, keeping the backend stateless. **Global backups run in a worker thread** that never blocks the event loop, and MVP auth is a self-hosted **JWT and bcrypt** session that defers Clerk's roles model to V2.
Herramientas
- Nuxt 4 + Tailwind CSS v4 + Pinia + Nuxt UI v4
- Full-stack Vue 3 framework with a 110+ component UI library. *Frictionless setup* compared to PrimeVue (heavier) or shadcn-vue (requires copying components in).
- Node.js 20 LTS + Express 5 + TypeScript
- Express 5's native async/await sends rejected promises straight to the error middleware. Chosen over Fastify (*no clear win here*) and NestJS (*unnecessary DI overhead*).
- Drizzle ORM
- TypeScript-first with **native JSONB support** and no external binary, avoiding Prisma's 150 to 300 ms Rust engine cold start on Heroku.
- PostgreSQL 16 on Neon (serverless)
- **Serverless Postgres** with usage-based cost. Chosen over AWS RDS (fixed instances) and Supabase (abstraction layers this project doesn't need).
- JWT (jsonwebtoken + bcrypt)
- Self-hosted 8-hour session, *1 to 2 weeks faster to ship* than Clerk Auth for a pilot with 1 to 3 internal users.
- Netlify + Heroku
- Zero-config CI/CD that reuses the studio's existing accounts and infrastructure, within the required us-east-1/Atlanta region.
Funcionalidades clave
- Multi-project hierarchical architecture
- Projects hold collections, each behind a **unique, irrevocable API key**, with sub-collections nested to any depth and full data isolation between projects.
- Visual field builder
- Six field types editable at any time with *zero DDL migrations*. Records that no longer match the schema are flagged automatically, never altered or deleted.
- One-click endpoint kill switch
- Returns 403/404 in **under 2 seconds** and logs every change in the audit trail.
- Direct-to-Cloudinary media uploads
- Client-side validation of size, dimensions and aspect ratio. *No binary ever touches the server.*
- Non-blocking global backups
- A worker thread exports every project and collection without interrupting active API traffic.
- Markdown editor with live preview
- Side-by-side editing built for non-technical editors, backed by an internal audit log of administrative actions.
Resultados e impacto
- In active development
- Requirements and architecture work began in May 2026. Production results are not yet available.
- Concrete launch targets
- At least a **40% cut in monthly infrastructure cost** by month 3, kill switch effect in under 2 seconds, and a full centralized backup in under 3 minutes.
- Pilot across 8 client projects
- Consolidates 8 separate Heroku and Strapi instances into a single CMS instance.
Galería



