AI-powered YouTube title & thumbnail optimization β maximize your CTR before every upload.
Features Β· Tech Stack Β· Getting Started Β· Deployment Β· Pricing
TitleIQ helps YouTube creators stop guessing and start optimizing. Paste your video title and thumbnail β and in seconds you get an AI-powered breakdown of your Click-Through Rate potential, with actionable rewrites and real competitor simulations.
| Feature | Description |
|---|---|
| Live CTR Score Analyzer | Instantly scores your title across 4 dimensions: Curiosity Gap, Keyword Strength, Emotional Pull, and Title Length |
| Thumbnail Analyzer | AI vision analysis for text readability, face impact, color contrast, and clutter score |
| Analysis History | View and revisit all your past title and thumbnail analyses |
| A/B Compare | Side-by-side comparison of two past analyses to identify the stronger performer |
| Feature | Description |
|---|---|
| Keyword Gap Fixer | Identifies missing high-value keywords and auto-rewrites your title to include them |
| CTR Simulator | Places your title against 4 real competitor titles in a simulated YouTube feed and predicts viewer click behavior |
| Unlimited Analyses | No daily cap β analyze as many titles as you need |
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS |
| Backend | Node.js, Express, TypeScript |
| Database | Neon (PostgreSQL) |
| AI | Groq β Llama 3.3 70B + Llama Vision |
| Payments | Razorpay |
| Resend | |
| Security | Helmet, JWT, HttpOnly Cookies |
TitleIQ/
βββ client/ # React frontend (Vite)
βββ server/
β βββ src/
β βββ routes/ # API route handlers
β βββ services/ # AI, auth, and email services
β βββ middleware/ # Auth, rate limiting, error handling
β βββ prompts/ # AI prompt builders
β βββ db/ # Database client & schema
β βββ data/ # Static competitor title data
βββ shared/ # Shared TypeScript types (client + server)
βββ .env # Environment variables β never commit this!
- Node.js 18+
- Neon PostgreSQL database
- Groq API key
- Resend API key
- Razorpay account (test keys work for local dev)
git clone https://github.com/Gaurav77Kumar/TitleIQ.git
cd TitleIQ
npm install # installs dependencies for all workspacesCreate a .env file in the root directory:
# ββ AI βββββββββββββββββββββββββββββββββββββββββ
GROQ_API_KEY=your_groq_api_key
# ββ Database ββββββββββββββββββββββββββββββββββββ
DATABASE_URL=your_neon_postgresql_url
# ββ Authentication ββββββββββββββββββββββββββββββ
JWT_SECRET=your_strong_secret_key # min 32 characters recommended
# ββ Email βββββββββββββββββββββββββββββββββββββββ
RESEND_API_KEY=your_resend_api_key
# ββ Payments ββββββββββββββββββββββββββββββββββββ
RAZORPAY_KEY_ID=your_razorpay_key_id
RAZORPAY_KEY_SECRET=your_razorpay_secret
VITE_RAZORPAY_KEY_ID=your_razorpay_key_id # exposed to the frontend via Vite
# ββ Server ββββββββββββββββββββββββββββββββββββββ
PORT=3000
NODE_ENV=development
β οΈ Never commit.envto version control. It's already in.gitignore.
cd server
npx tsx src/db/migrate.ts# Backend (runs on http://localhost:3000)
cd server && npm run dev
# Frontend (runs on http://localhost:5173, proxies API β :3000)
cd client && npm run devBackend β Railway
| Setting | Value |
|---|---|
| Root directory | server |
| Build command | npm run build |
| Start command | node dist/index.js |
After deploy, set the CLIENT_URL environment variable in Railway to your Vercel frontend URL.
Frontend β Vercel
| Setting | Value |
|---|---|
| Root directory | client |
| Framework preset | Vite |
Add all VITE_* environment variables in the Vercel dashboard.
| Plan | Price | Analyses | Features |
|---|---|---|---|
| Free | βΉ0/mo | 10/day | CTR Analyzer, Thumbnail Analyzer, History, A/B Compare |
| Pro | βΉ99/mo | Unlimited | Everything in Free + Keyword Gap Fixer + CTR Simulator |
- Passwordless login via Email OTP (no passwords stored)
- Auth tokens stored in HttpOnly Cookies (XSS-safe)
- Helmet.js for HTTP security headers
- Rate limiting on all API routes
- JWT-signed sessions
Pull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.
# Fork the repo, then:
git checkout -b feature/your-feature-name
git commit -m "feat: add your feature"
git push origin feature/your-feature-name
# Open a Pull RequestMIT Β© 2025 TitleIQ