# s2yt Create YouTube videos from an image and audio files. ## Stack - Next.js 15 (App Router, TypeScript, Tailwind) - PostgreSQL + Prisma - Redis + BullMQ - NextAuth (Google OAuth with YouTube scopes) - FFmpeg for video encoding - YouTube Data API v3 ## Setup 1. Copy environment variables: ```bash cp .env.example .env ``` 2. Start PostgreSQL and Redis: ```bash docker compose up -d ``` 3. Install dependencies and run migrations: ```bash npm install npm run db:push ``` 4. Configure Google OAuth in [Google Cloud Console](https://console.cloud.google.com/): - Enable YouTube Data API v3 - Create OAuth 2.0 credentials - Add redirect URI: `http://localhost:3000/api/auth/callback/google` - Set `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` in `.env` 5. Install FFmpeg on your system (required for the worker). 6. Start the web app and worker in separate terminals: ```bash npm run dev npm run worker ``` ## Free Plan - 14 videos/month (each audio = 1 video) - Max 720p resolution - 30 MB max per file - Watermark required - Per-video metadata (title auto-filled from audio filename) ## Scripts - `npm run dev` — Next.js dev server - `npm run worker` — Background job processor - `npm run db:push` — Push Prisma schema to database - `npm run build` — Production build