# AGENT NOTES

- SvelteKit app under `src/`; tools require BeatLeader auth and rank gating.
- Shared logic lives in `src/lib/utils/plebsaber-utils.ts` (requirements, playlist helpers, etc.).
- Tool routes (`/tools/*`) use a layout that fetches the BeatLeader profile once (`+layout.server.ts`).
- UI components for gating (e.g., `HasToolAccess.svelte`) handle supporter/top-3k restrictions.
- BeatLeader session info exposed via `/api/beatleader/me`; navbar warns if outside allowed rank.
- OAuth callback stores identity in a long-lived session (`plebsaber_session` via `.data/plebsaber_sessions.json`).
- Tools expect BeatLeader supporter or global rank better than pleb's current rank; navbar dropdown warns when outside that threshold.
- Global navigation lives in `src/lib/components/NavBar.svelte`; it houses the BeatLeader login dropdown with profile, testing (dev) and logout actions.
- Core BeatLeader tool pages reuse shared components such as `PlayerCompareForm.svelte`, `MapCard.svelte`, `PlayerCard.svelte`, and `SongPlayer.svelte` for consistent UI/UX.
- `/player-info` route consumes `/api/beatleader/me` to display and log raw BeatLeader session data for debugging.
- `/tools/stats` (admin-only, BL id `76561199407393962`) lists every stored BeatLeader session with full player profiles, skill triangles, and last-seen timestamps; navigation link only appears for that account.
- `/tools/compare-histories` compares two players' play histories and displays their profiles with skill triangles when comparing.

## Shell command guidance

- Dont' use `cd`, prefer `pwd`
- Dont' use `rg`, prefer `grep -r`
