A cozy companion web app for tracking Animal Crossing museum donations across multiple towns. Supports all five mainline games: GameCube, Wild World, City Folk, New Leaf, and New Horizons.
Live app: https://animalcrossingwebapp.vercel.app
- Track donations for all museum categories: Fish, Bugs, Fossils, Art, and Sea Creatures
- Manage multiple towns from a single TownManager drawer — switch, rename, create, and delete (game is locked at create-time)
- Five games supported: Animal Crossing (GCN), Wild World, City Folk, New Leaf, New Horizons
- Persistent left sidebar with brand, active town card, per-category donation counts, and Export CSV / Settings footer
- Inline item expand — tap any row (Fish, Bugs, Fossils, Sea Creatures, or Art) to open a two-column panel with the month availability grid, bells / shadow / hours /
basedOnreal-world reference / Crazy Redd authentication note (ACNH art), notes, and donate/undonate button - Hemisphere toggle — New Horizons towns expose an NH/SH toggle; month grids reflect the correct hemisphere
- URL-based navigation — every town and tab has a shareable URL via React Router v6
- Home screen with hero stat, current-month strip, "Leaving end of {month}" and "Just arrived" shelves, segmented progress meter, and latest donations
- Sectioned category pages — Leaving this month / Available now / Out of season / Already donated
- Unified global search dropdown with grouped category results, keyboard navigation, and recent-search history
- Stats tab with per-category cards and a 12-column "Yearly rhythm" availability chart
- Settings page — About + Danger zone (reset active town donations, reset everything)
- CSV export of your donation records
- Fully persistent — data saved to localStorage, no account required
- Vite + React 19 + TypeScript
- Tailwind CSS v4
- Zustand v5 (state + localStorage persistence, schema v3)
- React Router v6 (URL-based navigation)
- Vitest (unit tests)
- Vercel (hosting + analytics)
npm install
npm run dev # http://localhost:5173npm run build # Production build → dist/
npm run test # Run unit tests
npm run lint # Lint with ESLintMuseum data lives in public/data/<game>/:
public/data/acgcn/— GameCube: 40 fish, 40 bugs, 25 fossils, 13 paintingspublic/data/acww/— Wild World: 56 fish, 56 bugs, 52 fossilspublic/data/accf/— City Folk: 40 fish, 40 bugs, 52 fossilspublic/data/acnl/— New Leaf: fish, bugs, fossilspublic/data/acnh/— New Horizons: 81 fish, 80 bugs, 86 fossils, 43 art, 40 sea creatures (NH/SH month availability)
Sea creatures are fully supported for New Horizons and New Leaf — a dedicated Sea entry appears in the sidebar nav for those games (shipped in v0.8.2).
Current release: v0.9.4-beta (2026-05-07) — silhouette rendering for un-donated items, ACWW icon gap-fill (100% coverage), 768px hand-drawn icon pipeline, fourth hand-drawn icon (coelacanth). Previous betas: v0.9.3-beta (JSON save-file round-trip + onboarding fixes), v0.9.2-beta (cross-game icon routing + first hand-drawn icons), v0.9.1-beta (ACGCN item icons), v0.9.0-beta (full UI revamp). Last stable on main: v0.8.2-alpha. See CHANGELOG.md for history and docs/roadmap-to-v1.md for the path to v1.0.
Significant design decisions are logged in docs/decisions.md.