Skip to main content
Submit Results

Public Roadmap

See what we're building and what's coming next for DigiLab.

Current: v2.5.0

Upcoming

v2.5.0 6 items

Dedicated Search Results Page

Planned

Full /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.

ux feature

Set As My Profile on Tamer Page

Planned

Subtle '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.

ux feature

Account-Player Link & Discord Avatar

Planned

Add 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.

auth ux feature

Matchup Matrix on Meta Page

Planned

Cross-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.

feature data

Entity Page Recommendations

Planned

Add '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.

ux feature

prefers-color-scheme Parity in components.css

Planned

Duplicate 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.

accessibility dark-mode
v2.6.0 1 item

Multi-Game Workflow Adapters

Planned

Remaining 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

architecture platform workflows

Recently Completed

v2.5.0

Ratings Proc Fix & Performance

v2.5.0

Fixed 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.

bugfix performance database

Multi-Game Phase 3 — Admin Interface

v2.5.0

Admin 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.

architecture platform admin

Multi-Game Phase 2 — Per-Game Theming & Terminology

v2.5.0

WS1-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.

architecture platform theming

Multi-Game Platform Foundation (Phase 1)

v2.5.0

Complete 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().

architecture platform database

TCGPlayer Affiliate Integration & Card Printings

v2.5.0

Full 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.

feature monetization data

API Security Hardening & External API Keys

v2.5.0

Full 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.

security api admin
v2.4.0

Homepage Featured Spotlight & Decklists Teaser

v2.4.0

Four-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).

feature data accessibility

Homepage Identity Lock-In System

v2.4.0

Three-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.

ux feature

Homepage 3D Globe Hero

v2.4.0

Interactive 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.

ux feature

Homepage Phase 2 Quick Wins

v2.4.0

Dark 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 feature

UX Quick Wins — Tooltips & Accessibility

v2.4.0

Terminology 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.

ux accessibility

Homepage SSR & Data-Forward Quick Wins

v2.4.0

Server-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.

ux performance seo

Card Analytics & Breakdown

v2.4.0

Per-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.

feature data

Entity Page Crosslinking

v2.4.0

Decklists 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.

ux feature
v2.3.0

Submission Flows

v2.3.0

Migrate 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).

feature mobile

Ratings Engine Port

v2.3.0

PL/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.

admin infrastructure

Shiny App Sunset

v2.3.0

Redirect 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.

infrastructure migration
v2.2.0

Auth System

v2.2.0

Better 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).

infrastructure auth

Admin Login & Discord Auto-Linking

v2.2.0

Login 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.

admin auth

Game-Scoped Role Schema

v2.2.0

game_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.

infrastructure auth

Protected Route Pattern & Admin Layout Shell

v2.2.0

Middleware 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.

admin auth

Edit Tournaments

v2.2.0

Migrate 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.

admin feature

Edit Stores

v2.2.0

Migrate 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.

admin feature

Edit Players

v2.2.0

Migrate player management: searchable player list, inline edit (display name, member number, anonymization), merge suggestions with one-click merge (super admin). Scene-filtered.

admin feature

Edit Decks

v2.2.0

Migrate 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.

admin feature

Edit Scenes

v2.2.0

Migrate scene management: scene list with hierarchy display, CRUD form (display name, slug, type, location), Discord webhook on create. Super admin only.

admin feature

Manage Admins

v2.2.0

Admin 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.

admin feature

Notification Queue

v2.2.0

Admin 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 feature

Admin Audit Log

v2.2.0

admin_audit_log table tracks all admin CRUD operations with field-level diffs. Non-blocking logging via audit.ts. Integrated across all admin endpoints.

admin infrastructure
v2.1.0

PWA Update

v2.1.0

Enhanced manifest with shortcuts, Apple meta tags, lightweight service worker with LRU-capped card art cache. Removed PWA installability from app.digilab.cards subdomain.

mobile infrastructure

Deck Archetype Grouping

v2.1.0

Group 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.

feature meta

In-Site Decklist Viewer

v2.1.0

View 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).

feature data

Scene-Reactive Listing Pages

v2.1.0

All listing pages use path-based scene URLs (/page/[slug]). Nav links, breadcrumbs, and CTAs preserve active scene context. Legacy ?scene= URLs 301-redirect.

ux feature

Scene-Scoped Insights URLs

v2.1.0

Each scene has a shareable insights URL (/insights/[slug]) that loads the dashboard pre-scoped. TOs and communities can share their scene's analytics directly.

feature seo

Bandai TCG+ Decklist Whitelist & JSON Review

v2.1.0

Add Bandai TCG+ to the allowed decklist URL whitelist. Review the saved decklist JSONs for formatting consistency and correctness.

data fix

Large Tournament Page Performance

v2.1.0

Fix 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.

fix performance

Round Multiplier Curve B — Large Event Rating Scaling

v2.1.0

Adjust 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.

ratings methodology content