A full-stack GitHub Automation platform that enables users to connect GitHub repositories, create configurable automation rules, automate repository workflows, send AI-powered Slack notifications, and monitor all automation activity through a centralized dashboard.
The project is built using Next.js, Express.js, Prisma, PostgreSQL (Neon), GitHub OAuth, GitHub Webhooks, Slack Incoming Webhooks, and Google Gemini AI.
Frontend: https://github-automation-tan.vercel.app/
Backend: https://github-automation-anrl.onrender.com (As Render is on free trial please wait for a minute after the first backend request as render may take a while to load. Thanks for your patience)
- GitHub OAuth Authentication
- Secure Passport.js session-based login
- Protected frontend pages
- Protected backend API routes
- Secure logout with session destruction
- Connect GitHub repositories
- Disconnect repositories
- Automatic webhook creation
- Automatic webhook deletion
- Multiple repositories per user
Create automation rules directly from the UI.
- Issue Opened
- Pull Request Opened
- Title contains keyword
- Description contains keyword
- Author matches username
- Label matches
- Add GitHub Label
- Add GitHub Comment
- Send Slack Notification
Rules are completely configurable without changing backend code.
Instead of sending static Slack messages, the application uses Google Gemini to generate human-friendly summaries for GitHub Issues and Pull Requests before sending notifications.
Every automation activity is recorded.
Dashboard events include:
- Repository Connected
- Repository Disconnected
- Rule Created
- Rule Updated
- Rule Deleted
- Label Added
- Comment Added
- Slack Notification Sent
- Job Retry
- Job Success
- Job Failure
Dashboard events can be filtered by repository.
The application is designed to safely process GitHub webhooks.
Implemented reliability features:
- GitHub webhook signature verification
- Replay attack prevention
- Duplicate webhook detection
- Background job processing
- Automatic retry mechanism
- Idempotent action execution
- Dashboard logging for failures and retries
- Next.js
- React
- Tailwind CSS
- Express.js
- Passport.js
- Prisma ORM
- PostgreSQL (Neon)
- GitHub OAuth
- GitHub REST API
- GitHub Webhooks
- Slack Incoming Webhooks
- Google Gemini API
github-automation/
│
├── frontend/
│ ├── app/
│ ├── components/
│ └── public/
│
├── backend/
│ ├── prisma/
│ ├── src/
│ │ ├── config/
│ │ ├── controllers/
│ │ ├── middleware/
│ │ ├── routes/
│ │ ├── services/
│ │ ├── utils/
│ │ └── lib/
│ └── package.json
│
└── README.md
git clone https://github.com/<your-username>/<repository-name>.git
cd <repository-name>cd backend
npm installcd ../frontend
npm installYou may use:
- Neon
- Supabase
- Local PostgreSQL
Copy the PostgreSQL connection string.
Create:
backend/.env
Add the following:
PORT=5000
DATABASE_URL=
SESSION_SECRET=
CLIENT_ID=
CLIENT_SECRET=
YOUR_PUBLIC_URL=
FRONTEND_URL=http://localhost:3000
WEBHOOK_SECRET=
GEMINI_API_KEY=| Variable | Description |
|---|---|
| PORT | Backend port |
| DATABASE_URL | PostgreSQL connection string |
| SESSION_SECRET | Secret used to sign sessions |
| CLIENT_ID | GitHub OAuth Client ID |
| CLIENT_SECRET | GitHub OAuth Client Secret |
| YOUR_PUBLIC_URL | Public backend URL (ngrok during local development) |
| FRONTEND_URL | Frontend URL |
| WEBHOOK_SECRET | GitHub webhook secret |
| GEMINI_API_KEY | Google Gemini API Key |
Create:
frontend/.env.local
Add:
NEXT_PUBLIC_API_URL=http://localhost:5000Inside the backend:
npx prisma generatenpx prisma db push(Optional)
Open Prisma Studio:
npx prisma studioGo to:
https://github.com/settings/developers
Create a new OAuth App.
Use:
http://localhost:3000
https://<your-ngrok-domain>.ngrok-free.app/auth/github/callback
Copy the generated:
- Client ID
- Client Secret
into your backend .env.
GitHub Webhooks require a public URL.
Run:
ngrok http 5000Example:
https://abc123.ngrok-free.app
Copy this URL.
Update:
YOUR_PUBLIC_URL
inside .env.
Restart the backend.
Generate any random string.
Example:
my-super-secret-key
Store it as:
WEBHOOK_SECRET
The same value is automatically used while creating GitHub webhooks.
Create a Slack App.
Enable:
Incoming Webhooks
Create a webhook for your desired channel.
Copy the generated webhook URL.
When creating a rule in the application, choose the Slack action and paste this webhook URL into the action value field.
Visit:
Create a new API key.
Store it as:
GEMINI_API_KEY
cd backend
npm run devThe backend starts on:
http://localhost:5000
cd frontend
npm run devFrontend:
http://localhost:3000
Open:
http://localhost:3000
Login using GitHub.
Connect one or more repositories.
The application automatically:
- Stores repository information
- Creates a GitHub webhook
Create automation rules.
Example:
Trigger:
Issue Opened
Condition:
Title contains "bug"
Actions:
- Add label
- Comment
- Send Slack notification
Open an Issue or Pull Request in the connected repository.
The application will automatically:
- Receive the GitHub webhook
- Verify its signature
- Store the webhook job
- Execute matching automation rules
- Retry failures automatically
- Update the dashboard
Visit the Dashboard to monitor:
- Connected repositories
- Automation history
- Successful actions
- Failed actions
- Retry history
The application includes several production-oriented security measures:
- GitHub webhook signature verification
- Session-based authentication
- Protected API routes
- Replay attack prevention
- Duplicate webhook protection
- Idempotent action execution
- Environment variable-based secret management
- Automatic retry mechanism for failed jobs
Potential enhancements include:
- GitHub App authentication
- AI-powered issue triage
- AI-generated labels
- Priority prediction
- Nested AND/OR rule builder
- Multiple Slack workspaces
- Microsoft Teams integration
- Discord integration
- Email notifications
- Scheduled workflows
- Redis/BullMQ job queue
- Exponential retry backoff
- Docker support
- GitHub Actions CI/CD
- Prometheus & Grafana monitoring
- WebSocket-based live dashboard
- Unit and integration tests
The application is deployed using:
| Component | Platform |
|---|---|
| Frontend | Vercel |
| Backend | Render |
| Database | Neon PostgreSQL |
Frontend: https://github-automation-tan.vercel.app/
Backend API: https://github-automation-anrl.onrender.com
To test the application:
-
Sign in using your own GitHub account.
-
Connect any GitHub repository that you own or have admin access to.
-
Create a rule.
Example:
Trigger:
- Issue Opened
Condition:
- Title contains "bug"
Actions:
- Add Label "bug"
- Comment "Thanks for reporting!"
- Slack Notification (optional)
- Open a new GitHub Issue with the title:
bug: testing automation
- Within a few seconds you should observe:
- Label added to the issue
- Comment posted
- Slack notification (if configured)
- Dashboard updated
For convenience, a public demo repository is available:
https://github.com/thunDer2203/github_automation_demo
Reviewers may fork this repository and connect it to the application for testing.
This project was developed for educational purposes and as a demonstration of building reliable GitHub automation workflows using modern web technologies.