← All work
CRM & Business Systems
KBS Service Center
A service-complaint tracker for an AV company's repair desk: one shared log per case, closing ticks held by role, and a private thread the technicians never see.

What we built
- 01Case numbers issued by a single atomic statement, so two people submitting at once cannot collide
- 02Comments and system events in one timeline, each entry carrying the gap since the last and turning red past the threshold
- 03A case stays Open until the person who raised it and one holder of each required role has ticked it closed
- 04A private thread for Master Admin, Admin and Operations Manager, held in a table the public log never reads
- 05Roles, rights, closing rules and the case-number format all editable in the app, not in code
- 06Installable on phones, with photos downscaled in the browser and attachments served only to signed-in people on the case
Stack
- Next.js 16 (App Router)
- React 19
- TypeScript
- Tailwind CSS v4
- Server Actions
- Zod
- PGlite (Postgres in WebAssembly)
- Supabase Postgres
- Supabase Storage
- bcrypt sessions
- pdf-lib
- PWA service worker
- Vercel
A note on these screens. Every screen is a real capture of the running app on its demo dataset — the clients, serial numbers and comments in them are invented, because the live instance holds real customer complaints.




Next project
SayRead →
