Exercise 2: The Three Paradigms — What Each Provides and What You Still Write — Possible Solution ==================================================================== UTILITY-FIRST (TAILWIND) ------------------------------ Per this chapter, utility-first "provides small, composable styling primitives," and what a developer "still writes" is "the actual visual design, assembled from utilities." Concretely: Tailwind provides a large set of ready-made, single-purpose classes (p-4, flex, text-center) that each map to one specific CSS property/value — but it does NOT provide any actual design or layout out of the box. The developer still has to decide what the component should actually look like and assemble that design themselves, one utility class at a time, directly in the markup. COMPONENT FRAMEWORKS (BOOTSTRAP) ------------------------------ Per this chapter, component frameworks provide "complete, pre-styled components," and what a developer still writes is "little — mostly configuration/theming." Bootstrap ships fully-designed, ready-to-use UI pieces (an actual finished button, an actual finished navbar) — the developer mostly just uses the provided class names and markup structure as-is, perhaps adjusting a theme variable or two, without needing to design or build the component's own visual appearance from scratch at all. HEADLESS/UNSTYLED (RADIX UI, HEADLESS UI) ------------------------------ Per this chapter, headless libraries provide "accessible behavior, zero visuals," and what a developer still writes is "all visual styling, from scratch." These libraries handle the genuinely hard, easy-to-get-wrong PART of building an interactive component — keyboard navigation, correct ARIA attributes, focus management — but deliberately ship with no visual appearance at all. The developer gets fully correct, accessible BEHAVIOR for free, but has to design and style every visual aspect of the component themselves, using whatever styling approach they choose. THE UNDERLYING PATTERN ACROSS ALL THREE ------------------------------ Each paradigm draws the line between "what the framework provides" and "what the developer still does" in a genuinely different place: utility-first provides small styling PIECES and leaves assembly to the developer; component frameworks provide a COMPLETE finished look and leave only configuration to the developer; headless libraries provide correct BEHAVIOR and leave the entire visual layer to the developer. None of the three eliminates developer work entirely — each simply automates a different PORTION of the total work involved in building a real UI component. WHY THIS WORKS AS AN ANSWER ------------------------------ It states what each of the three paradigms provides and what remains the developer's own responsibility, using the chapter's own precise wording for each, and identifies the underlying pattern (each paradigm draws the automation line in a different place) tying all three together.