[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. 🫖 Status page with uptime monitoring & API monitoring as code 🫖 openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor

AGENTS.md — apps/dashboard #

Visual changes need a human #

An agent cannot verify rendering. If a change alters layout, styling or any visible behaviour, say so and ask for confirmation rather than reporting it as done. Prefer taking on work in packages/services, packages/api and the route handlers, where pnpm verify and the test suites are real evidence.

Runtimes #

The whole tRPC surface is served from apps/dashboard/src/app/api/trpc/lambda/[trpc]/route.ts on the Node.js runtime — several routers pull Node-only SDKs (@slack/web-api, email and notification clients). Node-only dependencies inside @openstatus/services are still forbidden, because apps/workflows runs the same code on Deno.

Client boundary #

A "use client" file must not value-import the schema barrel @openstatus/db/src/schema — it drags Drizzle and the whole schema graph into the browser bundle. Import the specific sub-path instead (@openstatus/db/src/schema/page_components/constants), or split the pure-zod part into a sibling file. import type from the barrel is fine; types erase.

Chat tool renderers #

Reuse the dashboard's own primitives — TableCell*, ResultTable, ChangesTable. Do not build bespoke chrome for a tool result.

Persisted chat messages are validated on write, which is what makes the asUIMessages cast in apps/dashboard/src/components/chat/use-chat-session.ts safe. Keep casts of that kind in one named helper.