Start with what the business gave us.
Only valid values count. A color must be a real color code, and a photo must exist.




Validates the listing’s raw fields and records where each came from: own (the business supplied it), suggested (read from its logo or photo), or missing. Imported data is messy, so only valid values count: colors must be #rgb or #rrggbb, a photo needs a source and counts once, and a blank logo path is no logo. The pixel rules live here too, so the browser adapter (common/schools-out/brand-sampling.ts) only reads pixels.
brandIntake(input: BrandInput): BrandIntake
Try it: which colors are kept?
Relationship functions
| Function | From → to | Home |
|---|---|---|
| validBrandColors | raw declared colors → valid colors | intake.ts |
| candidatesFromPixels | pixels → color candidates | intake.ts |
| logoGroundFromPixels | pixels → logo background | intake.ts |