KANA CARDS

Account

Username
Password

Dota 2 Player

Link your OpenDota account ID. Future features may include granting you a card representing yourself as a player.

Your Tags

Twitch Account

My Roster

This week: pts Season: pts

Draw

Common
Rare
Epic
Legendary

Season Standings

RankUserSeason pts

Weekly Standings

RankUserWeek pts

Players

Player Team Matches Avg pts Total pts MVPs

Player average performance

#PlayerMAvg

Single match performance

RankPlayerFantasy pts

MVP leaderboard

RankPlayerMVPs

Teams

TeamMatchesPlayers

Season Schedule

Getting Started

Kana Cards is a fan-made card-collecting game tied to real Dota 2 league matches. Collect cards, build a roster, and score points based on how your players actually perform each week.

Cards & Drawing

  • Each card represents a real player from the Finnish Dota 2 league. Cards come in four rarities: Common, Rare, Epic, Legendary.
  • Draw a card by spending 1 token. Cards are generated fresh at draw time (rarity and player are rolled individually, not pulled from a shared pre-built deck) — the system prefers players you do not yet own — duplicates are only possible once you have a card for every available player.
  • Higher rarity cards receive a flat point bonus on top of base stats and may come with stat modifiers that amplify specific scoring categories.

Roster & Weekly Lock

  • Activate up to 5 cards as your active roster. Remaining cards sit on the bench and do not score.
  • Every week the roster locks automatically. Locked cards earn fantasy points from every league match played during that week.
  • You can swap bench cards in and out freely before the lock, but cannot change the roster once the week is locked.

Earning Tokens

  • +1 token at the start of each new week.
  • Watch streams on Twitch — linked viewers receive token drops when the broadcaster selects a match MVP.
  • Redeem promo codes distributed by admins for bonus tokens.

Watching on Twitch

Linking your account

  • Open the Kana Cards panel on the league's Twitch stream and link your account: go to Profile → Generate Twitch Code, then enter the 6-character code in the Twitch panel. The code expires after 10 minutes.
  • Once linked, your token balance is shown in the panel, and watching a linked stream makes you eligible for a token drop whenever the broadcaster confirms a match MVP.

Looking to broadcast instead of watch? See the Streamers subtab above.

Scoring & Modifiers

Fantasy points are calculated per match from raw in-game stats. Most stats are multiplied by a weight and summed. Deaths use a survival bonus pool: you start with a fixed point reward for surviving, reduced by a set amount per death — never going below zero.

Stat Weights

StatPoints per unit

Rarity Bonus

Flat multiplier applied to a card's total score.

RarityBonus

Card Modifiers

Modifiers are assigned at draw time and each boost one scoring stat's contribution.

RarityModifiers

The confirmed match MVP (see the Streamers subtab) also receives a bonus on their fantasy score for that specific match, applied retroactively and reflected in all leaderboards and roster totals. Current MVP bonus: .

Weights are configured by administrators and may be adjusted between seasons. The values above are live — they update whenever an admin changes the weights.

Linking Your Dota 2 Profile

If you're a league player, you don't need a Fantasy account at all for your real match performance to count — every card featuring you scores points for whoever holds it, based purely on your in-game stats each week. Creating an account and linking your Dota 2 profile is entirely optional, and only affects how your own tags are displayed.

How to link

  • Register a Fantasy account (or log into an existing one), then open the Profile tab.
  • Enter your Dota 2 (OpenDota) player ID in the linking field. This self-reported ID connects your user account to the Card records that represent you.
  • Linking is optional and can be changed or removed at any time from the Profile tab.

What linking unlocks

  • If admins have granted you tags (e.g. a caster or player-of-note tag), linking your player ID makes those tags appear as sticker badges composited onto your cards and as chips next to your name on the leaderboard.
  • The Profile tab shows a Your Tags section so you can see what's granted, and hints if you have tags but haven't linked your ID yet.
  • Without linking, any tags you've been granted exist but won't be visually attached to your cards or leaderboard entry.

Applying & Installing

Applying (Local Test status)

  • While the Kana Cards extension is still in Twitch's Local Test status (pre-public-release), Twitch requires each broadcaster's channel to be individually whitelisted. Contact a Kana Cards developer for a test install link to get your channel added.
  • Once the extension has passed Twitch review and is publicly released, this step is no longer needed — any broadcaster can install it directly from the Twitch Extension Manager.

Installing

  • Add the Kana Cards extension to your channel from the Twitch Extension Manager (or via the test install link while in Local Test status).
  • No URL configuration is required on your side — the backend connection is pre-configured globally by the developer and applies automatically to every install.
  • Once installed, a Quick Actions panel appears automatically in your Twitch Stream Manager's Live Config view.

Selecting a Match MVP

Using Quick Actions

  • After a match, open Quick Actions (Live Config view) in Twitch Stream Manager and click Select match MVP.
  • Select the series (team vs team) → the specific match (Match 1, Match 2…) → the MVP player, then confirm.

What confirming does

  • An automatic, one-time token drop fires to eligible linked viewers watching your stream — re-confirming a different MVP for the same match does not re-drop tokens.
  • The confirmed MVP receives a configurable fantasy score bonus applied to their score for that specific match, reflected in all leaderboards and roster totals.

Design Decisions

A high-level look at a few notable architecture choices behind Kana Cards. For full depth, see the links at the bottom of this panel rather than the summaries below.

  • Dynamic per-draw card generation — cards are generated at draw time (rarity rolled from configurable weights, player chosen with a proportionality bias) instead of being pulled from a shared pre-built static pool.
  • SQLite with a deploy-time safety net — SQLite is used instead of a heavier database engine, paired with a versioned migration registry and a pre-deploy backup script so schema changes and deploys can't silently corrupt or lose data.
  • Admin-driven season lifecycle — ending a season, archiving standings, and starting the next one are all admin actions (season end/reset endpoints, manual week creation) rather than being controlled by env-var season boundaries requiring a redeploy.
  • Demo Mode for the season lifecycle — an env-gated (DEMO_MODE=true) clock override and disposable account seeder lets the entire pre-lock → lock → scored arc be demonstrated on demand, structurally absent in production.
  • Generic tag system decoupled from linking — admin-granted tags (stickers/leaderboard chips) are a separate concern from Dota 2 profile linking; a new tag needs only a database row and an image asset, and tags persist even before a player links their profile.

Read more

User Management

UserTagsTokensActions

Week Management

LabelStartEndLockedRosters

Player Management

NameTeamOpenDota IDActive CardsStatus

Audit Log

TimeActorActionDetail

League Management

IDNameMatchesMonitoredActions

Tag Definitions

Define tag types. Grant them to users via User Management above.

KeyLabel

Promo Codes

CodeTokensUses

Scoring Weights

StatWeight

Notifications

Broadcast a one-time message to all logged-in players during the active window.

MessageStartEndSeen

Token Grant Events

All logged-in players claim tokens automatically during the active window.

TokensStartEndClaims

Refresh Schedule Cache

Busts the in-memory cache and re-fetches from the Google Sheet.

Recalculate Fantasy Points

Applies current weights to all stored match stats.

Re-enrich Player Profiles

Fetches hero stats and ban data for all players, then regenerates AI bios if ANTHROPIC_API_KEY is set.

Season Lifecycle

Archive final standings before resetting for the next season. Standings are computed live and are destroyed by reset — always run End Season first.

Deletes matches, weeks, stats, the Player Pool, and all cards — retains users, tags, archives
SeasonArchivedUsers

Matches

MatchLeagueTeam 1Team 2Start TimeMVPVODAction