,
,,
Calisto TV

Channels. Live streams. Library. One streaming platform.

Nine content categories, four subscription states, and a 30-second live refresh cycle. Browse, watch, subscribe, and build a personal library from a single consumer-facing video platform.

9 Categories · 9 Client Components · 3 Library Tabs · 4 Subscription States · 30s Live Refresh · 14 API Routes

,0,

client components in packages/tv-clients

,0,

content categories for browse filtering

,0,

API routes under /api/tv/

,0,

subscription status states

Home Feed

5 content rows. 1 hero banner. One feed.

The home page at /tv renders a featured hero banner followed by four horizontal content rows: Trending, Live Now, Recently Added, and Continue Watching. Each row scrolls independently. The feed is assembled server-side from /api/tv/feed.

Hero Banner

Featured content spotlight. Full-width image with gradient overlay, category tag, title, description, and Watch Now action.

Trending

Horizontal row of trending video cards. Thumbnail, duration badge, title, creator name, view count, and publish date.

Live Now

Active live streams with pulsing LIVE badge overlay. Click-through to the player.

Recently Added

Newest content from followed channels. Chronological row updated on each page load.

Continue Watching

Videos with in-progress playback. Pink progress bar on each thumbnail. One tap resumes from the last position.

Entertainment

Live Concert Series: Summer Sessions

Streaming now from 3 venues

Trending

12:34

Tech Review: Q2

4.2K views

8:15

Cooking Basics

1.8K views

22:01

Design Systems

920 views

Continue Watching

Ep 4: Routing

72% watched

Ep 2: State

35% watched

Two Paths

Browse by category. Search by keyword.

Nine categories with three sort modes. One debounced search input returning videos and channels.

Browse + Search

9 categories. 3 sorts. One search bar.

Two paths to content. Browse filters the full catalog by category and sort order in a paginated grid. Search queries the /api/tv/search endpoint and returns videos and channels in separate result groups.

Browse

/tv/browse

Category filter pills across the top. Sort toggle between Trending, Newest, and Most Popular. Responsive grid of video cards with load-more pagination in batches of 20.

Search

/tv/search

Unified search input with 350ms debounce. Results split into two sections: Channels (avatar, subscriber count, video count) and Videos (thumbnail, title, creator, views, date).

AllEntertainmentEducationMusicSportsGamingNewsLifestyleTech
AllEntertainmentEducationMusicSports
19:16

Intro to APIs

8.4K views

1:02:14

Live Jazz Set

5.3K views

22:59

Match Highlights

8.6K views

4:52

Game Dev Log

3.8K views

22:48

Daily News

8.3K views

9:06

Yoga Flow

9.2K views

Channels

Directory. Detail page. 4 content tabs.

Channels are the organizational unit. The directory at /tv/channels lists all channels with search and sort. Each detail page has a banner, avatar, follow/subscribe actions, and a four-tab content area: Videos, Collections, Live, and About.

Channel Directory

/tv/channels

Searchable grid of all channels. Each card shows avatar, name, subscriber count, video count, and category. Sort by Popular or Newest.

Channel Detail

/tv/channels/[channelId]

Full channel page with banner, avatar, subscriber and video counts. Follow (bell toggle) and Subscribe (paid tier toggle). Four-tab content area below.

Detail Tabs

Videos
Collections
Live
About

Urban Kitchen

12.4K subscribers · 238 videos · 1.2M views

VideosCollectionsLiveAbout
14:22

Farm to Table

3.1K views

14:22

Knife Skills 101

3.1K views

14:22

Seasonal Menus

3.1K views

Live Now

Active streams. Real-time viewer counts. 30-second refresh.

Auto-polling grid with LIVE badge, viewer overlay, and uptime duration per stream.

Live Streams

30-second refresh. Viewer counts. LIVE badge.

The /tv/live page shows all active streams in a responsive grid. The client auto-refreshes every 30 seconds by re-fetching /api/tv/live. Each card displays thumbnail, pulsing LIVE badge, viewer count, streamer avatar, category, and uptime.

Auto-Refresh

The stream grid polls /api/tv/live every 30 seconds. Viewer counts and new streams appear automatically.

Manual Refresh

A Refresh button in the header triggers an immediate fetch. Useful when navigating back to the page.

Empty State

When no streams are active, a centered empty state with a Browse Channels link to /tv/channels.

Click-to-Player

Each stream card navigates to /tv/watch/[streamId], loading the player with the live stream URL.

LIVE1.2K

DJ Set: House

Music · 2h 14m

LIVE847

Game: Finals

Gaming · 45m

LIVE312

Yoga Morning

Lifestyle · 1h 02m

Player

Like. Share. Save. Related content.

The player page at /tv/player/[videoId] loads video detail and related content from a single API call. Below the video: metadata, three action buttons, creator info with channel link, and a horizontal row of related videos.

