From e0d0ba59ffb1174df3efdf70d29644e2bf3dc11b Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Sat, 14 Feb 2026 08:31:07 -0600 Subject: [PATCH] Optimize CLAUDE.md from 158 to 43 lines Remove full router listing, production ops examples, and boilerplate. Keep commands, architecture, environment table, and key constants. Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..b2efd72 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,42 @@ +# Paper Dynasty Database API + +FastAPI backend for baseball card game data. Peewee ORM with SQLite (WAL mode). + +## Commands + +```bash +uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # Dev server +python main.py # Alt start +python db_migrations.py # Run migrations +docker build -t paper-dynasty-db . # Build image +``` + +## Architecture + +- **Routers**: Domain-based in `app/routers_v2/` (cards, players, teams, packs, stats, gauntlets, scouting) +- **ORM**: Peewee with SQLite (`storage/pd_master.db`, WAL journaling) +- **Card images**: Playwright/Chromium renders HTML templates → screenshots (see `routers_v2/players.py`) +- **Logging**: Rotating files in `logs/database/{date}.log` + +## Key Constants + +- `LIVE_CARDSET_ID`: 24 (current active cardset, in `db_engine.py`) +- `ranked_cardsets`: Legal cardsets for ranked play +- `CARDSETS`: Configuration for game modes and card availability + +## Environments + +| Env | URL | SSH | Container | Port | +|-----|-----|-----|-----------|------| +| **Prod** | pd.manticorum.com | `akamai` | `pd_api` | 815 | +| **Dev** | pddev.manticorum.com | `pd-database` | `dev_pd_database` | 816 | + +**Prod compose path**: `ssh akamai` → `/root/container-data/paper-dynasty` +**Dev PostgreSQL**: `sba_postgres` on `10.10.0.42:5432`, user `sba_admin`, db `paperdynasty_dev` + +## Important + +- Docker image installs only Playwright Chromium (not all browsers) to optimize size +- Teams have dynamic card pricing based on market activity +- Supports both human players and AI teams +- Gauntlet events use special reward structures and card pools