Building a Resilient, Multi-Tenant CMS Platform with Elixir/Phoenix LiveView
(Note: "Project Chef" is a codename for an unlaunched commercial platform, used here to protect intellectual property.)
The Challenge: Creating a Scalable, Self-Service Platform for Non-Technical Users
Project Chef began as a technical challenge: design and build a self-service web platform that empowers small business owners—most with little to no technical background—to manage a modern, mobile-friendly website without writing a single line of code.
The challenge was multifaceted:
- Multi-Tenancy and Automation: Each food truck needed its own isolated site (with dynamic subdomains), yet all had to run off a single, shared codebase. Manual setup per truck was not an option—the platform had to scale automatically from a single tenant to hundreds.
- Simplicity Without Compromise: The core content management system (CMS) needed to be intuitive enough for non-technical users, while still offering robust flexibility in managing menus, locations, schedules, and brand themes.
- Operational Efficiency: As a solo developer, I needed to design for minimal ongoing maintenance—automated deployments, image cleanup, background jobs, and billing all had to be handled seamlessly and reliably by the application itself.
The goal was to create a profitable, low-maintenance SaaS that small business owners could adopt quickly, while keeping engineering complexity manageable through functional design.
The Solution: A Fully Automated Phoenix & Elixir-Based SaaS Foundation
I architected Project Chef as a modular Elixir/Phoenix application with a focus on functional composition, fault tolerance, and automation. This was a proving ground for Elixir's capabilities in building real-world, highly available SaaS products.
-
Multi-Tenant Architecture via Dynamic Subdomains
Each food truck operates under its own dynamic subdomain (e.g., taco-palace.chef-app.io), dynamically routed and isolated within Phoenix.
- No manual DNS or configuration steps are required—when a new food truck signs up, its dedicated subdomain goes live automatically.
- This structure allows full separation of data per tenant (strict client data isolation) while maintaining a shared, efficient runtime environment.
-
Zero-JS Content Management via LiveView
Owners manage their websites through a pure LiveView-based CMS, handling menus, pages, images, and color themes in real time.
- EasyMDE (Markdown) was integrated for rich content editing while maintaining a lightweight, server-driven architecture.
- The LiveView design ensures instant, real-time feedback and a highly interactive experience with significantly fewer moving parts compared to a traditional SPA + API approach.
-
Scalable Storage and Resilient Background Processing
Image uploads are handled by the server but immediately routed to DigitalOcean Spaces using presigned uploads, keeping application performance high and managing file costs low.
- Background tasks—such as image cleanup, schedule updates, and notifications—run reliably through Oban, leveraging Elixir's supervision trees for built-in fault tolerance and observability.
-
Operational Readiness
The application includes a robust configuration supporting separate development, staging, and production environments, and is designed for automated CI/CD deployment to Fly.io. Stripe integration handles all billing and subscription events, fully synchronized via webhooks to ensure transparent handling of the user lifecycle.
The Outcome: A Lightweight, Production-Ready Prototype
Project Chef successfully proves that modern Elixir systems can offer both powerful developer ergonomics and enterprise-grade business scalability:
- Rapid Tenant Creation: The system demonstrates the ability for food trucks to onboard in seconds with zero manual setup.
- High Reliability: Leveraging Elixir's functional nature and tools like Oban ensures the platform is resilient, self-healing, and designed for near-zero operational overhead.
- Architectural Philosophy: This project pushed my Elixir expertise deeper into multi-tenant design, LiveView UX, and operational automation, reflecting the same engineering values—functional design, composable systems, and developer empathy—I bring to every project.