Jingle Family
Multi-tenant Christmas elf universe
An excuse to push multi-tenant Next.js routing as far as it would go — six themed brands out of one codebase.
One day in April 2025 I said the phrase “jam my jingle” out loud and then immediately said “now I just have to decide whether I want to start a brand called Jam My Jingle or a brand called Jammy Jingle.” A year later there is a fictional Christmas elf family living on the internet at six different domains, each with their own personality, and I still can’t defend why except that it was fun and once you decide to give four imaginary elves their own websites the problem becomes interesting.
One Next.js codebase, one deploy, six domains — jammyjingle.com, jennyjingle.com, jimmyjingle.com, jonnyjingle.com for the four characters, jinglefamily.com as the family landing page, and manage.jinglefamily.com as the management console. Each character site has its own theme, typography, color palette, hero copy, and Instagram handle, but they share a component library, a design system, and a deployment. Routes resolve per-domain at the middleware layer — the same /about page renders four different “about me” pages depending on which elf’s domain you arrived at, and the same /posts/[slug] handles all four content feeds. Underneath that: a twenty-five-table Postgres schema backing each character with a five-thousand-word biography, traits, routines, pet peeves, and a daily-updating “demeanor” field; 161 AI-generated images across OpenAI gpt-image-1 and Gemini Imagen 4; and an ElevenLabs voice clone per sibling — Jammy gravelly and deadpan, Jenny warm and bright, Jimmy fast and enthusiastic, Jonny low and dry, all tuned to the same Upper Midwest accent.
The technical content under the glitter is the multi-tenant pattern itself, and it’s surprisingly reusable. It’s identical to how you’d build a SaaS that gives every customer a custom domain — one codebase, per-domain theming, a shared component library, and a management console at a meta-domain. Four imaginary elves are just a funnier test case than “ACME Corp” and “Widgets Inc.” The database used to live on AWS RDS; it’s on Furnace’s Postgres now, cheaper by about eight bucks a month and one fewer public-internet credential to manage. And “if I gotta intrusively jam my jingle into somebody’s ear drum to get my message delivered, I will do so.”