Leàna CMS
Custom Headless CMS · 2020
Screenshots
Overview
A reusable content management system built from scratch to power multiple client websites and applications. The CMS allows non-technical users to manage content, media, and page structures without developer intervention.
The Challenge
Situation
Multiple clients needed content management capabilities, but existing CMS solutions (WordPress, Contentful) were either too heavy, too expensive, or didn't fit the specific workflows required.
Task
Create a lightweight, developer-friendly headless CMS that could be reused across projects, with a simple admin interface for content editors and a flexible API for developers.
My Approach
- Designed a modular content schema system that adapts to different project needs
- Built a clean admin dashboard with real-time preview and intuitive content editing
- Integrated Firebase for media storage with automatic optimization and CDN delivery
- Created comprehensive GraphQL APIs for content retrieval with filtering and pagination
Results & Impact
- CMS successfully deployed across 3+ client projects
- Reduced content update turnaround from days to minutes
- Admin users require minimal training due to intuitive interface
- Reusable architecture saved 60%+ development time on subsequent projects
Key Metrics
Headless CMS Architecture
Flow: Admin UI & Client Apps → GraphQL API → MongoDB (content) + Firebase (auth/storage/firestore) + Redis Cache + CDN
Real-time: MongoDB Change Streams + Webhooks push content updates instantly to consuming applications
Technical Highlights
Needed both real-time Firestore security rules AND fine-grained GraphQL API permissions.
Hybrid Firebase Auth + custom JWT. Single login generates both tokens. Firebase token for Firestore listeners, JWT for GraphQL. Both revoked on logout via Redis blacklist.
Seamless single sign-on, real-time + API both secured, zero latency overhead.
Content changes in CMS needed to propagate instantly to client websites without page refresh.
MongoDB as source of truth → Change Streams detect edits → Sync service transforms to minimal Firestore docs → Client onSnapshot() listeners update UI.
<500ms content propagation, delta updates for minimal bandwidth, 99.9% message delivery.
Single codebase needed to serve multiple clients with complete data isolation.
3-layer isolation: GraphQL resolvers inject tenant from JWT, MongoDB queries auto-filter by tenant, Firebase Storage folders per tenant with security rules.
Zero cross-tenant data leaks, shared infrastructure costs, easy client onboarding.
Tech Stack
Need a custom CMS for your business?
Let's discuss your project over a free discovery call.
Book a Discovery Call