{"owner":"srizzon","repo":"git-city","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# Git City\n\n3D pixel art city built from real GitHub data. Buildings represent developers: height = contributions, width = repos, lit windows = recent activity.\n\n## Tech stack\n\n- **Frontend:** Next.js App Router, Three.js (instanced rendering), TypeScript\n- **Backend:** Supabase (Postgres + Auth + Realtime)\n- **Payments:** Stripe (USD), AbacatePay (BRL/PIX), NOWPayments (crypto)\n- **Deployment:** Vercel\n\n## Project structure\n\n```\nsrc/\n  app/              Next.js pages and API routes\n  components/       React + Three.js components\n  lib/              Core game logic (raids, dailies, XP, items, etc.)\nsupabase/\n  migrations/       Sequential SQL migrations (001_, 002_, ...)\n```\n\n## Code conventions\n\n- TypeScript everywhere, no `any`\n- `getSupabaseAdmin()` for server-side writes (bypasses RLS)\n- `createServerSupabase()` for auth in API routes (cookie-based)\n- API routes validate auth, then use admin client for DB operations\n- Items use a zone system: crown, roof, aura, faces\n- Loadout stored in `developer_customizations` table with `item_id = \"loadout\"`\n\n## Database\n\n- Migrations in `supabase/migrations/`, numbered sequentially\n- Never modify existing migrations, always create new ones\n- Run locally with `npx supabase db push`\n- **NEVER run UPDATE or DELETE on production data without explicit user approval**\n- **NEVER NULL out, drop, or modify columns that contain user data (emails, API keys, etc)**\n- When fixing security/permissions issues, ONLY change grants/policies — never touch the data itself\n- Always propose SQL as code for the user to review, never execute destructive SQL directly\n\n## Environments\n\n- Three environments, one-directional flow: local → staging → prod (see `ENVIRONMENTS.md`)\n- `main` = production. Any other pushed branch = Vercel preview + staging Supabase\n- Pushing a branch with migration changes triggers `deploy-staging-migrations.yml` (validate + `db push` to staging)\n- Merging into `main` triggers `deploy-migrations.yml` (validate + `db push` to prod) — migrations deploy automatically, never push them to prod by hand\n- Vercel Preview-scoped env vars point at the staging Supabase project; Production-scoped at prod\n- Staging is disposable: reset with `supabase db reset --linked` while linked to staging. Never copy prod data into it\n\n## Git\n\n- Preserve full commit history on merge — NEVER squash PRs (use a merge commit or rebase, keep every commit)\n- Commit message format (ALWAYS follow):\n  - emoji + conventional commit: `✨ feat(scope): ...`, `🐛 fix(scope): ...`, `✏️ docs: ...`, `♻️ refactor: ...`\n  - single line only — no body, no bullet points\n  - all lowercase, written in english\n  - split work into separate commits by logical part / group of changes (never one giant commit)\n- Never skip hooks or force push to main\n\n## Third-party Assets (IMPORTANT)\n\n- **Arcade character sprites (char_0-5)** and Lumon furniture: from [pixel-agents](https://github.com/pablodelucca/pixel-agents) by Pablo De Lucca (MIT) / [MetroCity](https://jik-a-4.itch.io/metrocity-free-topdown-character-pack) (CC0). These ARE in the repo under `public/sprites/arcade/`.\n- **Cozy People Asset Pack** by shubibubi: purchased under commercial license ($3.99+). Used for the layered avatar (body, hair, clothing, accessories) and pet sprites.\n- **Cozy Interior Asset Pack** by shubibubi: purchased under commercial license. Used for arcade room furniture and tilesets.\n- **License terms**: \"Can be used in any commercial or non commercial project, may modify. Can't be resold or redistributed even if modified.\"\n- **NEVER commit Cozy assets to the repo** — they are NOT covered by AGPL. They live in Supabase Storage and are loaded at runtime via `NEXT_PUBLIC_COZY_BASE_URL`.\n- **NEVER include Cozy PNGs in git add** — the `public/cozy/` folder is gitignored.\n- Forkers must buy their own license from shubibubi on itch.io and place files in `public/cozy/`, then seed the `arcade-assets` Supabase bucket from those files. (The maintainer's upload script lives under the gitignored `scripts/` folder and is not shipped — write a small one-off uploader against the `arcade-assets` bucket.)\n- Original purchase links: https://shubibubi.itch.io/cozy-people and https://shubibubi.itch.io/cozy-interior\n- **Kenney models** (`public/models/trees/*.glb`, `public/models/props/*.glb`): from [Kenney](https://kenney.nl) Nature Kit / City Kit (CC0 — public domain). Free to use, modify, and redistribute; attribution appreciated but not required. These ARE in the repo. Raw unpacked kit folders stay local (`kenney/` is gitignored).\n- **San Francisco map** (`public/maps/sf.json`): baked from [OpenStreetMap](https://www.openstreetmap.org/copyright) data. OSM data is **ODbL** — the \"© OpenStreetMap contributors\" credit MUST stay visible on the SF map (rendered in `home-client.tsx`). The committed `public/maps/sf.json` is what ships; the bake script lives under the gitignored `scripts/` folder and is not in the repo.\n\n## Key files\n\n| File | What it does |\n|------|-------------|\n| `src/components/InstancedBuildings.tsx` | WebGL instanced rendering for thousands of buildings |\n| `src/components/CityCanvas.tsx` | Main Three.js scene setup |\n| `src/lib/raid.ts` | Raid system (PvP, scoring, limits) |\n| `src/lib/items.ts` | Shop items, equipping, zones |\n| `src/lib/xp.ts` | XP leveling (25 levels, 6 tiers) |\n| `src/lib/stripe.ts` | Stripe checkout sessions |\n| `src/app/api/webhooks/stripe/route.ts` | Stripe webhook handler |\n"},"files":{"CLAUDE.md":"# Git City\n\n3D pixel art city built from real GitHub data. Buildings represent developers: height = contributions, width = repos, lit windows = recent activity.\n\n## Tech stack\n\n- **Frontend:** Next.js App Router, Three.js (instanced rendering), TypeScript\n- **Backend:** Supabase (Postgres + Auth + Realtime)\n- **Payments:** Stripe (USD), AbacatePay (BRL/PIX), NOWPayments (crypto)\n- **Deployment:** Vercel\n\n## Project structure\n\n```\nsrc/\n  app/              Next.js pages and API routes\n  components/       React + Three.js components\n  lib/              Core game logic (raids, dailies, XP, items, etc.)\nsupabase/\n  migrations/       Sequential SQL migrations (001_, 002_, ...)\n```\n\n## Code conventions\n\n- TypeScript everywhere, no `any`\n- `getSupabaseAdmin()` for server-side writes (bypasses RLS)\n- `createServerSupabase()` for auth in API routes (cookie-based)\n- API routes validate auth, then use admin client for DB operations\n- Items use a zone system: crown, roof, aura, faces\n- Loadout stored in `developer_customizations` table with `item_id = \"loadout\"`\n\n## Database\n\n- Migrations in `supabase/migrations/`, numbered sequentially\n- Never modify existing migrations, always create new ones\n- Run locally with `npx supabase db push`\n- **NEVER run UPDATE or DELETE on production data without explicit user approval**\n- **NEVER NULL out, drop, or modify columns that contain user data (emails, API keys, etc)**\n- When fixing security/permissions issues, ONLY change grants/policies — never touch the data itself\n- Always propose SQL as code for the user to review, never execute destructive SQL directly\n\n## Environments\n\n- Three environments, one-directional flow: local → staging → prod (see `ENVIRONMENTS.md`)\n- `main` = production. Any other pushed branch = Vercel preview + staging Supabase\n- Pushing a branch with migration changes triggers `deploy-staging-migrations.yml` (validate + `db push` to staging)\n- Merging into `main` triggers `deploy-migrations.yml` (validate + `db push` to prod) — migrations deploy automatically, never push them to prod by hand\n- Vercel Preview-scoped env vars point at the staging Supabase project; Production-scoped at prod\n- Staging is disposable: reset with `supabase db reset --linked` while linked to staging. Never copy prod data into it\n\n## Git\n\n- Preserve full commit history on merge — NEVER squash PRs (use a merge commit or rebase, keep every commit)\n- Commit message format (ALWAYS follow):\n  - emoji + conventional commit: `✨ feat(scope): ...`, `🐛 fix(scope): ...`, `✏️ docs: ...`, `♻️ refactor: ...`\n  - single line only — no body, no bullet points\n  - all lowercase, written in english\n  - split work into separate commits by logical part / group of changes (never one giant commit)\n- Never skip hooks or force push to main\n\n## Third-party Assets (IMPORTANT)\n\n- **Arcade character sprites (char_0-5)** and Lumon furniture: from [pixel-agents](https://github.com/pablodelucca/pixel-agents) by Pablo De Lucca (MIT) / [MetroCity](https://jik-a-4.itch.io/metrocity-free-topdown-character-pack) (CC0). These ARE in the repo under `public/sprites/arcade/`.\n- **Cozy People Asset Pack** by shubibubi: purchased under commercial license ($3.99+). Used for the layered avatar (body, hair, clothing, accessories) and pet sprites.\n- **Cozy Interior Asset Pack** by shubibubi: purchased under commercial license. Used for arcade room furniture and tilesets.\n- **License terms**: \"Can be used in any commercial or non commercial project, may modify. Can't be resold or redistributed even if modified.\"\n- **NEVER commit Cozy assets to the repo** — they are NOT covered by AGPL. They live in Supabase Storage and are loaded at runtime via `NEXT_PUBLIC_COZY_BASE_URL`.\n- **NEVER include Cozy PNGs in git add** — the `public/cozy/` folder is gitignored.\n- Forkers must buy their own license from shubibubi on itch.io and place files in `public/cozy/`, then seed the `arcade-assets` Supabase bucket from those files. (The maintainer's upload script lives under the gitignored `scripts/` folder and is not shipped — write a small one-off uploader against the `arcade-assets` bucket.)\n- Original purchase links: https://shubibubi.itch.io/cozy-people and https://shubibubi.itch.io/cozy-interior\n- **Kenney models** (`public/models/trees/*.glb`, `public/models/props/*.glb`): from [Kenney](https://kenney.nl) Nature Kit / City Kit (CC0 — public domain). Free to use, modify, and redistribute; attribution appreciated but not required. These ARE in the repo. Raw unpacked kit folders stay local (`kenney/` is gitignored).\n- **San Francisco map** (`public/maps/sf.json`): baked from [OpenStreetMap](https://www.openstreetmap.org/copyright) data. OSM data is **ODbL** — the \"© OpenStreetMap contributors\" credit MUST stay visible on the SF map (rendered in `home-client.tsx`). The committed `public/maps/sf.json` is what ships; the bake script lives under the gitignored `scripts/` folder and is not in the repo.\n\n## Key files\n\n| File | What it does |\n|------|-------------|\n| `src/components/InstancedBuildings.tsx` | WebGL instanced rendering for thousands of buildings |\n| `src/components/CityCanvas.tsx` | Main Three.js scene setup |\n| `src/lib/raid.ts` | Raid system (PvP, scoring, limits) |\n| `src/lib/items.ts` | Shop items, equipping, zones |\n| `src/lib/xp.ts` | XP leveling (25 levels, 6 tiers) |\n| `src/lib/stripe.ts` | Stripe checkout sessions |\n| `src/app/api/webhooks/stripe/route.ts` | Stripe webhook handler |\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# Git City\n\n3D pixel art city built from real GitHub data. Buildings represent developers: height = contributions, width = repos, lit windows = recent activity.\n\n## Tech stack\n\n- **Frontend:** Next.js App Router, Three.js (instanced rendering), TypeScript\n- **Backend:** Supabase (Postgres + Auth + Realtime)\n- **Payments:** Stripe (USD), AbacatePay (BRL/PIX), NOWPayments (crypto)\n- **Deployment:** Vercel\n\n## Project structure\n\n```\nsrc/\n  app/              Next.js pages and API routes\n  components/       React + Three.js components\n  lib/              Core game logic (raids, dailies, XP, items, etc.)\nsupabase/\n  migrations/       Sequential SQL migrations (001_, 002_, ...)\n```\n\n## Code conventions\n\n- TypeScript everywhere, no `any`\n- `getSupabaseAdmin()` for server-side writes (bypasses RLS)\n- `createServerSupabase()` for auth in API routes (cookie-based)\n- API routes validate auth, then use admin client for DB operations\n- Items use a zone system: crown, roof, aura, faces\n- Loadout stored in `developer_customizations` table with `item_id = \"loadout\"`\n\n## Database\n\n- Migrations in `supabase/migrations/`, numbered sequentially\n- Never modify existing migrations, always create new ones\n- Run locally with `npx supabase db push`\n- **NEVER run UPDATE or DELETE on production data without explicit user approval**\n- **NEVER NULL out, drop, or modify columns that contain user data (emails, API keys, etc)**\n- When fixing security/permissions issues, ONLY change grants/policies — never touch the data itself\n- Always propose SQL as code for the user to review, never execute destructive SQL directly\n\n## Environments\n\n- Three environments, one-directional flow: local → staging → prod (see `ENVIRONMENTS.md`)\n- `main` = production. Any other pushed branch = Vercel preview + staging Supabase\n- Pushing a branch with migration changes triggers `deploy-staging-migrations.yml` (validate + `db push` to staging)\n- Merging into `main` triggers `deploy-migrations.yml` (validate + `db push` to prod) — migrations deploy automatically, never push them to prod by hand\n- Vercel Preview-scoped env vars point at the staging Supabase project; Production-scoped at prod\n- Staging is disposable: reset with `supabase db reset --linked` while linked to staging. Never copy prod data into it\n\n## Git\n\n- Preserve full commit history on merge — NEVER squash PRs (use a merge commit or rebase, keep every commit)\n- Commit message format (ALWAYS follow):\n  - emoji + conventional commit: `✨ feat(scope): ...`, `🐛 fix(scope): ...`, `✏️ docs: ...`, `♻️ refactor: ...`\n  - single line only — no body, no bullet points\n  - all lowercase, written in english\n  - split work into separate commits by logical part / group of changes (never one giant commit)\n- Never skip hooks or force push to main\n\n## Third-party Assets (IMPORTANT)\n\n- **Arcade character sprites (char_0-5)** and Lumon furniture: from [pixel-agents](https://github.com/pablodelucca/pixel-agents) by Pablo De Lucca (MIT) / [MetroCity](https://jik-a-4.itch.io/metrocity-free-topdown-character-pack) (CC0). These ARE in the repo under `public/sprites/arcade/`.\n- **Cozy People Asset Pack** by shubibubi: purchased under commercial license ($3.99+). Used for the layered avatar (body, hair, clothing, accessories) and pet sprites.\n- **Cozy Interior Asset Pack** by shubibubi: purchased under commercial license. Used for arcade room furniture and tilesets.\n- **License terms**: \"Can be used in any commercial or non commercial project, may modify. Can't be resold or redistributed even if modified.\"\n- **NEVER commit Cozy assets to the repo** — they are NOT covered by AGPL. They live in Supabase Storage and are loaded at runtime via `NEXT_PUBLIC_COZY_BASE_URL`.\n- **NEVER include Cozy PNGs in git add** — the `public/cozy/` folder is gitignored.\n- Forkers must buy their own license from shubibubi on itch.io and place files in `public/cozy/`, then seed the `arcade-assets` Supabase bucket from those files. (The maintainer's upload script lives under the gitignored `scripts/` folder and is not shipped — write a small one-off uploader against the `arcade-assets` bucket.)\n- Original purchase links: https://shubibubi.itch.io/cozy-people and https://shubibubi.itch.io/cozy-interior\n- **Kenney models** (`public/models/trees/*.glb`, `public/models/props/*.glb`): from [Kenney](https://kenney.nl) Nature Kit / City Kit (CC0 — public domain). Free to use, modify, and redistribute; attribution appreciated but not required. These ARE in the repo. Raw unpacked kit folders stay local (`kenney/` is gitignored).\n- **San Francisco map** (`public/maps/sf.json`): baked from [OpenStreetMap](https://www.openstreetmap.org/copyright) data. OSM data is **ODbL** — the \"© OpenStreetMap contributors\" credit MUST stay visible on the SF map (rendered in `home-client.tsx`). The committed `public/maps/sf.json` is what ships; the bake script lives under the gitignored `scripts/` folder and is not in the repo.\n\n## Key files\n\n| File | What it does |\n|------|-------------|\n| `src/components/InstancedBuildings.tsx` | WebGL instanced rendering for thousands of buildings |\n| `src/components/CityCanvas.tsx` | Main Three.js scene setup |\n| `src/lib/raid.ts` | Raid system (PvP, scoring, limits) |\n| `src/lib/items.ts` | Shop items, equipping, zones |\n| `src/lib/xp.ts` | XP leveling (25 levels, 6 tiers) |\n| `src/lib/stripe.ts` | Stripe checkout sessions |\n| `src/app/api/webhooks/stripe/route.ts` | Stripe webhook handler |\n","category":"root","tokens":1366}]}