An AI-powered support ticket system where autonomous agents handle the entire triage workflow β from analyzing issues and extracting priorities to matching tickets with the right moderators and sending notifications. No manual routing needed.
TODO: Add screenshots and demo video. See the Media section for recommended assets.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React + Vite) β
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β Signup β β Login β β Tokens β β Admin Panel β β
β β Page β β Page β β Dashboardβ β (User Mgmt) β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β β β β β
β βββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββ β
β β REST API β
ββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ
β BACKEND (Express + MongoDB) β
β β β
β ββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ β
β β Express API Server β β
β β /api/auth/* /api/tokens/* /api/inngest β β
β ββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β MongoDB β β Inngest β β Mailtrap β β
β β Database β β Workflows β β SMTP β β
β βββββββββββββββ ββββββββ¬βββββββ βββββββββββββββ β
β β β
β ββββββββββββββββββββββΌβββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββ βββββββββββββββββ ββββββββββββββββ β
β β Agent 1 β β Agent 2 β β Google β β
β β Welcome β β AI Triage β β Gemini β β
β β Email β β Pipeline β β 2.5 Flash β β
β βββββββββββββ βββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
This system uses two autonomous AI agents built on Inngest's durable workflow engine:
Triggered when a new user signs up. Looks up the user in the database and sends a welcome email via Mailtrap SMTP.
Triggered when a support token is created. Runs a 6-step pipeline:
Token Created
β
βΌ
βββββββββββββββββββ
β 1. Fetch Token β Retrieve from MongoDB
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββ
β 2. Set Status β Mark as "TODO"
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 3. AI Analysis (Google Gemini 2.5 Flash) β
β β’ Summary extraction β
β β’ Priority classification β
β β’ Helpful notes generation β
β β’ Related skills extraction β
ββββββββββ¬βββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββ
β 4. Update Token β Save AI results to DB
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 5. Auto-Assignment β
β β’ Match skills β moderator β
β β’ Fallback β admin β
ββββββββββ¬βββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββ
β 6. Notify β Email assigned moderator
βββββββββββββββββββ
- Autonomous AI Triage β Google Gemini analyzes each ticket, extracts priority, summary, and required skills automatically
- Smart Assignment β Tickets are routed to moderators based on skill matching, with admin fallback
- Durable Workflows β Inngest ensures each pipeline step is retriable and fault-tolerant
- Role-Based Access β Three roles (user, moderator, admin) with distinct permissions
- Skill-Based Routing β Moderators have skill tags; AI matches ticket requirements to the right person
- Email Notifications β Assigned moderators receive automatic email alerts
- Admin Panel β Full user management: roles, skills, and search
| Layer | Technology | Purpose |
|---|---|---|
| AI Engine | Google Gemini 2.5 Flash | Ticket analysis, priority extraction, skill matching |
| Agent Framework | Inngest + @inngest/agent-kit | Durable multi-step workflows with retries |
| Backend | Express v5 + Node.js | REST API server |
| Database | MongoDB + Mongoose | User and token persistence |
| Auth | JWT + bcrypt | Token-based authentication with password hashing |
| Frontend | React 19 + Vite | Single-page application |
| Styling | Tailwind CSS v4 + DaisyUI v5 | UI components and responsive design |
| Nodemailer + Mailtrap | SMTP email delivery (dev sandbox) |
AI-Multi-Agents-v1/
βββ ai-token-assistant/ # Backend API
β βββ index.js # Express server entry point
β βββ env.js # Environment config loader
β βββ makeAdmin.js # CLI: promote user to admin
β βββ controllers/
β β βββ token.js # Token CRUD + creation event
β β βββ user.js # Auth + user management
β βββ inngest/
β β βββ client.js # Inngest client setup
β β βββ functions/
β β βββ onsignup.js # Agent 1: welcome email
β β βββ ont-token-create.js # Agent 2: AI triage pipeline
β βββ middlewares/
β β βββ auth.js # JWT verification + role guards
β βββ models/
β β βββ token.js # Token schema (title, priority, skills...)
β β βββ user.js # User schema (email, role, skills)
β βββ routes/
β β βββ token.js # /api/tokens/*
β β βββ user.js # /api/auth/*
β βββ scripts/
β β βββ cleanDb.js # Database cleanup utility
β βββ utils/
β βββ Ai.js # Gemini AI agent wrapper
β βββ mailer.js # Nodemailer SMTP config
β
βββ ai-token-frontend/ # React SPA
β βββ src/
β β βββ main.jsx # App entry point
β β βββ components/
β β β βββ checkauth.jsx # Route guard (auth protection)
β β β βββ navbar.jsx # Dynamic navigation bar
β β βββ lib/
β β β βββ api.js # API client (axios)
β β βββ pages/
β β βββ login.jsx # Login page
β β βββ Signup.jsx # Registration page
β β βββ tokens.jsx # Token list + creation
β β βββ token.jsx # Token detail view
β β βββ admin.jsx # Admin user management
β βββ vite.config.js
β
βββ README.md
- Node.js 18+
- MongoDB instance (local or Atlas)
- Google Gemini API key
- Mailtrap account (for email testing)
# Clone the repository
git clone https://github.com/your-username/AI-Multi-Agents-v1.git
cd AI-Multi-Agents-v1Backend setup:
cd ai-token-assistant
npm install
# Create environment file
cp .env.sample .env
# Edit .env with your credentialsFrontend setup:
cd ../ai-token-frontend
npm install
# Create environment file
cp .env.example .env
# Set VITE_SERVER_URL=http://localhost:3000/apiBackend (ai-token-assistant/.env):
| Variable | Description |
|---|---|
MONGO_URI |
MongoDB connection string |
JWT_SECRET |
Secret key for JWT signing |
GEMINI_API_KEY |
Google Gemini API key |
MAILTRAP_SMTP_HOST |
Mailtrap SMTP host |
MAILTRAP_SMTP_PORT |
Mailtrap SMTP port |
MAILTRAP_SMTP_USER |
Mailtrap SMTP username |
MAILTRAP_SMTP_PASS |
Mailtrap SMTP password |
APP_URL |
Frontend URL (http://localhost:5173) |
Frontend (ai-token-frontend/.env):
| Variable | Description |
|---|---|
VITE_SERVER_URL |
Backend API URL (http://localhost:3000/api) |
You need three terminals running simultaneously:
# Terminal 1 β Backend API
cd ai-token-assistant
npm run dev
# Terminal 2 β Inngest Dev Server
cd ai-token-assistant
npm run inngest-dev
# Terminal 3 β Frontend
cd ai-token-frontend
npm run dev- Open
http://localhost:5173and create an account - Promote your user to admin:
cd ai-token-assistant node makeAdmin.js your-email@example.com - Log in again β you now have access to the Admin panel
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/api/auth/signup |
β | Register a new user |
POST |
/api/auth/login |
β | Login, returns JWT |
POST |
/api/auth/logout |
User | Verify token (stateless) |
GET |
/api/auth/users |
Admin | List all users |
POST |
/api/auth/update-user |
Admin | Update user role & skills |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/api/tokens |
User | List tokens (own for users, all for mods/admins) |
GET |
/api/tokens/:id |
User | Get token details |
POST |
/api/tokens |
User | Create token (triggers AI triage) |
User:
emailβ Unique email addresspasswordβ Bcrypt-hashed passwordroleβuser|moderator|adminskillsβ Array of skill tags (e.g.,["React", "MongoDB"])
Token:
titleβ Issue titledescriptionβ Full issue descriptionstatusβTODO|IN_PROGRESSpriorityβlow|medium|high(AI-generated)helpfulNotesβ AI-generated technical notesrelatedSkillsβ AI-extracted skill tagsassignedToβ Assigned moderator/admin referencecreatedByβ Token creator reference
| Component | What to Change |
|---|---|
| AI Model | Swap Gemini for any LLM in utils/Ai.js |
| Email Provider | Replace Mailtrap with any SMTP provider in utils/mailer.js |
| Skills Taxonomy | Update the AI prompt in utils/Ai.js to extract domain-specific skills |
| Assignment Logic | Modify the matching algorithm in ont-token-create.js |
| UI Theme | Change DaisyUI theme in Tailwind config |
- Inngest for the durable workflow engine and agent framework
- Google Gemini for the AI analysis capabilities
- DaisyUI for the UI component library
- Mailtrap for email testing infrastructure
Built with autonomous agents. Powered by intelligent automation.