Video Streaming
Content & Social · React + Node (Express) · 17 @molecule/* packages
YouTube-like video platform with upload, chapters, and subtitles — with built-in Stripe-backed subscription tiers
Quick preview
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (17)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Home
/home(signed in) - Watch
/watch/:id(signed in) - Channel
/channel/:id(signed in) - Subscriptions
/subscriptions(signed in) - Library
/library(signed in) - Upload
/upload(signed in) - Settings
/settings(signed in) - Search
/search(signed in) - Trending
/trending(signed in) - Notifications
/notifications(signed in) - Studio
/studio(signed in) - PlaylistDetail
/playlist/:id(signed in)
Data model (14 tables)
- channels — id, owner_id, user_id, name, handle, bio, banner_url, avatar_url, …
- comments — id, resourceType, resourceId, userId, parentId, body, editedAt, createdAt, …
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- follows — id, followerId, targetType, targetId, createdAt, updatedAt
- notifications — id, user_id, kind, payload, read_at, created_at, updatedAt
- playlist_videos — id, playlist_id, video_id, position, added_at, updatedAt
- playlists — id, user_id, owner_id, name, description, is_public, cover_video_id, video_count, …
- reactions — id, resourceType, resourceId, userId, type, createdAt, updatedAt
- resource_tags — id, tagId, resourceType, resourceId, createdAt
- tags — id, name, slug, color, description, createdAt, updatedAt
- video_views — id, video_id, viewer_id, source, ts, updatedAt
- videos — id, user_id, channel_id, title, description, hls_url, source_url, thumbnail_url, …
- watch_history — id, user_id, video_id, position_sec, watched_at, updatedAt
- watch_later — id, user_id, video_id, added_at, updatedAt
API (9 handlers)
- channels
api/src/handlers/channels.ts - comments
api/src/handlers/comments.ts - follows
api/src/handlers/follows.ts - library
api/src/handlers/library.ts - notifications
api/src/handlers/notifications.ts - playlists
api/src/handlers/playlists.ts - preferences
api/src/handlers/preferences.ts - studio
api/src/handlers/studio.ts - videos
api/src/handlers/videos.ts
Subscription tiers
free / pro / team — gated by: maxChannels, maxVideos, advancedFeatures, canExport, retentionDays
Built from 17 @molecule/* packages
@molecule/api-ai-speech-openai@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-media-streaming-hls@molecule/api-payments-stripe@molecule/api-resource-comment@molecule/api-resource-follow@molecule/api-resource-payment@molecule/api-resource-reaction@molecule/api-resource-tag@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringMEILISEARCH_API_KEYMeiliSearch API keyS3_BUCKETS3 bucket for video/image uploadsS3_ACCESS_KEY_IDS3 access keyS3_SECRET_ACCESS_KEYS3 secret keyOPENAI_API_KEYOpenAI API key for transcription
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing