Skip to content
Ritesh FirodiyaGet in touch

Work / AskCal / Wiki / Decisions

2026-09-28-what-is-not-drawn

Decisioncanonicalverified 2026-09-28

DECISION.DESIGNS.WHAT-IS-NOT-DRAWN

Summary

routes.js missing is empty, and this page is why it is allowed to be.

The rule

missing means one thing only: app behaviour that no wireframe draws. An empty list is therefore a claim — every screen, state, card and dialog the app can put in front of someone is drawn somewhere in the set, and scripts/check-designs.py enforces the mechanical half of it.

It held four entries that were not that. Three were notes about things the app does not do, and one was wrong. Keeping them there made the list mean "anything unresolved", and a list that means that cannot be read as a gap report — which is the only reason it exists.

Surfaces the app does not have

Nothing to draw, so nothing is missing.

  • Offline. The log, the targets and the gallery are local; only the scan needs the network, and it degrades to the offline toast in toasts rather than to a screen. Already recorded in routes.js under states.offline.
  • 404 and maintenance. The app is offline-first with one API call. Neither surface exists in the product, so neither can be drawn.

Sample data that differs on purpose

  • The editor's own example foods. portion-count.html draws a fried egg and portion-liquid.html an orange juice, neither of which is on the dish the result and meal screens draw. The three files are three faces of ONE screen, so a row links to the face its food earns and the example inside differs. See portion.

A claim removed on a false premise

Per-food density for a poured measure, and the record corrected.

portion-liquid.html used to print = 258 g · buttermilk is 1.03 g/ml. It was removed, and missing recorded the reason as: no code implements it, DEFAULT_PER_UNIT_G.ml is 1, so the app converts every millilitre at water.

That is not true, and the constant it names does not exist. A Measure carries its own gramsPerUnitMilli, and fromWire DERIVES it from the grams the provider already sent — grams * 2000 / qtyHalves — precisely so the model is never asked for a third number it could contradict. 250 ml of buttermilk at 258 g yields 1.032 g/ml, per food, with no density table anywhere.

What neither side prints is the g/ml annotation, and they agree on that: the app prints only the derived gram line, and so does the wireframe. The sample was changed from 250 ml = 250 g to = 258 g so the line does not read as a no-op and imply the water conversion the app was wrongly accused of.

Related

Sources

  • .context/designs/mobile/routes.js
  • apps/mobile/src/lib/measure.ts

Every project of mine is written down like this.

Read the résumé