An AI-assisted YouTube automation dashboard for trend discovery, scripting, thumbnail ideation, metadata generation, and upload workflow experiments.
YouTube creation often breaks across too many disconnected tools: research, scripting, metadata, thumbnails, scheduling, and publishing all happen in separate places. AutoYT brings those steps together into one product-style workflow so creators can move faster while keeping control of the final output.
- Google sign-in and YouTube channel connection flow
- Trend discovery based on niche, country, and language inputs
- AI-generated scripts in English, Hindi, and Hinglish
- Metadata generation for titles, descriptions, tags, hashtags, and pinned comments
- Thumbnail concept generation and image workflow experiments
- Voiceover generation using Gemini TTS models
- Video upload flow powered by YouTube APIs
- Firestore-backed user profile and pipeline state handling
- React 19
- TypeScript
- Vite
- Express
- Firebase Auth and Firestore
- Google Gemini API
- YouTube Data API
- Tailwind CSS
src/contains the React application, dashboards, and AI workflow UIserver.tshandles OAuth, YouTube APIs, uploads, cron scheduling, and local servingsrc/services/geminiService.tscontains content generation helperssrc/lib/firebase.tsinitializes authentication and Firestore accessfirebase-applet-config.jsonconnects the frontend to the configured Firebase project
.
|-- src/
| |-- App.tsx
| |-- main.tsx
| |-- index.css
| |-- lib/
| | `-- firebase.ts
| `-- services/
| `-- geminiService.ts
|-- server.ts
|-- package.json
|-- firebase-applet-config.json
|-- firestore.rules
|-- .env.example
|-- vite.config.ts
`-- metadata.json
- Node.js 20+
- npm
- A Firebase project with Google authentication enabled
- A Google Cloud project with YouTube API credentials
- A Gemini API key
Create a local .env file based on .env.example.
Required values:
YOUTUBE_CLIENT_IDYOUTUBE_CLIENT_SECRETGEMINI_API_KEYAPP_URLSESSION_SECRET
Optional:
DISABLE_HMR=truefor environments where file watching causes instability
You also need a valid firebase-applet-config.json connected to your Firebase project.
- Install dependencies.
npm install- Create a
.envfile from.env.example. - Add your Firebase config to
firebase-applet-config.json. - Start the development server.
npm run dev- Open
http://localhost:3000.
- Sign in with Google
- Connect the YouTube channel
- Configure niche, location, language, and automation mode
- Discover trends
- Generate scripts, thumbnails, and metadata
- Review everything carefully
- Upload or schedule content with manual judgment
Recommended platforms:
- Google Cloud Run
- Render
- Railway
Deployment notes:
- set
NODE_ENV=production - provide all required environment variables
- use HTTPS for OAuth and secure cookies
- keep
APP_URLaligned with the deployed domain
SESSION_SECRETnow uses an environment variable instead of a hardcoded value- OAuth and upload flows should only run over HTTPS in production
- Review YouTube API policies and platform rules before enabling real publishing
- AI-generated titles, scripts, and thumbnails should always be reviewed by a human before upload
- Store tokens and user data responsibly if this project moves beyond demo use
Suggested demo title:
AutoYT Demo: From Trend Discovery to YouTube Upload
Suggested screenshot filenames:
docs/images/dashboard-overview.pngdocs/images/trend-discovery.pngdocs/images/script-generation.pngdocs/images/upload-flow.png
Suggested Open Graph preview idea:
- Dark dashboard UI with trend cards, a script editor preview, and a red
AutoYTmark in the corner
- Add clearer job orchestration and queue management
- Add safer token storage and production-grade secret handling
- Add review checkpoints before upload and publish steps
- Add more transparent status tracking for every pipeline stage
Contributions are welcome for documentation, UX polish, type safety, and production-readiness improvements.
See CONTRIBUTING.md for contribution guidelines.
This repository is available under the MIT License.
Built by Nishant Kumar