{"id":44510069,"url":"https://github.com/tarkovtracker-org/tarkovtracker","last_synced_at":"2026-05-28T23:01:44.844Z","repository":{"id":324892616,"uuid":"1098874862","full_name":"tarkovtracker-org/TarkovTracker","owner":"tarkovtracker-org","description":"Escape from Tarkov quest, hideout, item, and progression tracker for PvP/PvE with squad sync, built with Nuxt 4 and Supabase.","archived":false,"fork":false,"pushed_at":"2026-05-27T08:31:58.000Z","size":11455,"stargazers_count":51,"open_issues_count":13,"forks_count":15,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-27T09:22:35.024Z","etag":null,"topics":["cloudflare-pages","eft","escape-from-tarkov","hideout-tracker","item-tracker","nuxt","progression-tracker","pve","pvp","quest-tracker","supabase","tailwindcss","tarkov","tarkov-tracker","typescript","vue"],"latest_commit_sha":null,"homepage":"https://tarkovtracker.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tarkovtracker-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-18T09:00:31.000Z","updated_at":"2026-05-27T07:49:25.000Z","dependencies_parsed_at":"2026-01-25T17:12:50.976Z","dependency_job_id":null,"html_url":"https://github.com/tarkovtracker-org/TarkovTracker","commit_stats":null,"previous_names":["tarkovtracker-org/tarkovtrackernuxt"],"tags_count":121,"template":false,"template_full_name":null,"purl":"pkg:github/tarkovtracker-org/TarkovTracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarkovtracker-org%2FTarkovTracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarkovtracker-org%2FTarkovTracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarkovtracker-org%2FTarkovTracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarkovtracker-org%2FTarkovTracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tarkovtracker-org","download_url":"https://codeload.github.com/tarkovtracker-org/TarkovTracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarkovtracker-org%2FTarkovTracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33629560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare-pages","eft","escape-from-tarkov","hideout-tracker","item-tracker","nuxt","progression-tracker","pve","pvp","quest-tracker","supabase","tailwindcss","tarkov","tarkov-tracker","typescript","vue"],"created_at":"2026-02-13T13:26:17.163Z","updated_at":"2026-05-28T23:01:44.830Z","avatar_url":"https://github.com/tarkovtracker-org.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TarkovTracker\n\n[![Crowdin](https://badges.crowdin.net/tarkovtrackerorg/localized.svg)](https://crowdin.com/project/tarkovtrackerorg)\n\nA comprehensive Escape from Tarkov progress tracker built with Nuxt 4, featuring team collaboration, dual game mode support (PvP/PvE), and real-time synchronization via Supabase.\n\n## Features\n\n- **Dual Game Mode Support**: Track progress separately for PvP and PvE modes\n- **Team Collaboration**: Share progress with teammates in real-time\n- **Task Tracking**: Monitor quest completions and objectives\n- **Hideout Progress**: Track module upgrades and parts\n- **Player Level Progress**: Monitor leveling across different factions\n- **Real-time Sync**: Automatic synchronization via Supabase\n- **Multi-language Support**: Available in English, German, Spanish, French, Russian, Ukrainian, and Chinese. API data can be fetched in additional tarkov.dev-supported languages. Community translations are available through [translate.tarkovtracker.org](https://translate.tarkovtracker.org).\n\n## Tech Stack\n\n- **Framework**: Nuxt 4 (SPA mode)\n- **UI**: Nuxt UI component library\n- **Styling**: Tailwind CSS v4\n- **State Management**: Pinia with three-store architecture\n- **Backend**: Supabase (authentication, database, real-time)\n- **API**: Nuxt server-side proxy to json.tarkov.dev static data\n- **Deployment**: Cloudflare Pages\n\n## Setup\n\nInstall dependencies:\n\n```bash\nnpm install\n```\n\n## Environment Variables\n\nCopy `.env.example` to `.env` and fill in your values:\n\n```env\n# Required for login/sync features\nNUXT_PUBLIC_SUPABASE_URL=your_supabase_project_url\nNUXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anonymous_key\n\n# Optional: App configuration\n# NUXT_PUBLIC_APP_URL=http://localhost:3000\n# NUXT_TARKOV_JSON_BASE_URL=https://json.tarkov.dev\n# NUXT_PUBLIC_ALLOW_DIRECT_TOKEN_CREATE_FALLBACK=false\n# NUXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX\n# NUXT_PUBLIC_CLARITY_PROJECT_ID=xxxxxxxxxx\n```\n\n`NUXT_PUBLIC_APP_URL` only sets the public app/canonical URL. `NUXT_PUBLIC_GA_MEASUREMENT_ID`\nand `NUXT_PUBLIC_CLARITY_PROJECT_ID` only enable the Google Analytics and Microsoft Clarity\nintegration codepaths; they do not start tracking by themselves. Tracking stays disabled until the\nuser explicitly opts in through the analytics consent banner or footer \"Analytics Preferences\"\ncontrol. That opt-in state is managed in `app/composables/useAnalyticsConsent.ts`, and\n`app/plugins/03.analytics-consent-mode.client.ts` keeps analytics consent mode denied until the\nuser accepts.\n\n`NUXT_PUBLIC_ALLOW_DIRECT_TOKEN_CREATE_FALLBACK` is disabled by default and should stay off in\nproduction. It exists only for controlled local/self-hosted or staggered rollout cases where the\n`token-create` Edge Function is temporarily unavailable and you intentionally accept bypassing\nfunction-level rate limiting for token creation.\n\n## Cloudflare Workers\n\nThe project uses one Cloudflare Worker for the public API surface:\n\n- `workers/api-gateway` — API request gateway\n  - `API_GATEWAY_LIMITER` (Durable Object)\n\n## Server API Runtime Notes\n\n- `app/server/api/team/members.ts` uses in-memory Maps for response caching and rate limiting.\n- `app/server/api/profile/[userId]/[mode].get.ts` uses in-memory Maps `sharedProfileRateLimiter` and `sharedProfileCache`.\n- Team and token mutations are rate-limited inside Supabase Edge Functions on a per-user basis.\n- In-memory Maps are local to each running instance and are not shared across serverless/horizontal deployments.\n- For production-wide consistency across both endpoints, use a distributed backend (for example Redis or Cloudflare KV)\n  for rate limiting and caching.\n\n## Development\n\nStart the development server:\n\n```bash\nnpm run dev\n```\n\nThe application will be available at `http://localhost:3000`.\n\n## Code Quality\n\n```bash\n# Format code (Prettier + ESLint)\nnpm run format\n\n# Validate Supabase migrations locally\nnpm run supabase:check\n\n# Lint code\nnpm run lint\n\n# Run tests\nnpm test\n\n# Type check\nnpm run typecheck\n\n# Check for dependency updates\nnpm run deps\n```\n\n## Tarkov.dev Profile Cleanup\n\nThe app now persists only the linked `tarkovUid` for tarkov.dev profiles. Legacy manual backups\ncreated before this cleanup may still contain imported profile snapshots. New imports ignore those\nlegacy blobs, but regenerate backups after upgrading if you want future exports to be fully scrubbed.\n\n## Production\n\nBuild for production:\n\n```bash\nnpm run build\n```\n\nPreview production build locally:\n\n```bash\nnpm run preview\n```\n\n## Project Structure\n\n- `app/` - Main application source directory\n- `app/features/` - Feature-specific components organized by domain\n- `app/components/` - Global/shared UI components\n- `app/stores/` - Pinia stores for state management\n- `app/composables/` - Reusable composition functions\n- `app/pages/` - File-based routing\n- `app/server/api/` - Nuxt server routes for API proxying and app APIs\n- `app/shell/` - Shared app chrome components\n- `app/utils/` - Client/shared utilities\n- `workers/` - Cloudflare Workers (api-gateway)\n- `docs/` - Project documentation and migration guides\n\n## Documentation\n\nFor detailed development guidelines, architecture references, and migration progress, see the files in the [`docs/`](docs/) directory.\n\nThis repository includes both **contribution workflow guidance** and **technical documentation**. \n\n[**How to Contribute (Issues, Branches, PR Process):**](.github/CONTRIBUTING.md) Open or pick an issue, get assigned, create a focused branch, Use the PR template, and link the issue.\n\n\u003e [!IMPORTANT]\n\u003e Each pull request must address **one change only** — a single fix, update, documentation improvement, or new feature.  \n\u003e Pull requests that bundle unrelated changes may be asked to split or be closed.\n\n[**Label System:**](.github/LABELS.md) Issue Types define the kind of work being done, while labels communicate scope, priority, ownership, and status throughout the lifecycle of the issue.\n\n[**GitHub Project Board:**](.github/PROJECT_BOARD.md) Issues progress through the board from backlog to completion, with transitions driven by issue and pull request activity.\n\n#### Where to start (new contributors)\n\n\u003e [!NOTE]\n\u003e If you’re new to the project, look for issues labeled **`good-first-issue`**. These are intentionally scoped to be approachable and are the best way to get familiar with the codebase, contribution process, and review expectations.\n\n## License\n\nThis project remains licensed under the GNU General Public License v3.0. See [LICENSE.md](LICENSE.md) for the full license text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarkovtracker-org%2Ftarkovtracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarkovtracker-org%2Ftarkovtracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarkovtracker-org%2Ftarkovtracker/lists"}