Real-time game stats via Sportradar. Fully wired in both portal and legacy builder.
Game schedule with scores. Ticket URLs are hardcoded to Cleveland Browns — needs dynamic resolution per team/venue.
Lead-gen sweepstakes module. Wired in portal and legacy builder. Used by OKC Thunder.
Opens any external URL in-app. Named slots (×10 in portal). Used for Qualtrics surveys, programs, offers.
Tag-based CE tiles from TagExperience table. Uploaded via CSV per physical tag. No portal editor yet — managed via CSV upload tool.
Embeds any URL in a full-screen iframe. Available in portal. Not exposed via legacy builder.
Suite-level branding overlay. Portal-only. Not available in legacy builder.
StadiumTiles, ExpressTiles, LegalTiles, CommunityInitiative — now fully generic and portal-configurable. Items managed through new TileItemsEditor UI.
Fan polls, quizzes, live votes via VoteNow SDK. Race condition fixed (2026-06-11). Seat identity passed on login_ready event. Error fallback UI pending.
Fetches game questions, renders answer UI. Missing: addToSelection(), submitEntry(), thank-you screen, validation. Entry submission not wired.
Football roster works. v2 portal routing gap — module.item='roster' has no direct component key. Basketball/generic routing needs fixing.
Submit + response endpoints exist. Missing: question schema entity, fetch endpoint (VUE_APP_METRICS unset), portal question builder. Planning done — implementation pending.
Renders raw dataSet only. Plan: YouTube/Vimeo iframe embeds + HLS via hls.js. Portal editor and store model also needed.
Renders "Shop" text only. Plan: banner card with image + CTA → openExternal(shopUrl). Redirect pattern (no embedded checkout). Low effort.
Store model and data type exist. ContentTileContainer / EditorTileContainer components missing. Not registered in MenuContainer — unreachable in app.
Component exists but not registered in MenuContainer — unreachable from the app menu. One-line registration needed.
Available in legacy builder; commented out in portal palette. Renderer is a stub. Separate IncidentReport-BackEnd service exists but not wired.
Create/edit apps, module ordering, brand selector, mobile preview iframe, asset manager with drag-drop and auto-refresh.
Dynamic module system — Content*/Editor* component pairs for all major modules including new TileItemsEditor for venue tile modules.
Live iframe preview now bypasses Redis cache (fixed). CE tiles always show empty in preview — tagShortId not passed to preview endpoint. Fix planned.
S3-backed asset library. Drag-drop upload, Add More, auto-refresh after upload, newest-first sort. 12 venue folders across NFL/NBA.
Portal saves via PUT but never busts cache — editors see stale data. Planned: "Clear Cache" button calling DELETE /admin/cache/application/:id after save.
No portal editor for survey questions. Submit/response APIs exist in ds-api; question schema entity and fetch endpoint need to be built.
Open Backlog Items
Enhance
CE tiles in portal preview — pass tagShortId through preview endpoint to fetch real TagExperience rows
Enhance
Portal clear-cache button — call DELETE /admin/cache/application/:id after autoSave() in EditApplication.vue
Debt
CacheService documentation — cache not auto-busted after writes (CSV upload, portal saves)
Enhance
Telescope error fallback UI — sdkError flag set but template shows nothing when votenow.tv fails to load
Bug
ScheduleCard ticket URLs hardcoded to CLE / Ticketmaster — replace with dynamic lookup per team/event
Bug
Telescope duplicate entry in configs.app.js line 43 + "External Url" label misleading in portal editor
Enhance
CustomRoster — register in MenuContainer.vue (component exists, unreachable)
Enhance
GamingBasic — implement addToSelection() + submitEntry() + thank-you screen + validation
Infrastructure & Deployments
ds-api (stage)
api-stage.digitalseat.media
portal.digitalseat (stage)
demo-client-v2.digitalseat.media · AWS Amplify
app.digitalseat (stage)
Stage branch deployed
Redis Cache
App / Tag / Venue layers active
S3 Assets
12 venue folders · 6 teams/venues
Sportradar API Key
Must be updated per new team / service activation
AWS IAM / OIDC
GitHub OIDC trust · portal-digitalseat-stage-deploy role
DEVLOG System
Post-commit hooks · all 6 repos
Survey API (ds-api)
Submit + responses wired · question endpoint missing
Gaming API
GET /games wired · POST /entries pending
Question schema entity · GET /surveys/:id endpoint · VUE_APP_METRICS env · portal question builder UI. Planning done — implementation next session.
YouTube/Vimeo iframe + HLS via hls.js + native MP4. Portal editor + store model. Lazy-load HLS only when needed. Metrics on play/complete.
Banner card + outbound CTA to Fanatics / team store. Low effort — redirect-only, no embedded checkout. shopModel + ContentShop.vue + ShopModule.vue.
Plan approved. Uses existing application.override JSON pattern — no new API endpoints. 4 app components + EditorVenueTiles.vue + CLE seed script. Branches ready.
Wire addToSelection() + submitEntry() POST. Add thank-you screen, required-field validation, game expiry check. Reuse EnterToWin ThankYou component pattern.
Audit LiveStats, LiveSchedule, LiveRoster, StatsContainer. Verify Sportradar wiring, confirm no CLE-specific hardcoding, ensure multi-sport readiness.