Hearthlight/Q1 2026/ongoing/346K LOC/solo build

// III · The Empress · licensed gold-leaf deck on forest green
A meal planner with a witchy twist.
Solo build, 346K lines, three AI agents.
346K
Lines of code
90
Prisma models
294
API routes
22
Major Arcana, drawn
// the witchy layer is not a marketing skin
Every dish in the library has an element, a planet, a moon phase, and a list of intentions. Twenty-two hand-painted Majors. Eight spread modes. The data model treats correspondence as a real domain.

// XVIII · The Moon
Build a meal planner that doesn’t feel like Silicon Valley.
Most meal planning apps treat cooking like an inventory management problem. They feel like spreadsheets with rounded corners that sell a productivity feeling instead of a kitchen.
Hearthlight started as recipe management and grew a digital grimoire. It became a household operating system that takes seasonality, intention, and the moon seriously alongside the practical work of feeding people. 90 Prisma models, 294 API routes, three subscription tiers, three specialized AI agents, all built solo.
“Save Hours. Reduce Waste. Cook with Magic.”
// hearthlight tagline
From the wordmark to the warehouse, plus the grimoire.
Brand identity
Witchy household OS, not productivity SaaS. Forum + Cormorant + Spectral type stack. Forest green, copper, antique gold.
Marketing site
Landing, pricing, blog, FAQ. Sparkles badge, tarot cascade hero, voice that does not sound like Silicon Valley.
Recipe library
Hundreds of recipes with prep, cook, servings, difficulty, and magical correspondences per dish.
Daily tarot integration
Eight-spread tarot system. Daily card draws inform meal recommendations and energy journaling.
Moon phase + sabbat planning
Eight phases tracked via astronomy-engine + suncalc. Sabbat cycles. Planetary hours.
AI meal planning
Vercel AI SDK. GPT-4 for plan generation, GPT-4 Mini for chat, Vision API for receipt OCR.
Pantry + inventory
Per-household inventory with expiry tracking. "What can I make?" matches against recipes by inventory pct.
Kroger price integration
Real-time pricing via Kroger API. Cross-store price comparison. Cheapest-option highlighting. Deep-link checkout.
Receipt OCR
OpenAI Vision extracts line items from scanned receipts. Auto-classify by category. Inventory + price history updates.
Shopping list
Auto-populated from meal plan. CSV export, email export, printer-optimized print. Per-store totals.
Stripe + 3 tiers
Free Hearth Keeper, $7/mo Kitchen Mystic, $15/mo Coven Leader. Webhooks, trials, feature gating.
Multi-household + roles
Owners, guardians, members, children, guests. Per-member dietary profiles. Permissions module.
The day starts with a card.
Hearthlight does not separate the witchy from the practical. The day’s tarot draw flows directly into the meal plan: the card reveals, the interpretation appears, and a recipe pairing follows. The interpretation isn’t pre-recorded in production; that version calls GPT-4 with the user’s history and current moon phase.
// 8 cards from the Major Arcana · localStorage persists today's draw
Five steps to a week of meals.
Days, dietary restrictions, proteins, moon phase, budget. Five small choices. The production wizard streams a full week of recipes against a Kroger pricing layer in under thirty seconds. The embedded version below cycles through the same five screens and surfaces a sample meal plan locally, no backend.
How many days?
// localStorage saves your selections · click reset to clear
Ask the kitchen anything.
The chat assistant runs on Vercel AI SDK plus GPT-4 in production. It function-calls into the recipe library, meal plan, and pantry, so its replies aren’t just text; they include actionable cards. Five preset prompts below; the answers are pre-written and stream in to give you the feel of the real thing.
Ask the kitchen anything.
Recipes shaped around what you have, how you feel, and what the moon is doing tonight. Grounded in real cooking, not woo.
// click a preset to send · streaming animation only · no API calls
What can I make tonight?
The pantry view is also a recipe matcher. Hearthlight checks what you have, what is about to expire, and what your dietary profile allows, then ranks recipes by inventory match. The expiring-soon badge nudges you toward what to use first. Production runs this against your real Kroger price history.
Your pantry
| Item | Qty | Expires | Category | |
|---|---|---|---|---|
| Spinach | 1 bunch | 3d left | produce | |
| Salmon fillet | 0.75 lb | 2d left | protein | |
| Cilantro | 1 bunch | 1d left | produce | |
| Brown rice | 2 cups | 8mo | pantry | |
| Chicken thighs | 1.25 lb | 5d left | protein | |
| Garlic | 1 head | 1mo | produce | |
| Olive oil | 1 bottle | 12mo | pantry |
What can I make tonight?
Click to find recipes that use what you have.
// search filters the pantry · click "Find me something" to match
Every dish has a magical signature.
Every recipe in the library carries an element, a planet, a moon phase, and a list of intentions. Click any ingredient to see its own correspondences. The information is layered into the cooking flow, not stuffed behind a tab. Tab between four sample recipes below.
Rosemary-Lemon Roasted Chicken
A Sunday-dinner bird built for renewal. Lemon brightens, rosemary steadies, garlic holds the line.
Ingredients
- 1 eachWhole chicken
- 4 sprigsRosemary
- 2 eachLemon
- 6 clovesGarlic
- 3 tbspOlive oil
- 1 tspSea salt
- 1 tspBlack pepper
Magical correspondences
- Element
- 🜂 Fire
- Planet
- ☉ Sun
- Intentions
- Energy · Courage
- Best moon
- 🌔 Waxing gibbous
- Chakra
- Solar plexus
Method
- Pat the chicken dry inside and out. Wet skin will steam, not crisp.
- Halve one lemon and stuff the cavity with the halves, two rosemary sprigs, and three crushed garlic cloves.
- Zest the second lemon into the olive oil, add the remaining garlic minced, salt, and pepper. Rub the paste over and under the skin.
// 6steps total · full recipe in the live app
// arrow keys cycle the tab strip · click ingredients to expand
A week that reads at a glance.
Seven days, four meal slots each. Color-coded by intention so grounding shows next to abundance shows next to rest. Click a recipe in the sidebar, then click any slot to place it. Production version is built on React Big Calendar with full drag-and-drop and ingredient roll-up to the shopping list.
Week of April 20 – 26, 2026
// click to place a recipe · "Generate shopping list" toasts
Cheaper across three stores.
Hearthlight pulls live prices from Kroger, Fred Meyer, and Trader Joe’s, then highlights the cheapest store per item. Switch store affinity and the list adapts; check items off as you shop and the total recalculates live. CSV, email, and print exports ship in production.
Shopping list
9 itemsProduce
Protein
Dairy
Pantry
// prices are sample data · check off items to update the total
All 22 Major Arcana, click to flip.
The artwork in production is a licensed tarot deck from an independent artist. Gold leaf on forest green, chosen to feel like a kitchen grimoire, not a divination studio. Each card has its own keywords and a one-sentence read in Hearthlight’s warm-but-grounded voice. Tap any card to reveal it, or flip the whole deck at once.
Tap any card to reveal.
// 10 more in production · full 22-card deck ships in the live app
// 22 Major Arcana · click to flip · use Flip all for the full reveal
Magical domain modeling done with rigor.
90 Prisma models capture astrology, tarot, lunar cycles, and ingredient correspondences as a real domain, not a fluff layer. Three specialized AI agents handle three feature domains: meal planning logic, commerce and pricing via Kroger, and the witchy feature set. Each has its own system prompt and tool surface.
Real-world commerce complexity: unit normalization, price history, confidence scoring on AI estimates, deep-link checkout. Multi-household with role-based access (owner, guardian, member, child, guest), per-member dietary profiles, and a permissions module. All the unsexy parts most SaaS stops short of.
Free tier is genuinely useful: inventory, manual planning, shopping list exports, Kroger integration, basic tarot. The paywall sits at AI-driven planning, the grimoire, the coven system, and the marketplace integrations. Magic is for everyone; pay if you want infinite assists.
The market for “household OS” is bigger than the market for meal planning software.
Hearthlight started as a meal planner. Day one I was building what every other meal app on the market builds: pick a recipe, fill a calendar, generate a list. Inside two weeks the data model had grown a household table, an inventory table, a price-history table, a member-permissions table, and a tarot-card table. The thing wanted to be bigger than its category.
The mistake most meal-planning apps make is treating cooking as pure logistics. It is logistics, yes, and also the place a household actually meets itself: dietary needs, religious cycles, who is home this week, what the budget will tolerate, what the season is doing. Software that respects all of that tends to stay installed; software that flattens it to inventory management gets uninstalled in three weeks.
Hearthlight is built by someone who treats the kitchen as the center of a household, and the data model reflects that the whole way down.
// what most meal apps optimize
- Recipe discovery
- Calendar fill rate
- Shopping-list export
// what households actually pay for
- Software that learns who lives in the house
- Respect for ritual and seasonality
- Resilience after a week off
- A surface that doesn’t feel like a spreadsheet
// the carry-forward
Every product I build now starts with a question about what the household, the team, or the operator is actually trying to do at 3pm on a Tuesday. The feature list comes second.
Hearthlight is not competing with Paprika.
The meal-planning market has good products in it. Paprika is the recipe-clipping standard. Plan to Eat owns the spreadsheet-pleasure crowd. Mealime is the speed-and-simplicity pick. Pantrydex is the inventory-first option. None of them is wrong about what they are.
Hearthlight sits in a different category on purpose: the meal planner that takes seasonality, ritual, household structure, and the moon seriously alongside the practical work of feeding people. The buyer is a different person than the one shopping for Paprika.
| // feature | Paprika | Plan to Eat | Mealime | Hearthlight |
|---|---|---|---|---|
| Primary user | Recipe collector | Spreadsheet planner | Weeknight cook | The household keeper |
| Inventory aware | No | Partial | No | Yes (per-household) |
| Pricing layer | None | None | None | Live Kroger + cross-store |
| AI assistance | None | None | Basic chat | Three specialized agents |
| Ritual layer | None | None | None | Tarot, moon, sabbat, intentions |
// Primary user
- Paprika
- Recipe collector
- Plan to Eat
- Spreadsheet planner
- Mealime
- Weeknight cook
- Hearthlight
- The household keeper
// Inventory aware
- Paprika
- No
- Plan to Eat
- Partial
- Mealime
- No
- Hearthlight
- Yes (per-household)
// Pricing layer
- Paprika
- None
- Plan to Eat
- None
- Mealime
- None
- Hearthlight
- Live Kroger + cross-store
// AI assistance
- Paprika
- None
- Plan to Eat
- None
- Mealime
- Basic chat
- Hearthlight
- Three specialized agents
// Ritual layer
- Paprika
- None
- Plan to Eat
- None
- Mealime
- None
- Hearthlight
- Tarot, moon, sabbat, intentions
The witchy layer is half the data model.
Full-stack production SaaS shipped solo. 90 Prisma models, 294 API routes, three Stripe-billed subscription tiers, and three specialized AI agents running in production.
346K
Lines of code
294
API routes
90
Prisma models
3
Subscription tiers
Why I shipped a witchy app on a developer portfolio.
Hearthlight is a strange thing to keep on a portfolio site. It is a SaaS for people who plan meals around the moon, and the audience for it isn’t the same audience that hires a fractional CTO.
It stays because it answers a question almost no other case study on this site can answer: can the operator hold a brand world that isn’t their own and ship it whole, built for the audience that actually wanted it.
The technical answer is yes. 346K lines, 90 models, 294 routes, three AI agents, three subscription tiers, billing, multi-household, role-based access, real-time pricing across three grocery chains. The SaaS underneath is real.
The harder answer is also yes. The product feels like Hearthlight, not like a developer’s idea of what Hearthlight should look like. Forum and Cormorant on forest green. A licensed gold-leaf tarot deck from an independent artist, not generic illustration. A free tier that is genuinely useful, not a demo of the paid tier. A voice that is warm and grounded and never tells you to manifest your meals.
If you are building something with a brand world of its own, that is the work: making it the thing it actually is, not just another usable app.
Built for the household keeper, shipped by the operator who lives in the house.
Recipe Scraper
Q1 2025Async scraping across 15 sources with rate limiting, deduplication, and a Flask UI.
Own product
The Agent Council
Q1 2026Five named agent personas, each modeled on a real exec, all orchestrated through a single Claude Code skill.
NDA client
Kristy Witch RPG
Q4 2025Phaser 3, 800 years of lore, Witcher-style quest depth. Built for my wife.
Personal project
Got a similar build? Let’s talk.
NEXT CASE STUDY
Bloom/2019 - 2022
Cannabis POS company. Founded, built, ran, shut down.
Bloom (founder)
READ THE CASE STUDY





















