{"hero":{"eyebrow":"Private beta IPTV control room","title":"A premium TV platform that feels cinematic, fast, and under control.","subtitle":"UltimateTV starts on legal public iptv-org test feeds, then upgrades cleanly to licensed sources, customer billing, PayRam/SHKeeper checkout, affiliate growth, and TuliProx provisioning.","primaryAction":"Explore private beta","secondaryAction":"Open admin cockpit"},"plans":[{"name":"Starter","price":"$19","cadence":"monthly","description":"Perfect for one household testing the public-channel beta.","maxConnections":1,"accent":"cyan","features":["1 active connection","Xtream + M3U links","Public test channel bouquet","Email support"]},{"name":"Plus","price":"$29","cadence":"monthly","description":"The target private-beta plan with room for family devices.","maxConnections":2,"accent":"violet","features":["2 active connections","Priority provisioning","USDC / USDT checkout","Affiliate attribution ready"]},{"name":"Max","price":"$49","cadence":"monthly","description":"Designed for licensed premium bundles when commercial launch is approved.","maxConnections":4,"accent":"amber","features":["4 active connections","Multiple bouquets","Renewal automation","White-glove support"]}],"rails":[{"name":"World News","source":"iptv-org","channels":91,"status":"ready","artworkGradient":"linear-gradient(135deg,#00e5ff,#3b82f6)"},{"name":"Sports Tests","source":"iptv-org","channels":42,"status":"mapping","artworkGradient":"linear-gradient(135deg,#c084fc,#7c3aed)"},{"name":"Movies Preview","source":"licensed-source-slot","channels":0,"status":"awaiting licensing","artworkGradient":"linear-gradient(135deg,#fbbf24,#f97316)"},{"name":"Family & Kids","source":"iptv-org","channels":67,"status":"ready","artworkGradient":"linear-gradient(135deg,#34d399,#059669)"}],"lines":[{"name":"Living Room","username":"utv-demo-01","endpoint":"https://tv-dev.mukoti.com/get.php?username=demo&password=free-preview&type=m3u_plus","status":"active","expiresAt":"2026-07-14T04:07:52.7739252+00:00","maxConnections":2,"activeConnections":1},{"name":"Mobile Travel","username":"utv-demo-02","endpoint":"https://tv-dev.mukoti.com/player_api.php?username=demo&password=free-preview","status":"grace","expiresAt":"2026-06-26T04:07:52.7739252+00:00","maxConnections":1,"activeConnections":0},{"name":"Suspended Example","username":"utv-demo-03","endpoint":"https://tv-dev.mukoti.com/xmltv.php?username=demo&password=free-preview","status":"banned","expiresAt":"2026-06-21T04:07:52.7739252+00:00","maxConnections":1,"activeConnections":0}],"paymentProviders":[{"key":"payram","name":"PayRam","mode":"sandbox","settlement":"Card/onramp to stablecoin settlement","status":"preferred beta rail","rails":["Card onramp","USDC","USDT","Base"]},{"key":"shkeeper","name":"SHKeeper","mode":"sandbox","settlement":"Self-hosted direct crypto invoices","status":"wallet ops required","rails":["USDC","USDT","BTC-style callbacks"]},{"key":"legacy-card","name":"Legacy Cards","mode":"disabled","settlement":"Stripe/PayPal adapter slot","status":"post-licensing only","rails":["Cards","Disputes","Hosted checkout"]}],"resources":[{"name":"webfrontend","kind":"Blazor","endpoint":"https+http://webfrontend","status":"healthy","notes":"Public, customer, admin, affiliate, and system config surfaces."},{"name":"apiservice","kind":"ASP.NET Core API","endpoint":"https+http://apiservice","status":"healthy","notes":"MVP contracts, checkout previews, provisioning previews."},{"name":"worker","kind":".NET background service","endpoint":"n/a","status":"planned loop","notes":"Billing, webhook, expiry, affiliate, and TuliProx reconciliation jobs."},{"name":"postgres","kind":"PostgreSQL","endpoint":"connection: ultimatetv-db","status":"aspire-managed","notes":"Future source of truth for customers, subscriptions, lines, payments, affiliates."},{"name":"cache","kind":"Redis","endpoint":"connection: cache","status":"aspire-managed","notes":"Recommended over ad-hoc cache: distributed locks, idempotency, queue coordination."},{"name":"tuliprox","kind":"Container","endpoint":"http://tuliprox:8901","status":"configured placeholder","notes":"Downstream enforcement target for Xtream/M3U/EPG lines."}],"configItems":[{"area":"Ingress","name":"Edge strategy","value":"Aspire service discovery for MVP; Traefik/Caddy/YARP remains a deploy-time choice","state":"improved"},{"area":"Content","name":"Test source","value":"iptv-org public/free-to-air feeds only","state":"safe"},{"area":"Payments","name":"Default beta checkout","value":"PayRam first, SHKeeper available for direct crypto","state":"needs provider testing"},{"area":"Provisioning","name":"TuliProx mode","value":"reverse proxy + user_access_control + use_user_db","state":"target"},{"area":"Compliance","name":"Commercial launch","value":"blocked until licensing/entity/terms/privacy/refund/tax/provider review","state":"guardrail"}],"metrics":[{"label":"MRR preview","value":"$0","delta":"+ beta not live","tone":"neutral"},{"label":"Test channels","value":"36","delta":"+ public iptv-org","tone":"good"},{"label":"Active lines","value":"2","delta":"demo only","tone":"good"},{"label":"Webhook idempotency","value":"designed","delta":"not wired","tone":"warn"}],"activity":[{"at":"2026-06-23T03:56:52.7739252+00:00","actor":"system","action":"seed.demo_users","detail":"Seeded dev-only admin and customer users for dashboard review.","severity":"success"},{"at":"2026-06-23T03:58:52.7739252+00:00","actor":"system","action":"config.review","detail":"Traefik replaced as MVP dependency by Aspire service discovery; edge proxy deferred to deployment.","severity":"info"},{"at":"2026-06-23T04:00:52.7739252+00:00","actor":"billing","action":"provider.ready","detail":"PayRam and SHKeeper adapters represented behind IPaymentProvider contract.","severity":"success"},{"at":"2026-06-23T04:03:52.7739252+00:00","actor":"worker","action":"reconcile.preview","detail":"TuliProx line reconciliation is stubbed for active, grace, and banned states.","severity":"warning"}],"affiliates":[{"name":"Founding Partner","code":"FOUNDERS","status":"approved","commission":"20% recurring","balance":"$0.00"},{"name":"Installer Network","code":"INSTALL","status":"pending","commission":"$10 activation","balance":"$0.00"}],"users":[{"name":"UltimateTV Admin","email":"admin@ultimatetv.local","role":"Admin","status":"active","planName":"Internal","lineUsername":"admin-console","devPasswordHint":"dev-admin"},{"name":"Demo Customer","email":"demo@ultimatetv.local","role":"Customer","status":"active","planName":"Plus","lineUsername":"utv-demo-01","devPasswordHint":"dev-demo"}],"playlists":[{"name":"Demo M3U Plus","kind":"m3u_plus","url":"https://tv-dev.mukoti.com/get.php?username=demo&password=free-preview&type=m3u_plus","channelCount":36,"status":"verified","notes":"Use in IPTV players that accept Xtream/M3U links."},{"name":"HDHomeRun Lineup","kind":"lineup.json","url":"https://hdhomerun-dev.mukoti.com/lineup.json","channelCount":36,"status":"verified","notes":"Use for HDHomeRun-compatible clients and quick channel enumeration."},{"name":"XMLTV Guide","kind":"xmltv","url":"https://tv-dev.mukoti.com/xmltv.php?username=demo&password=free-preview","channelCount":36,"status":"available","notes":"Placeholder EPG feed generated for the curated public-channel test set."}],"management":{"dataStore":{"provider":"PostgreSQL","database":"ultimatetv-db","migrationState":"model-ready; EF migrations are the next persistence hardening step","secretSource":"Aspire connection reference and user secrets only"},"authPolicies":[{"area":"/admin","requirement":"Admin role","enforcement":"role-guard planned; route is explicitly classified as admin-only"},{"area":"/customer","requirement":"Authenticated customer session","enforcement":"customer data keyed by authenticated user"},{"area":"/api/dev/seed","requirement":"Development environment","enforcement":"forbidden outside Development"}],"entities":[{"name":"User","purpose":"Identity account and role boundary","persistenceState":"modeled"},{"name":"Plan","purpose":"Commercial package and connection policy","persistenceState":"modeled"},{"name":"Subscription","purpose":"Source of truth for billing/provisioning state","persistenceState":"modeled"},{"name":"Line","purpose":"TuliProx credential and endpoint assignment","persistenceState":"modeled"},{"name":"Payment","purpose":"Provider checkout, webhook, reconciliation state","persistenceState":"modeled"},{"name":"ProviderConfig","purpose":"PayRam, SHKeeper, content, and TuliProx settings","persistenceState":"modeled"},{"name":"AuditEvent","purpose":"Operator and automation trace","persistenceState":"modeled"}],"adminPlans":[{"id":"starter","name":"Starter","priceCents":1900,"currency":"USD","maxConnections":1,"isPublished":true},{"id":"plus","name":"Plus","priceCents":2900,"currency":"USD","maxConnections":2,"isPublished":true},{"id":"max","name":"Max","priceCents":4900,"currency":"USD","maxConnections":4,"isPublished":false}],"subscriptions":[{"id":"sub-demo-001","customerEmail":"demo@ultimatetv.local","planId":"plus","state":"active","lineUsername":"utv-demo-01","currentPeriodEnd":"2026-07-14T04:07:52.7739252+00:00"},{"id":"sub-demo-002","customerEmail":"traveler@ultimatetv.local","planId":"starter","state":"past-due","lineUsername":"utv-demo-02","currentPeriodEnd":"2026-06-26T04:07:52.7739252+00:00"},{"id":"sub-demo-003","customerEmail":"suspended@ultimatetv.local","planId":"starter","state":"suspended","lineUsername":"utv-demo-03","currentPeriodEnd":"2026-06-21T04:07:52.7739252+00:00"}],"auditEvents":[{"at":"2026-06-23T03:47:52.7739252+00:00","actor":"system","eventType":"seed","entityId":"dev","notes":"Development users, plans, and subscriptions prepared."},{"at":"2026-06-23T04:01:52.7739252+00:00","actor":"admin@ultimatetv.local","eventType":"plan.review","entityId":"plus","notes":"Plus plan published for private beta preview."},{"at":"2026-06-23T04:05:52.7739252+00:00","actor":"worker","eventType":"provisioning.preview","entityId":"sub-demo-001","notes":"Line state mapped from active subscription."}],"seedMode":"explicit development seed only"},"provisioning":{"stateRules":[{"subscriptionState":"pending","lineState":"not-created","tuliProxAction":"hold until settled payment"},{"subscriptionState":"active","lineState":"enabled","tuliProxAction":"create or update TuliProx line"},{"subscriptionState":"past-due","lineState":"enabled-grace","tuliProxAction":"short grace window and retry billing"},{"subscriptionState":"suspended","lineState":"disabled","tuliProxAction":"disable access without deleting audit history"},{"subscriptionState":"expired","lineState":"disabled","tuliProxAction":"disable and keep renewal path"},{"subscriptionState":"cancelled","lineState":"disabled","tuliProxAction":"disable at period end"}],"tuliProxLines":[{"subscriptionId":"sub-demo-001","username":"utv-demo-01","desiredState":"enabled","actualState":"enabled","driftStatus":"in-sync"},{"subscriptionId":"sub-demo-002","username":"utv-demo-02","desiredState":"enabled-grace","actualState":"enabled","driftStatus":"expiry-drift"},{"subscriptionId":"sub-demo-003","username":"utv-demo-03","desiredState":"disabled","actualState":"enabled","driftStatus":"access-drift"}],"failures":[{"subscriptionId":"sub-demo-003","reason":"Downstream line still enabled after suspension preview.","retryCount":1,"nextRetryAt":"2026-06-23T04:17:52.7739252+00:00"}],"lastReconciledAt":"2026-06-23T04:03:52.7739252+00:00"},"payments":{"contracts":[{"providerKey":"payram","checkout":"hosted sandbox checkout","webhook":"signed provider callback","refunds":"provider-supported refunds only","signaturePolicy":"verify configured secret before accepting live webhooks","settlementPolicy":"settled stablecoin event activates subscription"},{"providerKey":"shkeeper","checkout":"wallet invoice","webhook":"self-hosted callback","refunds":"manual refund workflow","signaturePolicy":"verify callback signature/secret before accepting live webhooks","settlementPolicy":"confirmed invoice activates subscription"}],"providerEvents":[{"providerKey":"payram","providerEventId":"evt-payram-demo-settled","status":"settled","subscriptionId":"sub-demo-001","idempotent":true,"receivedAt":"2026-06-23T04:02:52.7739252+00:00"},{"providerKey":"shkeeper","providerEventId":"evt-shkeeper-demo-pending","status":"pending","subscriptionId":"sub-demo-002","idempotent":true,"receivedAt":"2026-06-23T04:04:52.7739252+00:00"}],"lifecycleJobs":[{"name":"renewal-reminders","cadence":"daily","status":"planned","lastResult":"not due in demo data"},{"name":"subscription-expiry","cadence":"hourly","status":"planned","lastResult":"past-due and expired states represented"},{"name":"payment-reconciliation","cadence":"15 minutes","status":"planned","lastResult":"webhook replay endpoint is idempotent"},{"name":"refund-review","cadence":"manual queue","status":"planned","lastResult":"refunds do not auto-disable without operator policy"}],"livePaymentGuard":"Live payments disabled until licensing, entity, tax, provider, and wallet operations gates are approved."},"customerPortal":{"account":{"email":"demo@ultimatetv.local","displayName":"Demo Customer","planName":"Plus","subscriptionState":"active","currentPeriodEnd":"2026-07-14T04:07:52.7739252+00:00"},"signupSteps":[{"order":1,"name":"Account","state":"ready","notes":"Email/password identity boundary modeled for development."},{"order":2,"name":"Plan","state":"ready","notes":"Published Starter and Plus plans available in private beta preview."},{"order":3,"name":"Checkout","state":"sandbox-only","notes":"PayRam and SHKeeper previews only; live mode is blocked."},{"order":4,"name":"Provisioning","state":"ready-preview","notes":"Settled payment maps to TuliProx line reconciliation."},{"order":5,"name":"Device setup","state":"ready-preview","notes":"M3U, Xtream-style, and HDHomeRun links are exposed after active subscription."}],"actions":[{"key":"renew","label":"Renew subscription","state":"available-preview","result":"Creates a sandbox checkout session for the current plan."},{"key":"cancel","label":"Request non-renewal","state":"available-preview","result":"Marks subscription to cancel at period end after confirmation."},{"key":"support","label":"Contact support","state":"available","result":"Routes account and line context to operator support."}],"links":[{"kind":"M3U Plus","url":"https://tv-dev.mukoti.com/get.php?username=demo&password=free-preview&type=m3u_plus","visibility":"active-customer"},{"kind":"Xtream API","url":"https://tv-dev.mukoti.com/player_api.php?username=demo&password=free-preview","visibility":"active-customer"},{"kind":"XMLTV","url":"https://tv-dev.mukoti.com/xmltv.php?username=demo&password=free-preview","visibility":"active-customer"},{"kind":"HDHomeRun","url":"https://hdhomerun-dev.mukoti.com/lineup.json","visibility":"active-customer"}],"billingStates":[{"state":"pending","display":"Waiting for payment","customerMessage":"Your TV line is created after payment is confirmed."},{"state":"active","display":"Active","customerMessage":"Your subscription and TV line are active."},{"state":"past-due","display":"Payment retrying","customerMessage":"Access may remain available for a short grace period."},{"state":"expired","display":"Expired","customerMessage":"Renew to restore line access."},{"state":"cancelled","display":"Cancels at period end","customerMessage":"Access remains until your paid period ends."}]},"affiliateProgram":{"referrals":[{"code":"FOUNDERS","landingPath":"/?ref=FOUNDERS","signups":12,"conversions":4,"attributionWindow":"first-touch 30 days"},{"code":"INSTALL","landingPath":"/?ref=INSTALL","signups":5,"conversions":1,"attributionWindow":"first-touch 30 days"}],"ledger":[{"affiliateCode":"FOUNDERS","subscriptionId":"sub-demo-001","eventType":"activation","amountCents":580,"currency":"USD","status":"pending"},{"affiliateCode":"FOUNDERS","subscriptionId":"sub-demo-001","eventType":"renewal","amountCents":580,"currency":"USD","status":"preview"},{"affiliateCode":"INSTALL","subscriptionId":"sub-demo-002","eventType":"activation","amountCents":1000,"currency":"USD","status":"hold-past-due"}],"payouts":[{"id":"po-demo-001","affiliateCode":"FOUNDERS","amountCents":580,"currency":"USD","status":"requested","operatorAction":"approve, reject, or mark paid after external payout"},{"id":"po-demo-002","affiliateCode":"INSTALL","amountCents":1000,"currency":"USD","status":"held","operatorAction":"clear past-due subscription before approval"}],"guardrails":[{"name":"Self-referral","enforcement":"blocked","notes":"Customer and affiliate identity/email cannot match."},{"name":"Duplicate attribution","enforcement":"first-touch wins","notes":"Later referral codes are stored but do not overwrite the original conversion."},{"name":"Manual payout","enforcement":"operator approval","notes":"The app tracks status only and never sends funds automatically."}]},"operations":{"healthChecks":[{"name":"webfrontend","target":"http://127.0.0.1:3000/health","status":"configured","failureAction":"restart Aspire resource"},{"name":"apiservice","target":"http://127.0.0.1:3001/health","status":"configured","failureAction":"inspect API logs and DB/cache references"},{"name":"tuliprox-m3u","target":"http://127.0.0.1:8901/get.php","status":"documented","failureAction":"restart TuliProx container and validate playlist"},{"name":"hdhomerun-lineup","target":"http://127.0.0.1:5004/lineup.json","status":"documented","failureAction":"restart TuliProx container"}],"backups":[{"resource":"PostgreSQL","cadence":"nightly before beta","restoreDrill":"restore into non-production before go-live","storage":"encrypted host/object storage"},{"resource":"TuliProx config","cadence":"on change","restoreDrill":"restore from repo + secret store","storage":"git for safe config, host secret store for runtime auth"},{"resource":"Cloudflare tunnel","cadence":"on change","restoreDrill":"recreate service and validate public routes","storage":"Cloudflare dashboard plus host service manager"}],"loadTargets":[{"surface":"API dashboard","target":"100 concurrent beta admin/customer sessions","currentStatus":"target documented"},{"surface":"Playlist endpoint","target":"500 playlist fetches/hour","currentStatus":"target documented"},{"surface":"Webhook ingestion","target":"replay-safe duplicate events","currentStatus":"implemented in dev"}],"alerts":[{"name":"worker-heartbeat","signal":"no heartbeat for 5 minutes","severity":"warning","destination":"operator channel"},{"name":"payment-webhook-failures","signal":"5 failures in 15 minutes","severity":"critical","destination":"operator channel"},{"name":"tunnel-route-down","signal":"public route check fails twice","severity":"critical","destination":"operator channel"},{"name":"backup-missed","signal":"nightly backup absent","severity":"critical","destination":"operator channel"}],"driftReports":[{"name":"TuliProx line drift","signal":"desired vs actual line state","openItems":2,"action":"repair through provisioning reconciler"},{"name":"Payment reconciliation drift","signal":"subscription active without settled event","openItems":0,"action":"hold provisioning and review events"}]},"compliance":{"gates":[{"area":"Entity","requirement":"Confirm business entity and operating jurisdiction","status":"blocked","blocker":"External legal/business decision required"},{"area":"Content","requirement":"Licensed production feed agreements","status":"blocked","blocker":"Only public/free test content is configured"},{"area":"Tax","requirement":"VAT/sales tax requirements","status":"blocked","blocker":"External tax advice/provider setup required"},{"area":"Payments","requirement":"PayRam and SHKeeper production approval","status":"blocked","blocker":"Sandbox/dev only"},{"area":"AML/fraud","requirement":"Manual review policy for crypto payments","status":"draft-needed","blocker":"Operator approval workflow exists; policy text pending"},{"area":"Go-live","requirement":"Legal, payment, infrastructure, backup, monitoring, and support approval","status":"blocked","blocker":"Must be explicitly approved outside the app"}],"policies":[{"name":"Terms of Service","status":"draft-needed","route":"/system"},{"name":"Privacy Policy","status":"draft-needed","route":"/system"},{"name":"Refund and Cancellation Policy","status":"draft-needed","route":"/system"}],"providers":[{"provider":"PayRam","environment":"sandbox","status":"preview-configured","requiredBeforeLive":"Production onboarding and compliance review"},{"provider":"SHKeeper","environment":"dev/testnet","status":"preview-configured","requiredBeforeLive":"Wallet/key management and operational review"},{"provider":"Licensed content provider","environment":"none","status":"blocked","requiredBeforeLive":"Signed licensing and allowed distribution model"}],"goLiveDecision":"not-approved"}}