Public Roadmap
See what we're building and what's coming next for DigiLab.
Upcoming
Dedicated Search Results Page
PlannedFull /search?q= page with paginated results across players, stores, scenes, and decks. Enter key in hero search navigates here. Shareable URLs. Replaces the dropdown-only search UX.
Set As My Profile on Tamer Page
PlannedSubtle 'Set as my profile' button on tamer pages for visitors not yet locked in. Stores player identity in localStorage and redirects to homepage with personal strip visible.
Account-Player Link & Discord Avatar
PlannedAdd player_id column to user table to bridge auth accounts to player profiles. Auto-match via discord_user_id or member_number where possible. Personal strip avatar upgrades from initial letter to Discord profile picture for linked accounts. Admin UI to manually link accounts. Foundation for future server-side personalization.
Matchup Matrix on Meta Page
PlannedCross-deck matchup heatmap on the meta listing page. New query joining match data across archetype pairs, Highcharts heatmap, responsive table fallback. Similar to insights heatmap but scoped to meta filters.
Entity Page Recommendations
PlannedAdd 'Similar Decks', 'Popular in Your Scene', or 'If you play this, you might face...' sections at the bottom of deck and tamer pages to keep users exploring.
prefers-color-scheme Parity in components.css
PlannedDuplicate all [data-theme='dark'] rules in components.css with @media (prefers-color-scheme: dark) variants, matching the pattern in tokens.css. Ensures system dark mode works without JS theme toggle.
Multi-Game Workflow Adapters
PlannedRemaining workflow gaps for multi-game support: - sync-cards: Per-game card source adapter (digimoncard.io is Digimon-only, need equivalent for each game) - backfill-decklists: Per-game deckbuilder URL parsers (current parser assumes digimoncard.io format) - classify-decklists: Move hardcoded Python archetype rules to DB-driven rules scoped by game_id - parse-digimoncard-io: Digimon-only, not scalable — needs per-game equivalent or unified card source - player_scenes PK should include game_id for multi-game isolation - player_rating_history unique constraint should include game_id - Consider debounce/cooldown on ratings recalculation to prevent abuse from rapid submissions
Recently Completed
Ratings Proc Fix & Performance
v2.5.0Fixed ratings not applying to submitted tournaments — duplicate stored procedure overloads from multi-game migration caused silent failures. Dropped stale overloads, fixed ON CONFLICT mismatch. Moved snapshot backfill out of per-submission path (only needed at format end). Incremental recalc: 152s → ~1s.
Multi-Game Phase 3 — Admin Interface
v2.5.0Admin pages fully game-aware: GameConfig-driven validation helpers (getDeckColorNames, getEventTypes, getDeckColorMap), dynamic CSS tokens in AdminLayout, game indicator pill in sidebar, window.__GT for client scripts, dropdown options from GameConfig (deck colors, event types, set types), dashboard queries scoped by game_id, auth sync for all active games, per-game role badges in users list.
Multi-Game Phase 2 — Per-Game Theming & Terminology
v2.5.0WS1-WS5 complete: CSS token split (base + per-game), GameConfig expansion (terminology, card categories, event types, mascot, branding), ~100 hardcoded references replaced across 14 pages, window.__GT client global, playerUrl()/deckUrl() helpers, platform subdomain guard. WS6-WS11 complete: blog game tags, about/FAQ feature tags, site metadata from config, mascot game-awareness, brand/publisher text, dynamic manifest.json. Gap-closing: Highcharts theme reads CSS custom properties at runtime for per-game chart colors, Header renders game-aware logo with powered-by subtitle.
Multi-Game Platform Foundation (Phase 1)
v2.5.0Complete multi-tenant architecture: game_id columns on 18 tables, games/store_games/scene_games tables, 7 MV rebuilds, game-scoped stored procedures, hostname-based game context middleware, 102 query functions + 30+ API endpoints + 21 admin endpoints scoped by gameId. GameConfig system ready for second game onboarding. All additive — existing Digimon site unchanged. Gap-closing: formats composite PK (game_id, format_id), decklist_view_counts game_id, store_game_activations audit table, unique idx_players_game_slug, game-scoped uniqueSlug().
TCGPlayer Affiliate Integration & Card Printings
v2.5.0Full TCGPlayer integration: affiliate buy links (Impact URL wrapping with graceful fallback), market/low pricing from TCGCSV, card_printings table (8,591 printings — standard, alt art, promo, reprint, pre-release), alt art thumbnail gallery in card modal with per-printing prices, TCGPlayer CDN images (400×559 upgrade from 300×419), daily price sync + monthly printings sync workflows, shared Python module for workflow dedup.
API Security Hardening & External API Keys
v2.5.0Full security pass: CORS headers on all API responses, SHA-256 hashed API keys for external consumers, access gate on 22 public data endpoints (first-party browser detection via Sec-Fetch-Site/Origin + API key for external), per-IP (60/min) and per-key (300/min) rate limiting, rate limiting on submit endpoints (3-5/hr), CVE mitigation (GHSA-mr6q-rp88-fx84), IP spoofing fix. Admin CRUD page for key management. FAQ section for API access.
Homepage Featured Spotlight & Decklists Teaser
v2.4.0Four-tab auto-cycling Featured section: Major Events (tiered priority), Popular Decklists (view-count with fallback), Rising Players (rating gains + scene), New Scenes (location + stats). WAI-ARIA Tabs with keyboard arrow nav, pause/resume button, 15s auto-cycle. Icon-only mobile. SSR global. Decklist view tracking via sendBeacon + session dedup. Full accessibility pass: focus-visible, reduced-motion, WCAG AA contrast. CSS tokenized. Meta shift callout deferred (needs mv_meta_over_time).
Homepage Identity Lock-In System
v2.4.0Three-state identity slot: Find your scene → Is this you? → Personal strip. localStorage-based with cached stats + background refresh. Search clicks save identity. Session-scoped dismissal.
Homepage 3D Globe Hero
v2.4.0Interactive globe.gl globe integrated into homepage hero (desktop only). Lazy-loaded via IntersectionObserver with /api/globe-data endpoint. Scene city nodes with pulse rings, arc connections, two perpendicular card art orbital rings, Agumon mascot traveling between scenes, Fresnel rim glow, scan line sweep, digitization burst particles. Mobile shows static Agumon. Hero copy refreshed.
Homepage Phase 2 Quick Wins
v2.4.0Dark mode CTA fix, hero CTA rename, format indicator on meta heading, community section (Discord + Ko-fi), meta cards redesigned with two-bar layout (play rate + 1st place %), Bayesian win rate sort (K=50) across homepage/insights/meta listing, rank column removed, mobile responsive fixes, format filtering on queryMeta.
UX Quick Wins — Tooltips & Accessibility
v2.4.0Terminology tooltips on stat labels across all pages, ARIA label audit on icon-only buttons, dark mode contrast fixes, homepage scope indicator, keyboard-accessible tooltips, decklists ARIA parity, rating explainer. Based on 4-persona UX review.
Homepage SSR & Data-Forward Quick Wins
v2.4.0Server-render global meta/tournaments/players data to eliminate skeleton loaders on first paint. Win rates on meta cards, social proof stats in hero, terminology cleanup (visible rating tiers, replace jargon). 30-minute edge cache.
Card Analytics & Breakdown
v2.4.0Per-card inclusion rates, copy distributions, and synergy scores on deck pages. Core/Tech card tabs, top performers toggle, tech choices filter. Powered by decklist_cards table and mv_card_inclusion_stats MV. Shared CardModal component reused on deck and decklist pages.
Entity Page Crosslinking
v2.4.0Decklists count column on meta listing (scene-filtered), Browse All link on deck page decklists, store name links on decklists listing. Strengthens navigation between meta, deck, and decklists pages.
Submission Flows
v2.3.0Migrate Submit Results to /submit/*: unified UI for public + admin users (conditional admin features). Three flows — tournament standings (CSV + screenshot OCR + PDF), match history (screenshot OCR + PDF + manual entry with opponent matching), decklist URL submission. Preact islands for multi-step wizards, OCR review grid, inline editing. OCR parsers ported from R to TypeScript (standings + matches, layout + text fallback).
Ratings Engine Port
v2.3.0PL/pgSQL stored procedure for Elo rating recalculation. Single-pass chronological algorithm, K-factors (48 provisional, 24 established), round multiplier (Curve B), achievement scores, format-era snapshots. Tested: 0 differences vs R output across 5,329 players.
Shiny App Sunset
v2.3.0Redirect app.digilab.cards to /submit (one-line Edge Middleware change). Map legacy deep links (app.digilab.cards/#submit_results → /submit). Remove /app page and Shiny iframe wrapper. All site links updated, FAQ updated. Middleware redirect and /app removal deferred to 2026-05-01.
Auth System
v2.2.0Better Auth with Discord OAuth, Google OAuth, and email/password. Game-agnostic users table, DB-backed sessions with httpOnly cross-subdomain cookies (.digilab.cards). Astro middleware with cookie-existence check (zero DB overhead for anonymous users).
Admin Login & Discord Auto-Linking
v2.2.0Login page at /login with Discord/Google OAuth and email/password. Discord-first lazy linking — match OAuth Discord ID to admin_users.discord_user_id on first login, auto-bridge legacy roles. Admin bar with user identity, role badge, and sign out.
Game-Scoped Role Schema
v2.2.0game_admin_roles table (user_id + game_id + role) for per-game admin permissions. Super admin remains a global flag on users table. Schema ready for multi-game but only Digimon seeded initially.
Protected Route Pattern & Admin Layout Shell
v2.2.0Middleware guard for /admin/* routes (redirect to /login if not admin). Admin layout shell with collapsible sidebar navigation, role-based section visibility, breadcrumb support, and dashboard with pending counts.
Edit Tournaments
v2.2.0Migrate tournament management: searchable tournament list with scene-scoped filtering, Info/Results/Matches sub-tabs, inline editing, result add/delete. Scene-filtered for scene/regional admins.
Edit Stores
v2.2.0Migrate store management: store list with inline edit, address autofill via Mapbox Geocoding, static map preview, recurring schedule management, online organizer toggle. Scene-filtered. Pending store request cards with approve/reject.
Edit Players
v2.2.0Migrate player management: searchable player list, inline edit (display name, member number, anonymization), merge suggestions with one-click merge (super admin). Scene-filtered.
Edit Decks
v2.2.0Migrate deck archetype management: filterable deck list by color, CRUD form with card ID search and preview, deck merge. Pending deck request cards. Super admin only.
Edit Scenes
v2.2.0Migrate scene management: scene list with hierarchy display, CRUD form (display name, slug, type, location), Discord webhook on create. Super admin only.
Manage Admins
v2.2.0Admin account management: create/edit/deactivate admin accounts, per-game role assignment (scene_admin, regional_admin), regional coverage assignment (country/state), Discord welcome DM on first login. Super admin and regional admin access.
Notification Queue
v2.2.0Admin notification bell in global header with scene-scoped pending counts. Request cards with approve/reject/resolve actions across stores, scenes, players, decks, and tournaments tabs. Deep-link hash routing from notification items to request tabs.
Admin Audit Log
v2.2.0admin_audit_log table tracks all admin CRUD operations with field-level diffs. Non-blocking logging via audit.ts. Integrated across all admin endpoints.
PWA Update
v2.1.0Enhanced manifest with shortcuts, Apple meta tags, lightweight service worker with LRU-capped card art cache. Removed PWA installability from app.digilab.cards subdomain.
Deck Archetype Grouping
v2.1.0Group related deck archetypes into families (e.g., all Gallantmon variants, all Royal Knights builds). Enables aggregated meta stats at the family level while preserving individual archetype granularity.
In-Site Decklist Viewer
v2.1.0View decklists directly on DigiLab instead of linking out to external deckbuilders. Card images from cached CDN, card grouping by type (Digimon, Tamer, Option), visual layout. Displayed on tournament pages (per-player decklists) and deck archetype pages (sample lists).
Scene-Reactive Listing Pages
v2.1.0All listing pages use path-based scene URLs (/page/[slug]). Nav links, breadcrumbs, and CTAs preserve active scene context. Legacy ?scene= URLs 301-redirect.
Scene-Scoped Insights URLs
v2.1.0Each scene has a shareable insights URL (/insights/[slug]) that loads the dashboard pre-scoped. TOs and communities can share their scene's analytics directly.
Bandai TCG+ Decklist Whitelist & JSON Review
v2.1.0Add Bandai TCG+ to the allowed decklist URL whitelist. Review the saved decklist JSONs for formatting consistency and correctness.
Large Tournament Page Performance
v2.1.0Fix tournament pages that break or perform poorly when there are many players. Affects both the Astro tournament detail page and the Shiny app tournament view.
Round Multiplier Curve B — Large Event Rating Scaling
v2.1.0Adjust the round multiplier formula to better reward performance at larger, longer events. Current formula caps at 1.4 (7+ rounds). Curve B keeps rounds 1-4 identical, then accelerates at 0.2/round above 4 (uncapped). Affects 133 tournaments (6%), 1,151 players (27%). Requires full rating rebuild. Accompanied by blog post explaining the methodology.