# Cobblemon UI — Project Reference ## Stack Phoenix 1.8 LiveView app (Elixir). Dark mode daisyUI. Docker dev setup with SSHFS mount to remote Minecraft server. ## Data Source `.cobblemon-data/` — SSHFS mount of remote Minecraft server root (`dev.sh` mounts it). Mounted into Docker container at `/cobblemon-data`. ### Key server files - `usercache.json` — JSON array of `{"name", "uuid", "expiresOn"}`. Maps UUIDs to player names. - `world/pokemon/playerpartystore/<2-char-prefix>/.dat` — NBT binary, player's party (6 slots). - `world/pokemon/pcstore/<2-char-prefix>/.dat` — NBT binary, player's PC boxes (30 boxes × 30 slots). - `world/playerdata/.dat` — vanilla Minecraft player data (not currently parsed). **Important:** `.dat` files use 2-character UUID prefix subdirectories (e.g. `54/54e75a91-...dat`). ## App Modules ### `lib/cobblemon_ui/cobblemon_fs/` - `cobblemon_fs.ex` — GenServer. Cached player data access. Reads from `/cobblemon-data`. Parses `usercache.json` for names. API: `list_players/0`, `get_player/1`, `get_party/1`, `get_pc/1`, `get_pokemon/2`. - `nbt.ex` — Pure Elixir NBT decoder. Handles gzip + uncompressed. All 13 tag types. - `pokemon.ex` — Normalizes raw NBT compound → `%{species, level, form, shiny, nature, gender, ivs, evs, moves, ...}`. - `party_store.ex` — Parses party `.dat` → list of 6 pokemon slots. - `pc_store.ex` — Parses PC `.dat` → list of `%{box: n, pokemon: [...]}`. ### `lib/cobblemon_ui_web/live/` - `dashboard_live.ex` — Main LiveView. Player sidebar (names from usercache), party/PC tabs, pokemon detail panel with IV/EV bars. ### Config - `docker-compose.yml` — Dev container. Bind mounts `.cobblemon-data` → `/cobblemon-data` (needs `allow_other` SSHFS). - `dev.sh` — SSHFS mount script for `.cobblemon-data`.