No description
  • TypeScript 94.7%
  • JavaScript 2.5%
  • CSS 1.6%
  • Dockerfile 0.8%
  • Shell 0.4%
Find a file
vinnie 6ab9b8137a
Some checks failed
build-and-deploy / build (push) Failing after 55s
typecheck / typecheck (push) Successful in 1m31s
e2e / smoke (push) Successful in 2m58s
Merge pull request 'feat: helpdesk pivot — tickets + Entra device inventory' (#1) from feat/helpdesk-pivot into main
Reviewed-on: #1
2026-04-28 01:04:19 +00:00
.forgejo Initial commit 2026-04-28 00:19:16 +00:00
docs feat: helpdesk schema, zod validators, and Entra Graph client 2026-04-28 00:34:06 +00:00
k8s Initial commit 2026-04-28 00:19:16 +00:00
public Initial commit 2026-04-28 00:19:16 +00:00
scripts Initial commit 2026-04-28 00:19:16 +00:00
seed chore: remove items inventory boilerplate 2026-04-28 00:31:06 +00:00
src fix(entra): annotate getAllPages locals to satisfy noImplicitAny 2026-04-28 00:49:57 +00:00
.dockerignore Initial commit 2026-04-28 00:19:16 +00:00
.gitignore Initial commit 2026-04-28 00:19:16 +00:00
CLAUDE.md Initial commit 2026-04-28 00:19:16 +00:00
docker-entrypoint.sh Initial commit 2026-04-28 00:19:16 +00:00
Dockerfile Initial commit 2026-04-28 00:19:16 +00:00
next.config.js Initial commit 2026-04-28 00:19:16 +00:00
package.json feat: helpdesk schema, zod validators, and Entra Graph client 2026-04-28 00:34:06 +00:00
PLATFORM.md Initial commit 2026-04-28 00:19:16 +00:00
playwright.config.ts Initial commit 2026-04-28 00:19:16 +00:00
postcss.config.mjs Initial commit 2026-04-28 00:19:16 +00:00
README.md feat: helpdesk schema, zod validators, and Entra Graph client 2026-04-28 00:34:06 +00:00
schema.sql feat: helpdesk schema, zod validators, and Entra Graph client 2026-04-28 00:34:06 +00:00
tsconfig.json Initial commit 2026-04-28 00:19:16 +00:00

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/sync endpoint pulls every managed device via the Graph deviceManagement/managedDevices endpoint and upserts into the local devices table; 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