# McDonald's franchisee: Operations dashboard for 3 restaurants

One dashboard and a plain-language AI analyst for a three-store McDonald's franchise. Every number, from the till receipt to the P&L, in one place.

*Stuart Logan · McDonald's franchisee · Germany · 2026 - present · 1 month, then ongoing*

## The brief

Stuart runs three McDonald's restaurants in Germany, and his numbers lived in six places that never talked to each other: a reporting API, monthly P&L PDFs from the accountant, corporate food-cost workbooks, payroll PDFs, daily receipt journals from the tills, and invoices scattered across inboxes and a company card.

Comparing stores, or answering something as simple as how crew labour is trending against last year, meant logging into portals and digging through PDFs. He wanted one private dashboard for himself and his store managers, with role-based access built in, and the option to simply ask questions in plain language instead of pulling reports.

## What we built

- **KPI dashboard.** sales, guests, labour, food cost, all vs last year
- **P&L module.** reads the accountant's PDFs, reconciles to the cent
- **Email-to-dashboard pipeline.** forward a report, it's live minutes later
- **Receipt-level basket analysis.** from the daily till journals
- **Invoice hub.** 3 sources, AI-extracted, reconciled on its own
- **AI analyst.** 13 tools, answers from validated data only
- **Role-based access.** per-store, per-role views
- **Daily automated sync.** over a year of history, zero gaps

## How it works

Everything flows into one validated PostgreSQL database. The reporting API syncs daily, forwarded reports land in dedicated mailboxes and get parsed deterministically, with every number anchored to its column by position on the page, and invoices are the one place AI extracts fields, with forced structured output. The AI analyst works the other way around: it answers questions by querying the validated tables through structured tools, so it reads clean data instead of raw documents.

## Stack

- **Frontend:** Next.js, React, Tailwind CSS, shadcn/ui, TanStack Table, Recharts
- **Backend:** NestJS, Prisma, PostgreSQL, pg-boss
- **AI:** Anthropic Claude, Anthropic SDK, Vercel AI SDK
- **Infra:** Railway, Resend inbound email, pnpm workspaces

## Numbers

- **8+** data sources unified into one dashboard
- **25M+** datapoints analyzed across 3 locations
- **6 hrs** of weekly manual reporting eliminated
- **13** purpose-built tools the AI analyst can use
- **7** document parsers, one per report type
- **30k** lines of TypeScript behind it

## The hardest part

Extracting exact financial data from PDFs that were designed for humans, not machines, and proving the numbers are right. The accountant's P&L is one multi-column PDF where a blank cell can shift a naively parsed number into the wrong store, so we built parsers that assign every figure to its column by its position on the page, then made correctness a release gate: the consolidated total has to equal the holding plus the sum of the stores, to the cent, on every document, before anything reaches the database.

The upstream reporting API needed the same discipline. It behaved nothing like its documentation, so the project started with a validation phase proving every required metric was actually reachable before we wrote any dashboard code.

## What the client said

> "Working with Dock30 has been an absolute pleasure. As a McDonald's franchisee, this dashboard has transformed how I manage my business by consolidating all my key operational data into one place. Your professionalism, technical expertise, and ability to understand exactly what I needed have allowed me to spend less time analysing reports and more time focusing on my team and customers. Highly recommended."
> Stuart Logan, Germany, rated 5/5

More work: https://dock30.com/work

## Contact

- Email: crew@dock30.com
- Book a call: https://dock30.com/contact
