Skip to content

Tech stack

The languages, frameworks and services Monark is built on, with the major version in use. Versions come from the workspace package.json files.

<!-- source: package.json, services/web/package.json, services/api/package.json, packages/*/package.json -->

Platform and tooling

LayerTechnology
LanguageTypeScript 5, ESM, with full strict plus noUncheckedIndexedAccess, noImplicitReturns, noFallthroughCasesInSwitch, useUnknownInCatchVariables; moduleResolution: Bundler
RuntimeNode.js 22 or later
Monorepopnpm 10 workspaces (services/*, packages/*), Turborepo 2
Validationzod at every boundary: tRPC input, request bodies, environment
Lint, formatESLint with typescript-eslint, Prettier, lint-staged on commit
CIGitHub Actions

Frontend (services/web)

ConcernTechnology
FrameworkNext.js 15 (App Router), React 19
StylingTailwind CSS 4
UI primitivesRadix UI, shadcn-style components, class-variance-authority, lucide-react icons, next-themes, sonner toasts, cmdk command palette
Data fetchingtRPC 11 client with TanStack Query 5
Tables, drag and dropTanStack Table 8, @dnd-kit
Formsreact-hook-form with zod resolvers
Rich textTiptap 3 (rich-text fields), BlockNote (block documents)
Flow editorReact Flow (@xyflow/react)
Translationsnext-intl, English and French, kept at parity by pnpm check:i18n
Error trackingSentry

Backend (services/api)

ConcernTechnology
HTTP serverExpress 5
APItRPC 11 (Express adapter); a REST API under /api/v1 with an OpenAPI document
Loggingpino, pino-http
Error trackingSentry
AI assistantAnthropic SDK
Emailnodemailer over SMTP

Data and services

ConcernTechnology
DatabasePostgreSQL, accessed through Prisma 6
AuthSupabase Auth for sessions, with a User table in Monark's own schema
StorageSupabase Storage, private buckets, through the Files module's storage interface

Testing

LayerTechnology
Unit, integrationVitest 3; integration suites run against PostgreSQL in Testcontainers
ComponentVitest with MSW for network mocking
End to endPlaywright, with axe for accessibility checks

Deployment

PieceWhere
API, cronsA container image (services/api/Dockerfile); the Render blueprint is render.yaml
WebVercel