Commit Graph

41 Commits

Author SHA1 Message Date
c2112b9b74 Add detailed stats screen bean and remove scrapped beans
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 20:28:59 +01:00
4fb6d43305 Add Pinwheel Clause support for zone-based encounters in route groups
Allows each sub-zone within a route group to have its own independent
encounter when the Pinwheel Clause rule is enabled (default on), instead
of the entire group sharing a single encounter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 20:22:36 +01:00
0b874a6816 Scrap obsolete bean for Python fetch script verification
No longer needed since the project switched to the Go-based fetch tool.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 20:05:41 +01:00
a65efa22da Add nullable region field to evolutions for regional form filtering
Regional evolutions (e.g., Pikachu → Alolan Raichu) only occur in specific
regions. This adds a nullable region column so the app can filter evolutions
by the game's region. When a regional evolution exists for a given trigger/item,
the non-regional counterpart is automatically hidden.

Full-stack: migration, model, schemas, API with region query param, seeder,
Go fetch tool, frontend types/API/hook/components, and admin form.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 20:05:07 +01:00
23a7b6ad53 Update project config for Go tool and port change
Add Go to .tool-versions, update .gitignore for Go build output and
cache, document seed data regeneration in README, and change API port
from 8000 to 8080 in docker-compose.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 19:44:19 +01:00
5c91cef057 Update beans tracking files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:55:54 +01:00
d168d99bba Separate PokeAPI ID from national dex for correct form identification
Pokemon forms (e.g., Alolan Rattata) had their PokeAPI ID (10091) stored as
national_dex, causing them to display incorrectly. This renames the unique
identifier to pokeapi_id and adds a real national_dex field shared between
forms and their base species, so Alolan Rattata correctly shows as #19.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:55:06 +01:00
cb027e5215 Extract version groups and route ordering to separate JSON files
Moves ~850 lines of inline data from fetch_pokeapi.py into
version_groups.json and route_order.json for easier editing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:35:30 +01:00
9cec9836b4 Add Pokemon form support to seeding (Alolan, regional variants, etc.)
Pokemon forms with dex IDs >= 10000 (e.g., Alolan Rattata = 10091) were
being collected in encounter data but missing from pokemon.json, causing
them to be silently dropped during DB seeding. Now fetch_all_pokemon()
also fetches form entries that appear in encounter data, with clean
display names like "Rattata (Alola)" and correct form-specific types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:32:13 +01:00
5edda2dba9 Improve UX with merged run view, method badges, grouped encounters, and mobile nav
Merges the run dashboard into the encounters page as a unified view at /runs/:runId,
adds encounter method grouping in the modal and badges on route rows, improves the
home page with recent runs, adds mobile hamburger nav, and polishes empty states.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:20:26 +01:00
0beb287365 Mark gift/static encounter bean as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:54:46 +01:00
9aca1806f6 Move starter Pokemon to dedicated route that appears first
Starters are now their own "Starter" route entry instead of being
merged into the location where you receive them (Pallet Town, New Bark
Town, Route 101). This makes them always appear first in the route
list for each game.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:53:40 +01:00
07fca1d25d Mark MVP epic and route ordering beans as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:51:35 +01:00
d488c252b8 Add starter, gift, and fossil encounters to seed data
Define special encounter data (starters, gifts, fossils) in a new
special_encounters module and merge them into route seed JSON during
generation. Add new route locations to ROUTE_ORDER for cities that
previously had no wild encounters (Saffron City, Pewter City, etc.).
Show colored method badges in the EncounterModal UI for special
encounter types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:50:49 +01:00
73d4a1831c Sort seed data routes by game progression instead of alphabetically
Add ROUTE_ORDER maps for Kanto (FRLG), Johto (HGSS), and Hoenn (Emerald)
progressions with aliases for related version groups. Add Export Order
button to admin game detail page for iterating on route orderings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:27:51 +01:00
110b864e95 Add ability to end a run as victory or defeat
Add End Run button to run dashboard with a confirmation modal offering
Victory/Defeat choice. Backend auto-sets completedAt timestamp and
validates only active runs can be ended. Ended runs show a completion
banner with date and duration, rename team to "Final Team", and hide
encounter logging and status change interactions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:12:56 +01:00
1f198aca4c Improve admin panel UX with toasts, evolution CRUD, sorting, drag-and-drop, and responsive layout
Add sonner toast notifications to all mutations, evolution management backend
(CRUD endpoints with search/pagination) and frontend (form modal with pokemon
selector, paginated list page), sortable AdminTable columns (Region/Gen/Year
on Games), drag-and-drop route reordering via @dnd-kit, skeleton loading states,
card-styled table wrappers, and responsive mobile nav in AdminLayout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:09:27 +01:00
Julian Tabel
574e36ee22 Add bean for updating PokeAPI data submodule
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:54:42 +01:00
Julian Tabel
93d0d8a9e2 Use game.color for GameCard fallback instead of static gradients
Replace hardcoded Tailwind gradient classes with dynamic background
color from the game's color field. Falls back to indigo if no color
is set.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:51:28 +01:00
Julian Tabel
f7f5417b6b Add all Gen 1-9 games with colors to seed data
- Add 37 games from Gen 1-9 (Red/Blue through Scarlet/Violet)
- Add color field to Game model matching box art/branding
- Add migration for games.color column
- Update fetch_pokeapi.py to fetch all games and output colors
- Update seed loader to upsert game colors
- Update frontend Game type to include color field

