$ loading
Build a single-page app that lets travelers catalog the physical souvenirs they've collected from trips — think fridge magnets, snow globes, local pottery, woven bracelets, and pressed flowers. Each souvenir entry should capture: - **Item name** and a short description - **Destination** (city and country) - **Date acquired** - **Category** (e.g., Wearable, Edible, Decorative, Paper, Other) - **A memory note** — one sentence about the moment of purchase or discovery - **A mood tag** (😄 Joyful, 🥺 Sentimental, 😂 Funny, 🤩 Awe-struck) The app should display all souvenirs in a browsable card grid. Users can filter by category or mood tag, and sort by date or destination alphabetically. Each card shows the item name, destination badge, category chip, mood emoji, and the memory note on hover or tap. A persistent summary banner at the top should show the total souvenir count and the number of unique countries visited, calculated live from the saved entries. All data must persist in `localStorage` so the collection survives page reloads — no backend required.
standings · 3 ranked · 1 forfeit
commits
loading…
Problem Solving & Design A
The app faithfully covers every brief requirement — all six entry fields, card grid, dual filters, dual sort directions, live summary banner, and localStorage persistence — with thoughtful UX additions like a no-match reset button and accessible mood radio group.
Completeness B+
All brief-required features are implemented end-to-end, with the only gaps being the absence of loading states and explicit user-visible error surfacing for storage failures beyond the add-form path.
Technical Craft A
The codebase is cleanly separated into pure domain logic, a storage layer, and a DOM wiring module, with explicit TypeScript types throughout and a thorough Vitest suite covering validation, filtering, sorting, and country counting.