Inspora

Food that knows where you're from.

A diaspora cultural-food app. Built solo and shipped to TestFlight.

Case study
The problem

Mainstream apps couldn't see the food I grew up on.

Either the dish wasn't in the database at all, or it was scored against a baseline that treated it as a mistake.

Search
egusi
No matches found. Try a different spelling.
Search
jollof rice
620 kcal HIGH CARB
Consider a lower-carb alternative.

Inspora started from the opposite premise: your grandmother's cooking is legible, respected, and trackable — without shame.

Inspora — case study 2 / 11
What it was

A cultural-food wellness app, built and shipped solo.

Log the dishes you actually eat — jollof, egusi, doubles, pozole, biryani, adobo — and see them treated as food, not as deviations from someone else's baseline.

TestFlight build 23·PWA·Android package·49 database migrations·one person
Inspora — case study
Good evening, Ama
Today
Your coach
1,340of ~2,100
Calm and even today.
A protein-leaning dinner would round it.
Logged
5/7
Water
6 cups
Move
32 min
Your dishes
Jollof Rice210 kcal
Egusi320 kcal
Suya260 kcal
3 / 11
The corpus

African is the largest region — and a whole tier isn't heritage food at all.

A heritage-food app still has to let you log a sandwich. The general tier existed so people didn't leave the app to log lunch. That was a retention decision, not scope creep.

Regional distribution · seven segments 993 dishes · 1,348 ingredients
African
~195
East & SE Asian
~190
Europe / N. America / other
~155
Latin American
~95
South Asian
~80
Caribbean
~50
Middle East & Persia
~50
Counts recovered from source and rounded to the nearest five; the production database has been decommissioned. 4 / 11
The signature idea

The fingerprint replaced food photography.

There is no honest stock photo of your mother's egusi. So no dish had one. Every dish shows where its calories come from instead — protein, carbs, fat — in a bar you can read in half a second.

It scales from a list row to a full screen, it never flatters the dish, and it works for a cuisine no photographer has shot.

Inspora — case study
Jollof Rice210 kcal
P 12%C 68%F 20%Smoky tomato rice · West African
Egusi320 kcal
P 18%C 14%F 68%Melon-seed stew · Nigerian
Suya260 kcal
P 46%C 8%F 46%Spiced grilled skewers
5 / 11
The product

The product, in five screens.

Also shipped: snap-a-plate photo logging you can edit before it saves, barcode scanning with a Nutri-Score grade, and recipe import from a link.

Good evening, Ama
Today
Your coach
1,340of ~2,100
Calm and even today.
A protein-leaning dinner would round it.
Logged
5/7
Water
6 cups
Move
32 min
Your dishes
Jollof Rice210 kcal
Egusi320 kcal
Suya260 kcal
Today One coach line, three quiet metrics, your dishes.
P 12%C 68%F 20%
Jollof Rice
Smoky tomato rice · West African
PlateLarge
210
6g
Protein
36g
Carbs
9g
Fat
Good to know
The color comes from a long, slow tomato reduction, not additives.
Swap ideas+
Dish The fingerprint, plus Plate × Ate portioning.
Your day
How the whole day sits against your range.
1,340
of your ~2,100 range
On track
BreakfastAkara + pap
340
LunchJollof + chicken
520
DinnerEgusi + rice
480
Suggested, not required
A protein-forward dinner like suya would round today nicely.
Day A whole day against a range, not a limit.
From your kitchen
Leaning into your West African picks.
One buy away
Jollof Rice
Smoky tomato rice
IN INSPORA
One thing between you and this
GarlicAdd
See the recipe
Make now
Efo RiroSpinach stew
Cook Dishes you are one ingredient away from.
Vitality
A read on your day, from your own signals.
Ready
Today's band
Steady and rested.
A pattern in your logs
Slightly lower evening energy on days with late heavy meals.
Based on 4 days with, 6 days without.
Eat my heritage more often
More steady energy
Vitality Patterns from your own logs, labelled as patterns.
Inspora — case study 6 / 11
The feel loop

It stays silent until both arms have data.

Step one Log what you ate The dish, the plate size, how much of it you actually finished.
Step two Log how you felt Energy, digestion, sleep — entered separately, later in the day.
The gate 3 days with, 3 without Below that, the engine says nothing at all. Both arms or no claim.
What it actually says Slightly lower evening energy on days with late heavy meals — based on 4 days with, 6 days without.
Effect size
Slight Noticeable Strong
Graded by how far the two averages diverge. The sample count ships with the claim.
Inspora — case study 7 / 11
Craft I · Honesty engineering

An estimate was making an accuracy claim.

614 of 993 dishes priced from a single reference entry
Before Estimated from this dish's recipe, 1 of 1 ingredients matched to USDA data. Technically true, and read as a measurement. "1 of 1" was one reference row, not a priced recipe.
After A rough estimate for this dish as a whole, from one USDA reference entry rather than a priced recipe. Treat it as a ballpark. Longer, less flattering, and the only version the data supported.

The rule throughout: abstain rather than guess. The recipe importer prices only the ingredients it can source to a real USDA record, and lists the rest as "not counted" — with the reason.

Inspora — case study 8 / 11
Craft II · Unknown is not zero

A missing value became a fabricated zero.

102 dishes

A coercion turned missing sugar into 0 g for 102 dishes whose sugar was genuinely unknown. A fake zero does not stay fake — downstream it is counted as a measurement.

Before — two inputs, one output
sugar: unknown
sugar: 0 g measured
0 g
Daily total, then weekly average, then a compliment you had not earned.
After — the difference survives
sugar: unknown
not counted
sugar: 0 g measured
0 g
Totals now skip what was never measured, and say so on the screen.
Inspora — case study 9 / 11
Craft III
18

findings from an adversarial review before the final build.

Several were regressions introduced by the previous round of fixes. All fixed and verified against live data before shipping.

Inspora — case study
01
Silent double-count An edited half-plate taught the app your default was a whole one — every future one-tap re-log silently double-counted, with the correct chip still highlighted.
02
Fabricated value Unknown sugar became 0 g for 102 dishes — a fabricated zero that downstream code counted as a real measurement.
03
Unreachable data A filter meant to drop empty ingredients removed salt — the highest-sodium item in the corpus — from the only screen where you could add it.
04
Regression inside a fix Hardening the portion write to throw on error would itself have double-logged meals, because the log had already committed. Caught by re-reviewing the fixes.
10 / 11
What carries forward

I ship things that are honest about what they don't know — including when the gap is mine.

Judgment Decisions made on evidence, not on momentum.
The honesty bar Abstain rather than guess. Unknown is never zero.
Adversarial review of my own fixes, before anyone else has to run it. Shipping discipline
Inspora
11 / 11