Stu Mason · Folkestone, Kent
The archive

I Built My Wife a Macro Tracker in 2 Hours

Stu Mason3 min read

Wife was tracking macros in Google Sheets. Built her a proper app in 2 hours with React, N8n, and Claude for food parsing.

I Built My Wife a Macro Tracker in 2 Hours

My wife tracks her macros in a Google Sheet on her phone. Every meal, she's pinching and zooming, entering numbers into tiny cells, doing mental math. Painful to watch.

As a Laravel dev, I knew I could build something better. But here's the thing - lately I've been leaning hard on Claude Code, generating thousands of lines I don't really understand. The technical debt was piling up. I was becoming a curator of code I couldn't debug.

So when I sat down to solve her problem, I had a choice: build another Laravel app I'd half-understand, or try something different.

The Decision

Spent an hour debating:

  • Laravel - I know it, but I'd inevitably generate a ton of code with Claude Code
  • Supabase + N8n + React - Visual workflows, less code to maintain

Then I realised: I was overthinking it. She needed something TODAY, not a perfect architecture.

The 2-Hour Build

2:00 PM - npm create vite@latest macro-hannah -- --template react. No auth. No database design. Just React and a dream.

2:15 PM - Three components: input field for food, progress bars for macros, today's entries. No routing. No state management. Just useState and fetch.

2:30 PM - N8n becomes the backend. Instead of building a backend, I created workflows:

  1. Webhook receives: "2 eggs and toast"
  2. Send to Claude: "Extract protein, carbs, fats from this"
  3. Save to Supabase
  4. Return to frontend

The entire "backend" is a visual workflow. No code to maintain.

3:00 PM - The magic connection:

const addFood = async (text) => {
  const response = await fetch('https://n8n.example/webhook/add-food', {
    method: 'POST',
    body: JSON.stringify({ text })
  });
  return response.json();
};

My React app doesn't know Supabase exists. It just talks to N8n webhooks.

3:30 PM - Deployed to Cloudflare Pages. Connected GitHub repo. Pushed. Live.

3:45 PM - "Hey babe, try this." She logged her afternoon protein shake. It worked.

What I Learned

I Was Overthinking Everything

As a Laravel developer, I was ready to build: authentication system, RESTful API, service layers, repository pattern, test suites.

What she actually needed: a text box and her macros.

Visual Workflows > Generated Code

With N8n, I can SEE the logic. When she says "it logged my coffee as chicken," I open N8n, look at the execution, and fix it.

With my Laravel apps full of AI-generated code? I'm grepping through files I don't understand.

Ship First, Perfect Never

Hour 2: Wife is using it. Week 2: Would still be designing the Laravel architecture.

The Features That Actually Mattered

What I thought she'd need: user accounts, food database, meal photos, social features, PDF export.

What she actually wanted: "Can you make the buttons bigger?" and "Can I talk instead of type?"

The Stack

  • Frontend: React with Tailwind (~200 lines)
  • Backend: N8n workflows (visual, no code)
  • Database: Supabase (N8n handles it)
  • AI: Claude API for parsing food
  • Hosting: Cloudflare Pages (free)

She's logged 12 meals since yesterday.

Sometimes the best technical decision is to stop making technical decisions and start shipping.

Get the Friday email

What shipped, what worked with the agents, one thing worth nicking.

No spam. Unsubscribe anytime. Privacy policy.