Tech Stack
Highlights
- Role-based access (staff vs customer) with server-side authorization checks.
- Ticket activity timeline (status, assignee, tag, priority changes) for accountability.
- Search + filters for fast triage (status, assignee, tags, priority).
- Input validation, rate limiting, and safe pagination for public endpoints.
Description
Support requests are often scattered across email threads and DMs, which makes it hard to track ownership, response time, and history. This project centralizes support into a single workflow: customers create tickets, staff respond, and the system keeps a durable record of every change.
Project Info
What I Built
- Ticket creation, assignment, tagging, and status workflow (open → in progress → resolved).
- Separate message types: internal staff notes vs customer-visible replies.
- Activity/event log table to power timelines and auditing.
- REST API with consistent error handling and pagination for lists.
Data Model
Core tables include tickets, messages, events, and tags, with user/role relationships to enforce access boundaries.
- tickets: subject, status, priority, requester_id, assignee_id, created_at
- ticket_messages: ticket_id, author_id, visibility (internal/public), body
- ticket_events: ticket_id, actor_id, type, payload, created_at
- tags + ticket_tags: many-to-many categorization
Deployment Notes
- Runs behind Nginx as a reverse proxy with process management via PM2.
- Environment-based configuration with `.env` for secrets and per-environment settings.