A modern, full-stack video sharing platform built with Next.js, featuring AI-powered content generation, real-time streaming, and community engagement capabilities.
- Why VeeTube Exists
- Core Capabilities
- Screenshots
- Tech Stack
- Quick Start
- Environment Variables
- How It Works
- Development
- About this project
- Documentation
VeeTube is designed to demonstrate how to build a production-ready, AI-enhanced video platform architecture with:
- Integrate external SaaS services (video, auth, storage, AI) cleanly
- Maintain end-to-end type safety across the stack
- Handle video lifecycle events via webhooks
- Structure a feature-based Next.js App Router project
- Implement scalable async job processing
- Build engagement systems around user-generated content
- Video Management
- Direct video uploads
- Automatic transcoding & HLS streaming
- Visibility control
- Category assignment
- Thumbnail management
- AI Features
- Automatic title generation
- Description generation
- Thumbnail generation
- Background AI workflows
- Next.js (App Router) + React + TypeScript
- tRPC + Zod for end-to-end type safety
- PostgreSQL (Neon) + Drizzle ORM for data management
- Mux for video processing and streaming
- UploadThing for secure file uploads
- OpenAI for AI-powered content generation
- Clerk for authentication and user management
- Upstash for distributed rate limiting and caching
- QStash for background job orchestration
git clone https://github.com/AnBoyvan/veetube.git
cd veetube
npm install
npm run dev:all- Node.js ≥ 18
- PostgreSQL
- Clerk account
- Mux account
- OpenAI API key
- UploadThing
- Upstash
- ngrok (for local webhook testing)
Create a .env.local file:
DATABASE_URL=
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
CLERK_SIGNING_SECRET=
MUX_TOKEN_ID=
MUX_TOKEN_SECRET=
MUX_SIGNING_SECRET=
OPENAI_API_KEY=
UPLOADTHING_TOKEN=
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
QSTASH_TOKEN=
QSTASH_CURRENT_SIGNING_KEY=
QSTASH_NEXT_SIGNING_KEY=
- User authenticates via Clerk.
- Video uploads to Mux.
- Mux webhook updates DB state.
- AI metadata generation runs as async job.
- tRPC handles typed client-server communication.
- Redis enforces rate limiting.
- Engagement data persists via Drizzle ORM.
The system is built for extensibility and scale.
Formatting and linting via Biome.
For deep technical details see: docs/architecture.md
This repository is a portfolio demonstration.
See: docs/description.md
Full technical documentation and architecture breakdown:
docs/architecture.md
