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
—