Where every design asset lives so the marketing site — and the AI page-builder — can actually use it. One home per asset type. Git stays lean. Every component has a spec the skills can read.
| Tier | What lives here | Location | In git? | Served via |
|---|---|---|---|---|
| 1 | Brand source assetsLogos, customer logos, fonts, icons, brand marks, vertical hero photos — small, optimized, version-stable | apps/web/public/brand/… | Yes ✓ | Vercel CDN |
| 2 | Production page imagesOptimized images a live page serves (webp/avif, ≤ a few hundred KB) | public/brand/<area>/ | Yes ✓ | Vercel CDN |
| 3 | Large / raw mediaVideo, PDF, raw stock photos, working comps — anything heavy | Supabase storage media/ · brand-assets/ |
No ✗ | Supabase public URL |
| 4 | Design source-of-truthYour component library + full-page comps (the HTML previews) | docs/design/preview/ | Yes ✓ HTML+SVG; raw stock → Tier 3 |
design.revmo.ai |
Separate from the four: the spec layer — skills/revmo-brand-system/references/ (tokens.md · components.md · section-catalog.md). This is text, not assets: what each component is, when to use it, its content schema. The AI reads this. A component isn't “usable by the platform” until it has an entry here.
Figma or hand-built, then commit the rendered component to components.html (+ a full-page comp).
ScottOptimized → public/brand/. Raw stock → Supabase. Never the 67MB in git.
ScottEngineer ports it to a React section; it’s documented in components.md / section-catalog.md.
EngA component that stops at the comp is a picture. The port + the spec entry are what make it usable by the platform and the AI. Don’t skip them.