Add naming scheme selection to run configuration

Add a nullable naming_scheme column to NuzlockeRun so users can pick a
themed word category for nickname suggestions. Includes Alembic migration,
updated Pydantic schemas, a GET /runs/naming-categories endpoint backed by
a cached dictionary loader, and frontend dropdowns in both the NewRun
creation flow and the RunDashboard for mid-run changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-11 21:36:50 +01:00
parent e61fce5f72
commit e324559476
15 changed files with 215 additions and 31 deletions

View File

@@ -5,25 +5,34 @@ status: todo
type: task
priority: normal
created_at: 2026-02-11T15:56:26Z
updated_at: 2026-02-11T15:56:48Z
updated_at: 2026-02-11T20:23:29Z
parent: nuzlocke-tracker-igl3
blocking:
- nuzlocke-tracker-c6ly
---
Create a JSON data file containing themed words for nickname generation.
Create a JSON data file containing themed words for nickname generation, stored in the backend alongside other seed data.
## Requirements
- Each word entry has: `word` (string) and `categories` (string array)
- Store at `backend/src/app/seeds/data/name_dictionary.json`
- Category-keyed structure for fast lookup:
```json
{
"mythology": ["Apollo", "Athena", "Loki", ...],
"space": ["Apollo", "Nova", "Nebula", ...],
"food": ["Basil", "Sage", "Pepper", ...]
}
```
- Words may appear in multiple categories
- Categories should include themes like: mythology, food, space, nature, warriors, music, literature, gems, ocean, weather, etc.
- Target 150-200 words per category
- Words can belong to multiple categories
- Words should be short, punchy, and suitable as Pokemon nicknames (ideally 1-2 words, max ~12 characters)
- This file is NOT seeded into the database — it is read directly by the backend service at runtime
## Checklist
- [ ] Define the data schema / TypeScript type for dictionary entries
- [ ] Create the JSON data file with initial categories
- [ ] Create `backend/src/app/seeds/data/name_dictionary.json` with the category-keyed structure
- [ ] Populate each category with 150-200 words
- [ ] Validate no duplicates exist within the file
- [ ] Validate no duplicates exist within a single category
- [ ] Add a utility function to load the dictionary from disk (with caching)