An unofficial Dota 2 companion for solo and party progression, patch notes and draft practice.
GamesTypeScript · JavaScriptGitHub @thisisdajaaaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Dota 2 companion: honest match and MMR tracking, Captain's Mode draft practice against an AI captain, live pro games with draft analysis, and hero meta. Next.js 16, TypeScript, MongoDB, OpenDota.
Taken from the repository README
Loading the full README.
Read the full README ↗A Dota 2 companion for players who want honest answers about their own games, and a place to practise drafting that feels like a real captain across the table.
Production · Staging · Docs · Roadmap · Changelog · Decisions (ADRs)
Sign in with Steam and Dota Den pulls your public match history from OpenDota, keeps it in sync, and turns it into pages you can actually use: your record and form, your heroes, who you play with, how your sessions went, what the latest patch changed for you. Everything is built in-app, with no bouncing out to other sites for match data.
The drafting side is a full Captain's Mode trainer: draft against an AI captain grounded in current high-rank and tournament data, draft live against a friend, or solve short drafting puzzles, and get a report card on every draft.
More detail: docs/draft-engine.md.
ADMIN_STEAM_IDS.party_size means unknown, never solo.A modular monolith on Next.js 16 (App Router). Each feature lives in src/modules/<feature> with the same
anatomy: a controller (HTTP), services (use cases), repositories (MongoDB), a model, ports, zod schemas and DTOs,
pure domain/ rules, and a container that wires them. Route handlers are one line; every API answers with one
response envelope. The rules are enforced by a test (ADR 0009).
flowchart LR
subgraph Browser
UI[React UI / client components]
end
subgraph Vercel["Next.js on Vercel"]
Pages[Server components & route handlers]
subgraph Modules["src/modules/*"]
Identity & Matches & MMR & Sessions & Together & Groups & Players & Heroes & Meta & Patches & Drafts & Leaderboards
end
Cron[Vercel Cron: patches + draft data]
end
UI --> Pages --> Modules
Cron --> Modules
Modules --> Mongo[(MongoDB)]
Modules --> OpenDota[OpenDota API + explorer]
Modules --> Valve[Valve patch datafeed]
Modules --> Groq[Groq LLM]
Modules --> Steam[Steam OpenID]
See docs/architecture.md for the data flows (match sync, the draft AI, rooms, caching).
| Area | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack), React 19 |
| Language | TypeScript (strict) |
| UI | Tailwind CSS 4, shadcn/ui (Radix), lucide icons |
| Forms | React Hook Form + Zod |
| Data | MongoDB (official driver) |
| Upstreams | OpenDota API and explorer, Valve patch datafeed, Steam OpenID, Groq (OpenAI-compatible) |
| Tests | Vitest (unit, component, integration), Playwright (E2E) |
| Delivery | GitHub Actions → Vercel (staging and production) |
Prerequisites: Node 22 (see .nvmrc), and a MongoDB you can reach (local mongod or Atlas).
git clone https://github.com/thisisdajaaa/dota-den.git
cd dota-den
npm ci
cp .env.example .env.local # then set APP_URL and MONGODB_URI at least
npm run db:indexes # create collections' indexes
npm run dev # http://localhost:3000
Signing in locally needs a real Steam login at APP_URL. For development without Steam, set AUTH_TEST_MODE=true
in .env.local to use a fake identity provider (it is refused in production).
Optional keys: OPENDOTA_API_KEY (higher OpenDota limits) and GROQ_API_KEY (the AI captain's language model and the
AI review). See docs/data-sources.md for how to get them.
| Script | What it does |
|---|---|
npm run dev | Start the dev server |
npm run build / npm start | Production build and server |
npm run check | Format check, lint, typecheck, unit + component tests, integration tests |
npm test | Unit and component tests |
npm run test:integration | Integration tests against MongoDB (MONGODB_TEST_URI) |
npm run test:e2e | Playwright end-to-end tests |
npm run db:indexes | Create or update all MongoDB indexes (idempotent) |
npm run draft:calibrate | Refit the draft outlook's weights on recent games (details) |
MONGODB_TEST_URI, default mongodb://127.0.0.1:27017): repositories, unique
indexes and concurrency.tests/e2e/support/opendota-fixture-server.mjs), including a phone-width suite. Run one Playwright suite at a time;
on a laptop, --workers=2 is a good default.| Branch | Environment | URL |
|---|---|---|
develop | Staging | https://dota-den-develop.vercel.app |
main | Production | https://www.dota-den.com |
Feature branches merge into develop; releases merge develop into main. GitHub Actions
(.github/workflows/ci-cd.yml) runs lint, typecheck, tests and build, then the E2E suite, then deploys a prebuilt
bundle to Vercel, applies database indexes, and smoke-tests the deployment. Each environment is a protected GitHub
environment with its own secrets. Details: docs/operations.md.
All configuration is environment variables, validated at startup (src/common/config/env.ts). The required ones are
APP_URL and MONGODB_URI; everything else has a safe default or turns a feature off. The full reference, including
operator tuning (rate limits, room caps, caches, timeouts) and the optional Redis and background-job settings, is in
docs/configuration.md. .env.example lists every variable with its default.
Dota Den is an unofficial fan project. It is not affiliated with or endorsed by Valve Corporation. Dota 2 is a registered trademark of Valve Corporation.
src/
app/ Routes: (public) and (app) pages, api/ route handlers
components/ Shared UI (layout, shadcn/ui primitives)
common/ Config, db, errors, HTTP kit (controller, envelope, API client), LLM client, providers
modules/<feature>/ <feature>.controller/service/repository/model/ports/container.ts, index.ts,
schemas/ dtos/ domain/ infrastructure/ ui/
scripts/ Index setup, draft calibration
tests/
unit/ component/ integration/ e2e/
docs/ Architecture, configuration, API, draft engine, data sources, operations, ADRs
develop (feature/<name> or fix/<name>) and open a pull request into develop.npm run check, npm run build and the E2E suite must pass.<feature>.container.ts. Record significant decisions as an ADR in docs/adr.Area: what changed), then the why.No license yet: all rights reserved by the author until one is added.