Games without PokeAPI encounter data (ORAS, Let's Go, Sword/Shield,
BDSP, Legends Arceus, Scarlet/Violet) have location structure but
empty encounter tables.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:46:10 +01:00
Julian Tabel
5406e5a386 Add bean for run completion (success/failure) feature
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:22:49 +01:00
Julian Tabel
1c8e7562c8 Add bean for test data injection in dev environment
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:20:15 +01:00
Julian Tabel
fce6756cc2 Seed all Pokemon species and add admin pagination
- Update fetch_pokeapi.py to import all 1025 Pokemon species instead of
  only those appearing in encounters
- Add paginated response for /pokemon endpoint with total count
- Add pagination controls to AdminPokemon page (First/Prev/Next/Last)
- Show current page and total count in admin UI
- Add bean for Pokemon forms support task
- Update UX improvements bean with route grouping polish item

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:19:05 +01:00
Julian Tabel
2aa60f0ace Add hierarchical route grouping for multi-area locations
Locations like Mt. Moon (with 1F, B1F, B2F floors) are now grouped so
only one encounter can be logged per location group, enforcing Nuzlocke
first-encounter rules correctly.

- Add parent_route_id column with self-referential FK to routes table
- Add parent/children relationships on Route model
- Update games API to return hierarchical route structure
- Add validation in encounters API to prevent parent route encounters
  and duplicate encounters within sibling routes (409 conflict)
- Update frontend with collapsible RouteGroup component
- Auto-derive route groups from PokeAPI location/location-area structure
- Regenerate seed data with 70 parent routes and 315 child routes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:07:45 +01:00
b434ab52ae Add beans for seeding improvements, pokemon forms, and admin UX
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 19:29:06 +01:00
c5a2d5c0e6 Mark evolution and admin panel beans as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 19:26:53 +01:00
001ee98bb5 Rewrite fetch_pokeapi.py to read from local submodule instead of PokeAPI
Replace all pokebase API calls with local JSON file reads from the
PokeAPI/api-data git submodule, removing the network dependency and
pokebase package. The script now runs with stdlib Python only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 19:17:03 +01:00
f251903874 Update seeding refactor bean to use PokeAPI/api-data JSON instead of CSV
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 19:06:33 +01:00
71a8f2e695 Add bean for refactoring seeding to use PokeAPI CSV data via git submodule
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 19:01:56 +01:00
55e6650e0e Add admin panel with CRUD endpoints and management UI
Add admin API endpoints for games, routes, pokemon, and route encounters
with full CRUD operations including bulk import. Build admin frontend
with game/route/pokemon management pages, navigation, and data tables.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 18:36:19 +01:00
a911259ef5 Add pokemon status management with death tracking
Implement status change workflow (alive → dead) with confirmation modal,
death cause recording, and visual status indicators on pokemon cards.
Includes backend migration for death_cause field and graveyard view
on the run dashboard.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 18:36:08 +01:00
Julian Tabel
628c621fa9 Add beans for evolutions, area grouping, UX pass, and gift encounters
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:28:59 +01:00
Julian Tabel
66b3c9286f Add run dashboard and encounter tracking interface
Run list at /runs shows all runs with status badges. Run dashboard at
/runs/:id displays stats, active team, graveyard, and rule badges.
Encounter tracking at /runs/:runId/encounters shows route list with
status indicators, progress bar, filters, and a modal for logging or
editing encounters with pokemon picker.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:28:50 +01:00
Julian Tabel
982154b348 Add game selection screen and new run wizard
Build a 3-step wizard at /runs/new: select game (themed gradient cards
grouped by generation with filter tabs), configure rules (reuses existing
RulesConfiguration), and name/create run. Remove standalone Games and Rules
pages since they're now integrated into the wizard flow.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:09:25 +01:00
Julian Tabel
7c65775c8b Add frontend API client and TanStack Query hooks
Install @tanstack/react-query, create a fetch-based API client with typed
functions for all endpoints, and add query/mutation hooks for games, pokemon,
runs, and encounters. Includes Vite dev proxy for /api and QueryClientProvider
setup.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:09:14 +01:00
Julian Tabel
13e90eb308 Add REST API endpoints for games, runs, and encounters
Implement 13 endpoints: read-only reference data (games, routes, pokemon),
run CRUD with cascading deletes, and encounter management. Uses Pydantic v2
with camelCase alias generation to match frontend types, and nested response
schemas for detail views.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:09:05 +01:00
Julian Tabel
cfd4c51514 Add game data seeding from PokeAPI with level ranges
Seed the database with Pokemon game data for 5 games (FireRed, LeafGreen,
Emerald, HeartGold, SoulSilver) using pokebase. Includes Alembic migrations
for route unique constraints and encounter level ranges, a two-phase seed
system (offline fetch to JSON, then idempotent upserts), and Dockerfile
updates for the seed runner.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:08:54 +01:00
Julian Tabel
08c05f2a2f Add frontend TypeScript types for game data models
Define Game, Route, Pokemon, RouteEncounter, Encounter, and NuzlockeRun
types mirroring the backend schema, with EncounterStatus and RunStatus
discriminated union types.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 13:34:21 +01:00
Julian Tabel
d94364d6ce Add database schema with SQLAlchemy async + Alembic migrations
Set up PostgreSQL database layer with async SQLAlchemy 2.0 and asyncpg driver.
Implements 6 core tables (games, routes, pokemon, route_encounters, nuzlocke_runs,
encounters) with foreign keys, indexes, and an initial Alembic migration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 13:29:34 +01:00
a87d2ef523 add user auth epic 2026-02-04 17:22:41 +01:00
Julian Tabel
6ee53a0533 Initial setup of frontend and backend 2026-02-04 17:13:58 +01:00