Video Element

Full-width aspect-video container. Native HTML5 video with HLS-capable src returned by /api/tv/videos/[videoId].

Like

Toggle button with count. Filled heart when liked, outline when not. Optimistic count update on the client.

Share

Copies the current URL to clipboard. Button text changes to "Copied" for two seconds.

Save

Toggle that adds or removes the video from the library saved list via /api/tv/videos/[videoId]/save.

Creator Info

Avatar, name, and "View channel" link. Clicking navigates to /tv/channels/[creatorId].

More From Channel

Horizontal row of related videos from the same channel. Clicking loads a new player page.

1.4KShareSave

Building a Component Library from Scratch

18.2K views · May 3, 2026 · Tech

More from this channel

9:41

Design Tokens

5.1K views

16:08

CSS Variables

3.8K views

Your Library

Watch history with progress bars. Saved videos. Custom playlists.

Three tabs in one view. History tracks per-video progress. Playlists organize named collections.

Library

3 tabs. Progress tracking. Named playlists.

The user's personal library at /tv/library organizes content into three tabs. Watch History tracks per-video progress with a visual bar on each thumbnail. Saved collects bookmarks. Playlists holds named collections. All fetched from /api/tv/library.

Watch History

/tv/library → history

Chronological list of watched videos. Each row shows a 160x90 thumbnail with a pink progress bar, title, creator name, time-ago timestamp, and percentage label. Trash icon removes entries.

Saved

/tv/library → saved

Bookmarked videos from the player Save button. Same row layout without the progress bar. Bookmark icon with "Saved X ago" timestamp.

Playlists

/tv/library → playlists

User-created collections in a two-column grid. Cover thumbnail, playlist title, video count badge, and "Updated X ago" timestamp.

Watch HistorySavedPlaylists

Ep 4: Routing Patterns

DevChannel · 2h ago · 72%

Intro to State Machines

CodeLab · 1d ago · 35%

Morning Yoga Flow

ZenStudio · 3d ago · 90%

Subscriptions

Tier pricing. 4 statuses. Entitlement gate.

Channel subscriptions at /tv/subscriptions. Each subscription has a channel, tier, price, billing cycle, renewal date, and one of four status states. The entitlements/check endpoint verifies content access per video.

Tier Pricing

Each subscription has a tier name, price, and billing cycle (monthly or yearly). Displayed as localized amount per period.

Four Status States

Active (entitlements granted), Canceling (access until renewal), Expired (revoked), and Paused (limited access per channel policy).

Entitlement Gate

The /api/tv/entitlements/check endpoint verifies content access per video based on active subscriptions.

Summary Stats

Active subscription count and total monthly spend displayed at the top of the subscriptions page.

Manage + Cancel

Per-subscription actions. Manage navigates to tier change and billing details. Cancel sends DELETE and sets status to Canceling.

5

Active

2

Paused

Urban Kitchen

Pro · Monthly

Active

DevChannel

Basic · Yearly

Canceling

FitZone

Premium · Monthly

Paused

MusicLive

Basic · Monthly

Expired
Scope Clarification

Calisto TV is the streaming platform. Not the TV App Builder.

Two products share the word 'TV' in their names. Calisto TV (this page) is the consumer-facing streaming platform. Studio's TV App Builder is the creator pipeline for publishing branded TV apps to app stores. Separate products, separate codebases.

Calisto TV

The streaming platform

  • Consumer-facing video platform
  • Routes: /tv/browse, /tv/channels, /tv/live, /tv/player, /tv/library, /tv/subscriptions
  • 9 client components in packages/tv-clients/src/
  • Viewers browse, watch, subscribe, and build a personal library
  • Content entitlement checks per video via /api/tv/entitlements/check
  • Web app at apps/tv/ with companion React Native apps for tvOS and Fire TV

Studio TV App Builder

The creator build tool

  • Creator pipeline inside Calisto Studio for publishing branded TV apps
  • 7 stages: Content, Design, Build, Preview, Store Listing, Analytics
  • Target platforms: App Store, Google Play, Apple TV, Fire TV, Roku
  • Creators configure splash screens, navigation layouts, color schemes
  • Build pipeline compiles platform-specific app binaries
  • Part of Studio, separate product, separate page at /apps/studio
Pricing

High-Performance Ops. Zero Monthly Overhead.

Get all 15 Core modules at no monthly cost. You only pay 2% of processed revenue.

,,
Calisto Core
$0/month
+ 2% of revenue
CommitmentNone
UsersUnlimited
Products15 included
Best for: Businesses of any size. Revenue is auto-calculated from POS orders, reservations, folios, and event tickets.
,,,,,,,

TV

Video streaming with channels, live streams, and subscriptions.

$1/mo

Wallet-debit

Add to Pro Shop