No description
- TypeScript 94.7%
- JavaScript 2.5%
- CSS 1.6%
- Dockerfile 0.8%
- Shell 0.4%
| .forgejo | ||
| docs | ||
| k8s | ||
| public | ||
| scripts | ||
| seed | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| next.config.js | ||
| package.json | ||
| PLATFORM.md | ||
| playwright.config.ts | ||
| postcss.config.mjs | ||
| README.md | ||
| schema.sql | ||
| tsconfig.json | ||
HelpDesk
ESPO IT helpdesk app. Two surfaces in v1:
- Tickets — classic helpdesk ticket model (status, priority, assignee, requester). CRUD with owner-only edit/delete.
- Devices — Intune-managed device inventory cached from Microsoft Graph. The
/api/devices/syncendpoint pulls every managed device via the GraphdeviceManagement/managedDevicesendpoint and upserts into the localdevicestable; the page surfaces compliance state, encryption, last sync time, and sync run history.
Pivoted from openplatform/app-template. See PLATFORM.md for stack, deploy, and conventions inherited from the template.
Environment
The Entra integration uses the client-credentials flow against an Azure AD app registration with DeviceManagementManagedDevices.Read.All (Application permission, admin-consented).
Required env vars (mount as a K8s Secret in production):
AZURE_TENANT_ID=<tenant uuid>
AZURE_CLIENT_ID=<app registration client id>
AZURE_CLIENT_SECRET=<app registration secret>
Per /Users/vinnieespo/ESPO/HelpDesk/Cloud/FUTURE-HELPDESK-APP.md the existing app registration is ESPOHelpDesk with the right Graph permissions already granted.
Local development
bun install
bun run dev # http://localhost:3000
bun run typecheck # tsc --noEmit
bun test # bun:test, isolated DB harness via scripts/test-isolated.ts
bun run e2e # playwright smoke
Layout
schema.sql # Postgres schema (declarative; applied by CI)
src/
app/
page.tsx # Dashboard: status counts + recent tickets
tickets/ # /tickets list, [id], new
devices/ # /devices list (sync trigger UI)
api/
tickets/ # GET list / POST create, [id] GET/PATCH/DELETE
devices/ # GET list, sync POST
lib/
schemas.ts # Zod validators (TicketSchema, DeviceSchema, ...)
entra/ # Microsoft Graph client (client-credentials flow)
client.ts
devices.ts
index.ts
components/ # shadcn/ui primitives
__tests__/
tickets-api.test.ts
devices-api.test.ts