# Node
node_modules/
.pnpm-store/
.pnpm-debug.log*
.next/
.open-next/
out/
.vercel/
*.tsbuildinfo
apps/web/next-env.d.ts
# Serwist build output (generated into public/ by `next build`)
apps/web/public/sw*
apps/web/public/swe-worker*

# Python
__pycache__/
*.py[cod]
*$py.class
.venv/
.uv-cache/
.pytest_cache/

# Scrapy
.scrapy/

# Logs (root-only so we don't accidentally swallow source dirs named "logs/")
*.log
/logs/

# Env
.env
.env.local
.env.*.local
!.env.example

# OS
.DS_Store
Thumbs.db

# IDE
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/tasks.json
.idea/
*.swp
.claude/

# SEO audit output directories — easy to regenerate via /claude-seo:seo-audit
seo-audit-*/

# Browser network captures — debug artifacts that can contain auth headers/cookies
*.har

# Google OAuth secrets — live in ~/.config/ufcalendar/seo-google/, never in the repo
client_secret*.json
oauth-token*.json

# AI-search eval runs (results/grades are large and reproducible)
apps/web/scripts/search-eval/runs/

# Demo-video render artifacts (/demo-video output: frames, webm captures, mp4 exports)
marketing/

# ML track: the SOURCE is tracked (it builds the prod rescore image — see
# ml/Dockerfile); only the regenerable bulk is ignored. Blanket-ignoring ml/
# untracked predict.py/explain_card.py etc., which are load-bearing for the
# ml-rescore container.
ml/.venv/
ml/__pycache__/
ml/data/
ml/models/
# Rendered parlay/pick artifact pages — the JSON record next to them IS the
# dated experiment log (tracked); the HTML is just a re-renderable view.
ml/predictions/*.html

# be-writer skill: exemplar library is copyrighted source text — S3 only,
# fetched on demand (see .claude/skills/be-writer/SKILL.md), never committed.
.claude/skills/be-writer/exemplars/

# Harvest artifacts (raw scrape output). Durable home is the bronze S3
# layer; the generated apps/web/lib/fight-dna-data.ts is what's committed.
scraper/data/
apps/api/dist/

# Fighter-credentials research corpus: per-fighter JSONs live in S3
# (s3://ufcalendar-raw-203012547507/fighter-credentials/json/), not git.
# PROGRESS.md is force-added and stays tracked as the runbook.
docs/research/fighter-credentials/backfill/*.json
