Munchable scans a food barcode and tells you whether a product suits a digestive condition you have. Alongside that there is a small curated recipe library: 38 dishes, written from whole ingredients, with real quantities.
The library ships as one workspace package, imported by a Next.js site and an Expo app. Both surfaces group it by meal, render the same ingredient lines, and run the same check over it. And they make exactly opposite decisions about the most important piece of copy on the screen: who the recipe is for.
The website says it on every recipe. The app says it nowhere. Neither is a bug, and working out which was which took longer than writing either.
One package, so a recipe cannot say two things
The header of the website's adapter sets the constraint before anything else:
// The public face of the curated recipe library (`@munchable/content`).…