Azure DevOps Powered Support Ticketing
Production • Quick Start • Features • Documentation
DevDesk is a Zendesk-style support ticketing portal that uses Azure DevOps as its backend. Built by KnowAll.
- Microsoft Authentication - Sign in with Azure AD/Microsoft accounts
- Azure DevOps Integration - Work items tagged as "ticket" appear as support tickets
- Multi-tenant Support - Different clients have different DevOps projects (e.g., Medite, Cairn Homes)
- Permission-based Access - Users only see tickets from projects they have access to
- Email-to-Ticket - Send emails to [email protected] to create tickets automatically
- Email Responses - Replies to tickets email the requester via Exchange Online
- Zendesk-like UI - Familiar interface with views, filters, and ticket management
- Node.js 18+
- npm or yarn
- Azure DevOps organization
- Azure AD application for authentication
- Exchange Online mailbox (for email integration)
-
Clone the repository
git clone https://github.com/knowall-ai/devdesk.git cd devdesk -
Install dependencies
npm install
-
Configure environment variables
cp .env.example .env
Edit
.envwith your values (see .env.example) -
Run the development server
npm run dev
-
Open the application Navigate to http://localhost:3000
- Register a new application in Azure AD
- Add redirect URIs:
- Development:
http://localhost:3000/api/auth/callback/azure-ad - Production:
https://devdesk.knowall.ai/api/auth/callback/azure-ad
- Development:
- Configure API permissions for Azure DevOps:
499b84ac-1321-427f-aa17-267ca6975798/.default(Azure DevOps)
- Create a client secret and note it down
Only Azure DevOps work items with the "ticket" tag will appear in DevDesk. To convert any work item into a support ticket:
- Open the work item in Azure DevOps
- Add the tag "ticket"
- The item will now appear in DevDesk
DevDesk maps Azure DevOps projects to organizations/clients:
| Project | Domain | Description |
|---|---|---|
| Medite | medite.com | Medite client project |
| Cairn Homes | cairnhomes.com | Cairn Homes client project |
| KnowAll | knowall.ai | Internal KnowAll project |
Customers send emails to [email protected] to create tickets:
- Set up Exchange Online mailbox for [email protected]
- Configure mail flow rule to forward to webhook
- Or use Power Automate to POST to
/api/email/webhook
When agents reply to tickets, the requester receives an email:
- Configure Exchange Online SMTP settings
- Set
SMTP_*environment variables - Replies include ticket reference for threading
- Create shared mailbox: [email protected]
- Enable SMTP AUTH for the mailbox
- Create app password or configure OAuth
- Set up mail flow rules for inbound processing
See docs/EMAIL_SETUP.adoc for detailed instructions.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Authentication: NextAuth.js with Azure AD
- Backend: Azure DevOps REST API
- Icons: Lucide React
- Deployment: Azure App Service
devdesk/
├── src/
│ ├── app/ # Next.js app router pages
│ │ ├── api/ # API routes
│ │ │ ├── auth/ # NextAuth endpoints
│ │ │ ├── devops/ # DevOps API proxy
│ │ │ └── email/ # Email webhook
│ │ ├── tickets/ # Ticket pages
│ │ ├── customers/ # Customer pages
│ │ ├── organizations/ # Organization pages
│ │ └── login/ # Login page
│ ├── components/ # React components
│ ├── lib/ # Utility functions
│ └── types/ # TypeScript types
├── docs/ # Documentation
├── tests/ # Playwright tests
└── public/ # Static assets
# Run development server
npm run dev
# Build for production
npm run build
# Run production server
npm startThe following checks run automatically on every pull request via GitHub Actions:
# Run all checks (recommended before pushing)
npm run check
# Individual checks
npm run typecheck # TypeScript type checking
npm run lint # ESLint
npm run lint:fix # ESLint with auto-fix
npm run format:check # Prettier format check
npm run format # Prettier auto-format
# Run tests
npm run testAll checks must pass before a PR can be merged.
Proprietary - KnowAll AI Ltd.
For support, email [email protected] or visit knowall.ai.