Overview
Built a full-stack internal helpdesk application designed specifically for organizations running Microsoft 365 and Entra ID. It runs as a standalone web app or as a Microsoft Teams personal tab with automatic SSO, keeping the entire experience inside the tools a Microsoft shop already uses.
What Was Done
- Built a monorepo with a React/TypeScript frontend, Azure Functions backend, and shared domain packages for types and validation
- Implemented Microsoft Entra ID authentication with role-based access control via security groups, separating end users, staff, and admins
- Integrated as a Microsoft Teams personal tab with automatic SSO so users authenticate without any additional login step
- Added Teams Activity Feed push notifications for ticket updates alongside 30-second in-app polling
- Built full ticket lifecycle management including inline field editing, bulk actions, per-ticket message threads, and file attachments via Azure Blob Storage
- Implemented a recycle bin with 90-day soft-delete auto-purge to protect against accidental ticket loss
- Added custom ticket status and category management, a staff directory, and an interactive Swagger API for admin use
- Structured the backend on Azure Functions with PostgreSQL for production and an in-memory fallback for development, keeping local setup lightweight
Outcome
Delivers a helpdesk experience native to the Microsoft 365 ecosystem, removing the need for third-party ticketing tools while giving admins full control over access, categories, and team notifications through infrastructure they already manage.
Stack
React · TypeScript · Azure Functions · PostgreSQL · Azure Blob Storage · Microsoft Entra ID · Microsoft Teams · Vite · pnpm