Case study · Development

Nutrifax

Nutrition label software for small food producers. Recipes become Canadian and US label PDFs, with reports showing the ingredients, source data and calculations behind them.

Site
nutrifax.app ↗
Status
Live in production
Disciplines
Full-stack development · Systems architecture · API integration
Stack
Python / FastAPI · Expo / React Native · MySQL · Docker · Stripe · OpenRouter · ReportLab
2Government databases
CA + USLabel formats
PDFLabels and calculation reports
AIAssisted recipe import

The problem

A small food producer developing a packaged product needs to account for ingredient quantities, serving sizes, food database matches and label formatting. Each affects the result, and every recipe change requires recalculation.

We built Nutrifax to bring these steps into one recipe workflow, where producers can review the inputs behind a label.

What was built

Nutrifax combines a FastAPI backend with an Expo/React Native frontend. It matches ingredients against the Canadian Nutrient File and USDA Standard Reference data, calculates nutrition per serving, applies rounding rules, and generates bilingual Canadian or US Nutrition Facts PDFs. Saved recipes and Stripe subscriptions support ongoing use.

How it's built

From ingredient records to printable labels

Food matching, quantity conversion, calculation and rendering are separate steps. The calculation report combines their inputs and results so producers can review how a recipe became a label.

Food database integration

Health Canada's Canadian Nutrient File and the USDA Standard Reference use different data structures. We brought them into a shared workflow for ingredient search and calculation.

Health Canada CNF USDA SR

Calculation reports

Downloadable reports show ingredient quantities, gram conversions, source references, nutrient calculations and the methodology used to produce the result.

Server-side PDF generation

ReportLab generates the label and calculation-report PDFs on the server, including bilingual Canadian and US label layouts.

AI-assisted recipe import

Configurable text and vision models run through OpenRouter. The import pipeline parses ingredients, searches the local food databases, and asks the model to choose among returned records. Python handles quantity conversion and nutrition calculations.

Stripe billing

Stripe Checkout and subscription webhooks connect billing to account access. Recipes stay with the account as producers edit their product lines.

Checkout Subscriptions

Accounts and saved recipes

Producers can return to recipes saved in their accounts, adjust ingredients and serving sizes, and generate updated labels.

Python / FastAPI · Expo / React Native · MySQL · Docker · Stripe · OpenRouter · ReportLab.

What this shows

AI matching, calculations you can inspect

We separate recipe interpretation from nutrition calculation. AI helps turn free-form ingredients into candidate food records. The backend uses those records and measured quantities for deterministic calculations and rounding.

A plausible ingredient match can still be wrong. Producers can check the source references and quantity conversions before using a label.

Ω

Need calculations you can inspect?

We design calculation logic, source references and reports together when we build data-backed applications.