--- name: useless description: What building realness taught us about the web platform - semantic HTML with microdata as one decision that serves SEO, CSS selectors, layout, the data model, state (no Pinia), file storage paths, and the NoSQL database. Plus baseline-grid spacing, fluid type scale, materials-and-roles color, OS dark mode, and cascade over scoped styles. Use when writing or reviewing CSS/markup/Vue components, cleaning up div soup, or implementing type/spacing/color systems. Defer animation to motion-systems; client type voice to typography. metadata: category: Design & Frontend tags: - css - design-system - typography - color - layout --- # Useless Semantic HTML first. Style the platform. Not components - elements. **One markup decision pays seven times.** Microdata is not an SEO garnish bolted on at the end. `itemid`, `itemprop` and `itemtype` are the same identifiers the stylesheet selects on, the layout reads with `:has()`, the data layer parses, the app holds document state in instead of a store, the storage path is built from, and the database lists as collections. Write the element once and every layer downstream already knows what it means. | Layer | What reads the markup | | ------------------- | ------------------------------------------------------------------------------------------------- | | SEO | `itemtype` / `itemprop` - Schema.org, read by crawlers and any other reader | | Design | the attribute is the selector - `address[itemscope]`, `time` | | Layout | `:has()` on something real - `figure:has([itemtype='/posters'])`, no wrapper invented to hold it | | Data model | `itemprop_value()` reads `