- Add Pompiere font from Google Fonts
- Color theme: #F5EFE0 (bg), #3D2C1E (text), #B85C38 (accent)
- Two-column layout (ingredients | method) matching mockup
- Horizontal metadata bar: Serves, Prep, Cook, Total
- Course badge and description paragraph
- Ingredients: checkbox rows with quantity prefix, grouped by section
- Method: numbered steps with checkboxes
- Notes: ¶ ornament + paragraph style
- Index page: styled navbar with sort mode buttons
- Index page: styled recipe list with separators
- Custom CSS via internal stylesheet (no Pico CSS override except
link for reset/utility classes)
- Add LambdaCase and TupleSections to default extensions
- All 26 tests passing, hlint clean
- Add Roux.Server: WAI application using wai+warp directly
- Scans .cook files from recipe directory on startup
- GET / → HTML index page listing all recipes
- Other routes → 404
- Add Roux.RecipeIndex: directory scanning and recipe parsing
- scanRecipes: lists .cook files, parses each, extracts titles
- Falls back to filename when metadata title is absent
- Add Roux.Html: blaze-html rendering with Pico CSS
- indexPage: renders recipe list with links
- urlEncode: percent-encodes filenames for URLs
- Update Roux.hs: re-exports Server.app and Types
- Add filepath to dependencies
- Create Roux.Parser with parseCookFile (splits paragraphs, treats
each as a plain-text step, no metadata parsing yet)
- Add emptyMetadata to Roux.Types for convenience
- Add test dependencies: hspec, tasty-golden, tasty-hspec
- Add ParserSpec with 4 tests covering single step, multiple steps,
empty input, and whitespace trimming
- Wire ParserSpec into test runner via tasty-hspec