A self-hosted ticketing system with AI integration. Describe a ticket in plain language — your AI assistant creates the epic, tickets, and child tickets with proper labels and structure.
- File-based storage — tickets are Markdown files with YAML frontmatter, no database required
- AI-first workflow — describe a ticket in plain language and the AI handles structure
- Real-time dashboard — filter by category, priority, and status
- REST API — full CRUD operations at
/api/tickets - Self-hosted — runs anywhere, no external dependencies
- Node.js 18+
- npm or pnpm
- Git
# Clone the repository
git clone https://github.com/ifearghal/tickets-app.git
cd tickets-app
# Install dependencies
npm install
# Configure environment (optional)
cp .env.example .env.local
# Edit .env.local with your settings
# Start the development server
npm run devThe app will be available at http://localhost:3000.
npm run build
npm start| Variable | Default | Description |
|---|---|---|
TICKETS_BASE |
./data/tickets |
Base directory for ticket files |
TICKET_WRITE_PROXY_URL |
http://localhost:3000 |
Proxy URL for ticket writes |
PORT |
3000 |
Server port |
data/
└── tickets/
├── open/ # Open tickets
│ └── T-0001-my-ticket.md
└── closed/ # Closed tickets
└── T-0002-closed-ticket.md
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/tickets |
List all tickets |
GET |
/api/tickets/[id] |
Get single ticket |
POST |
/api/tickets |
Create new ticket |
PUT |
/api/tickets/[id] |
Update ticket |
DELETE |
/api/tickets/[id] |
Delete ticket |
# Run linter
npm run lint
# Type check
npm run typecheck- Next.js 16 with App Router
- TypeScript for type safety
- Tailwind CSS for styling
- File-based storage via filesystem
MIT