Commit Graph

12 Commits

Author SHA1 Message Date
725f91578d Dark theme, roles overhaul, modal New Ticket, My Tickets page, and more
All checks were successful
Build & Push / Build Server (push) Successful in 2m5s
Build & Push / Build Client (push) Successful in 41s
- Dark UI across all pages and components (gray-950/900/800 palette)
- New Ticket is now a centered modal (triggered from sidebar), not a separate page
- Add USER role: view and comment only; AGENT and SERVICE can create/edit tickets
- Only admins can set ticket status to CLOSED (enforced server + UI)
- Add My Tickets page (/my-tickets) showing tickets assigned to current user
- Add queue (category) filter to Dashboard
- Audit log entries are clickable to expand detail; comment body shown as markdown
- Resolved date now includes time (HH:mm) in ticket sidebar
- Store comment body in audit log detail for COMMENT_ADDED and COMMENT_DELETED
- Clarify role descriptions in Admin Users modal
- Remove CI/CD section from README; add full API reference documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 23:17:14 -04:00
d8dc5b3ded Full-page ticket layout: two-column with sticky sidebar
All checks were successful
Build & Push / Build Server (push) Successful in 1m26s
Build & Push / Build Client (push) Successful in 39s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 21:21:46 -04:00
64477529ea Add dbgenerated default for displayId
All checks were successful
Build & Push / Build Server (push) Successful in 57s
Build & Push / Build Client (push) Successful in 41s
prisma db push cannot add a non-nullable column to an existing table
without a database-level default. Using a PostgreSQL expression to
generate V + 9 random digits as the fallback default.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 20:58:44 -04:00
a19a9a6ccd Merge branch 'main' of https://gitea.thewrightserver.net/josh/TicketingSystem
All checks were successful
Build & Push / Build Server (push) Successful in 48s
Build & Push / Build Client (push) Successful in 40s
2026-03-30 20:53:51 -04:00
f65c259a71 Ticket IDs, audit log, markdown comments, tabbed detail page
- Tickets get a random display ID (V + 9 digits, e.g. V325813929)
- Ticket detail page has Overview / Comments / Audit Log tabs
- Audit log records every action (create, status, assignee, severity,
  reroute, title/overview edit, comment add/delete) with who and when
- Comments redesigned: avatar (initials + color), markdown rendering
  via react-markdown + remark-gfm, Write/Preview toggle
- Dashboard shows displayId and assignee avatar
- URLs now use displayId (/tickets/V325813929)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 20:53:37 -04:00
474b8b556c Update README.md
All checks were successful
Build & Push / Build Server (push) Successful in 51s
Build & Push / Build Client (push) Successful in 41s
2026-03-30 20:22:22 -04:00
429a530fc8 Use prisma db push instead of migrate deploy on startup
All checks were successful
Build & Push / Build Server (push) Successful in 1m35s
Build & Push / Build Client (push) Successful in 40s
Eliminates the need to generate and commit migration files locally
before first deploy. Schema is synced directly from schema.prisma
on container start.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:59:55 -04:00
3dce53f1dc Install openssl in server runtime image
Some checks failed
Build & Push / Build Server (push) Successful in 50s
Build & Push / Build Client (push) Has been cancelled
Prisma's schema engine requires libssl on Alpine.
Without it, migrate deploy fails with a JSON parse error
wrapping an ELF load failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:58:41 -04:00
8b0273e70b Remove Traefik — use simple port binding for NPM
All checks were successful
Build & Push / Build Server (push) Successful in 52s
Build & Push / Build Client (push) Successful in 39s
Stack uses Tailscale + Nginx Proxy Manager, not Traefik.
Client exposes PORT (default 3080) for NPM to proxy to.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:51:49 -04:00
ecaf17bf9f Add @types/node-cron to fix TypeScript build
All checks were successful
Build & Push / Build Server (push) Successful in 58s
Build & Push / Build Client (push) Successful in 42s
node-cron v3 does not ship its own type declarations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:45:32 -04:00
e7ecf210e0 Add package-lock.json for reproducible Docker builds
Some checks failed
Build & Push / Build Server (push) Failing after 24s
Build & Push / Build Client (push) Successful in 44s
npm ci in the Dockerfiles requires committed lockfiles.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:43:43 -04:00
21894fad7a Initial commit: TicketingSystem
Some checks failed
Build & Push / Build Client (push) Failing after 9s
Build & Push / Build Server (push) Failing after 28s
Internal ticketing app with CTI routing, severity levels, and n8n integration.

Stack: Express + TypeScript + Prisma + PostgreSQL / React + Vite + Tailwind
- JWT auth for users, API key auth for service accounts (Goddard/n8n)
- CTI hierarchy (Category > Type > Item) for ticket routing
- Severity 1-5, auto-close resolved tickets after 14 days
- Gitea Actions CI/CD building separate server/client images
- Production docker-compose.yml with Traefik integration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:38:32 -04:00