← All templates

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

Open in Molecule

What is inside

  • auth
  • search
  • video-upload
  • hls-streaming
  • chapters
  • subtitles
  • comments
  • likes
  • subscriptions

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 (8 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
  • 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

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MEILISEARCH_API_KEY MeiliSearch API key
  • S3_BUCKET S3 bucket for video/image uploads
  • S3_ACCESS_KEY_ID S3 access key
  • S3_SECRET_ACCESS_KEY S3 secret key
  • OPENAI_API_KEY OpenAI 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