An AI-powered YouTube video analysis application built with TanStack Start, Bun, and Google's Gemini models. Analyze video content with custom prompts to extract insights, summaries, and structured information.
- YouTube Video Analysis: Analyze any YouTube video with custom prompts
- AI-Powered Insights: Extract summaries, key points, and structured information
- Real-time Processing: See results as they're generated
- Flexible Prompts: Ask specific questions about video content
- Structured Output: Get organized sections with timestamps
- TanStack Start + Form: Modern React SSR with form validation
- Bun Runtime: Fast, efficient JavaScript runtime
- Type-Safe API: Zod schemas for request/response validation
- Stub Mode: Test without API keys using mock data
- Production-Ready Server: Optimized static asset serving with intelligent caching
This project was created with TanStack Start:
bunx create-start-app@latestInstall dependencies:
bun install- Bun 1.3+ (install with
curl -fsSL https://bun.sh/install | bash) - Node.js 20+ (for compatibility)
- Google API Key (optional, for production mode)
-
Install dependencies:
~/.bun/bin/bun install -
Copy environment variables:
cp .env.local.example .env.local
-
Start development server:
~/.bun/bin/bun run dev -
Open http://localhost:3000 in your browser
Create a .env.local file with the following variables:
# Stub Mode (default: true)
# Set to false to use real Google AI API
USE_STUB=true
# Google AI Configuration (required for production)
GOOGLE_API_KEY=your-gemini-api-key-here
# Vertex AI Configuration (optional, for advanced features)
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-central1
ENABLE_CHUNKING=false
SEGMENT_DURATION=180
# Model Configuration
DEFAULT_MODEL=gemini-2.0-flash-exp-
Google AI (Gemini) API Key:
- Visit Google AI Studio
- Create a new API key
- Add to
.env.localasGOOGLE_API_KEY
-
Vertex AI (Optional):
- Set up a Google Cloud Project
- Enable the Vertex AI API
- Configure authentication
- Add project details to
.env.local
Build the application for production:
bun run buildYou can easily use this production server in your own TanStack Start project:
- Copy the
server.tsfile into your project root - Build your project with
bun run build - Start the server directly with:
bun run server.ts
Or add it to your package.json scripts:
{
"scripts": {
"start": "bun run server.ts"
}
}Then run with:
bun run startThe server.ts implements a high-performance production server with the following features:
The server automatically decides which files to preload into memory and which to serve on-demand:
- In-Memory Loading: Small files (default < 5MB) are loaded into memory at startup
- On-Demand Loading: Large files are loaded from disk only when requested
- Optimized Performance: Frequently used assets are served from memory
# Server Port (default: 3000)
PORT=3000
# Maximum file size for in-memory loading (in bytes, default: 5MB)
STATIC_PRELOAD_MAX_BYTES=5242880
# Include patterns (comma-separated, only these files will be preloaded)
STATIC_PRELOAD_INCLUDE="*.js,*.css,*.woff2"
# Exclude patterns (comma-separated, these files will be excluded)
STATIC_PRELOAD_EXCLUDE="*.map,*.txt"
# Enable detailed logging
STATIC_PRELOAD_VERBOSE=true# Preload only critical assets
STATIC_PRELOAD_MAX_BYTES=1048576 \
STATIC_PRELOAD_INCLUDE="*.js,*.css" \
STATIC_PRELOAD_EXCLUDE="*.map,vendor-*" \
bun run start# Preload all small assets
STATIC_PRELOAD_MAX_BYTES=10485760 \
bun run start# With detailed logging
STATIC_PRELOAD_VERBOSE=true \
bun run startThe server displays a clear overview of all loaded assets at startup:
π¦ Loading static assets from ./dist/client...
Max preload size: 5.00 MB
Include patterns: *.js,*.css,*.woff2
π Preloaded into memory:
/assets/index-a1b2c3d4.js 45.23 kB β gzip: 15.83 kB
/assets/index-e5f6g7h8.css 12.45 kB β gzip: 4.36 kB
πΎ Served on-demand:
/assets/vendor-i9j0k1l2.js 245.67 kB β gzip: 86.98 kB
β
Preloaded 2 files (57.68 KB) into memory
βΉοΈ 1 files will be served on-demand (1 too large, 0 filtered)
π Server running at http://localhost:3000This project uses Vitest for testing. You can run the tests with:
bun run testThis project uses Tailwind CSS for styling.
This project is configured for one-click deployment to Railway:
- Connect Repository: Push your code to GitHub
- Deploy to Railway:
railway login railway init -n llm-video-analysis railway up
- Set Environment Variables in Railway dashboard:
USE_STUB=false(for production)GOOGLE_API_KEY=your-api-key
- Generate Domain:
railway domain
For Cloudflare deployment (coming soon - see ticket 004):
- Static assets β Cloudflare Pages
- Server functions β Cloudflare Workers
- Use Cloudflare KV for caching
-
Build the application:
bun run build
-
Run the production server:
PORT=3000 bun server.ts
This project uses eslint and prettier for linting and formatting. Eslint is configured using tanstack/eslint-config. The following scripts are available:
bun run lint
bun run format
bun run checkThe tickets/ directory contains development tickets tracking the implementation:
- 001: MVP Landing Page β - Video analysis form with validation
- 002: Server Analysis Stub β - Typed server endpoint with mock responses
- 003: Analyzer Pipeline Integration - Port Python analyzer to TypeScript
- 004: Cloudflare Deployment - Production deployment configuration