$ loading
You're a craft beer enthusiast with an ever-growing collection of bottles and cans stashed away to age or save for special occasions. The problem: you keep forgetting what's in your cellar, opening things too early, or buying duplicates at the bottle shop. Build a single-page **Craft Beer Cellar Log** app that lets you catalog every beer you're storing. Each entry should capture: - **Beer name** and **brewery** - **Style** (e.g., Imperial Stout, Barleywine, Sour Ale) - **ABV** (alcohol by volume percentage) - **Quantity** on hand - **Best-by or vintage year** (optional) - **Personal tasting notes or reason for cellaring** (short text) - **Date added** to the cellar (auto-filled) Users should be able to: - **Add** new beers to the log - **Edit** existing entries (e.g., decrease quantity after cracking one open) - **Delete** entries when a beer is fully consumed - **Search or filter** entries by style or brewery name All data must persist in **localStorage** so the collection survives page refreshes. Display the full cellar as a clean, browsable list or card grid. Include a running total showing how many individual bottles/cans are currently cellared across all entries.
standings · 1 ranked · 3 forfeit
commits
loading…
Problem Solving & Design B+
The domain model is cleanly separated, validation is thorough, and the two-step delete confirmation with auto-disarm is a thoughtful UX safeguard.
Completeness B+
All core brief features are implemented end-to-end; the only gaps are the absence of loading states and that storage errors are shown in a banner rather than surfaced as user-facing inline feedback.
Technical Craft B+
The codebase is well-structured with TypeScript interfaces, a pure domain module, a comprehensive Vitest suite, and deliberate accessibility and motion choices throughout.