Tagline: Support tickets, solved together.
QueueDesk is a lightweight support-ticket system for small teams. Customers or internal users can create support requests while support agents manage assignment, priority, status, discussion, and resolution.
- Make support requests easy to submit and follow.
- Give agents a clear queue and workflow.
- Keep requester and internal-agent conversations separate where required.
- Maintain a clear activity trail for every ticket.
- Demonstrate a production-oriented Astro + Solid + TypeScript application.
Requester: create tickets, view own tickets, reply, upload attachments, reopen resolved tickets.
Support Agent: view team queue, assign tickets, change status and priority, reply publicly, add internal notes, resolve tickets.
Administrator: manage users, categories, permissions, and system settings.
- Sign in.
- Create ticket.
- Select category and priority.
- Add description.
- Optionally attach files.
- Submit ticket.
- Receive confirmation.
- Follow replies and status changes.
- Reply to agent.
- Reopen a resolved ticket if allowed.
- Open ticket queue.
- Filter by status, priority, category, or assignee.
- Open a ticket.
- Assign ticket.
- Reply publicly or add internal note.
- Change priority.
- Move ticket through workflow.
- Resolve ticket.
openin_progresswaitingresolvedclosed
lownormalhighurgent
- Sign in
- Dashboard
- Ticket queue
- New ticket
- Ticket detail
- Requester ticket list
- Team management
- Category management
- Reports
- Settings
- Mobile ticket list
Display open, in-progress, waiting, and resolved ticket counts, recent activity, ticket trend, and oldest unresolved tickets.
Filters: status, priority, category, assignee, requester.
Search: ticket number, title, requester, ticket body.
Show ticket number, title, status, priority, requester, assignee, category, conversation, internal notes, attachments, activity timeline, and timestamps.
Core tables:
usersticketsticket_commentsticket_categoriesticket_attachmentsticket_activities
Suggested tickets fields: id, requester_id, assignee_id, category_id, title, description, status, priority, resolved_at, created_at, updated_at.
- Requesters can only view their own tickets.
- Agents can view all workspace tickets.
- Admins can manage all system data.
- Internal notes must never be visible to requesters.
Use Cloudflare R2 for attachments. Validate file type, size, ownership, and download authorization.
Use Resend for ticket created, ticket assigned, new public reply, and ticket resolved notifications.
Use Zod for ticket creation, comment creation, assignment, status transition, priority changes, and admin mutations.
- Status transition logic
- Authorization helpers
- Validation
- Search/filter helpers
- Requester creates ticket
- Agent assigns ticket
- Agent replies
- Requester replies
- Agent resolves ticket
- Unauthorized requester cannot access another ticket
- Astro
- SolidJS
- TypeScript
- Vite
- Node.js
- Tailwind CSS
- Neon Postgres
- Neon Auth
- Direct SQL, no ORM
- Zod
- Cloudflare R2
- Resend
- Vitest
- Playwright
- ESLint
- Prettier
- Sentry
- GitHub Actions
- Netlify
- Cloudflare DNS
- Netlify-managed SSL, optionally proxied through Cloudflare
Responsive UI, accessible forms, no secrets in the client bundle, rate limiting on login and ticket creation, Sentry error capture, sanitized user-generated content, and fast server-rendered initial load.
- Requester can create a ticket.
- Agent can assign it.
- Agent and requester can exchange public replies.
- Agent can create an internal note.
- Agent can move ticket through workflow.
- Every status change is recorded.
- Authorization rules are enforced.
- Attachments work.
- Email notifications work.
- Main flows pass Playwright.
- Application deploys successfully on Netlify.