Technical stack
Densy Club is a TypeScript monorepo. The browser-facing apps run Next.js and React with antd for components and Tailwind for layout; the backend runs NestJS; Turborepo orchestrates tasks and Yarn 4 manages packages.
Repository-wide
| Tool | Version | Role |
|---|---|---|
| Node | >=24 | Runtime |
| Yarn | 4.18.0 | Package manager — pinned by devEngines, so npm and npx are refused |
| Turborepo | ^2.10.9 | Task orchestration (build, dev, lint, check-types, test) |
| TypeScript | ^6.0.3 | Language |
| Prettier | ^3.9.6 | Canonical formatter |
Three libraries are declared once at the root and shared by every workspace:
zod ^4.4.3 for schemas, dayjs ^1.11.21 for dates, and lodash
^4.18.1 for collection helpers.
By workspace
TypeScript is not uniform. Everything runs ^6.0.3 except the API, which is
still on ^5.7.3.
| Workspace | Stack | TypeScript |
|---|---|---|
apps/web | Next.js 16.3.1, React 19.2.8, antd ^6.6.1, Tailwind v4 | ^6.0.3 |
apps/design | As apps/web, plus MDX (@next/mdx), lucide-react, @repo/design-system | ^6.0.3 |
apps/docs | Next.js 16.3.1, Nextra ^4.6.1 + nextra-theme-docs, Pagefind ^1.5.2 | ^6.0.3 |
apps/api | NestJS ^11.0.1 on Express, RxJS ^7.8.1, Jest ^30 | ^5.7.3 |
packages/design-system | antd ^6.6.1, Recharts ^3.10.1, Tailwind v4, Vitest ^3 | ^6.0.3 |
packages/shared | Plain TypeScript, no framework | ^6.0.3 |
typescript must stay a real TypeScript 6. typescript-eslint refuses to
run on TypeScript 7, and next dev reinstalls the latest TypeScript if it
cannot find one it recognises — which silently undoes the pin. A TypeScript 7
preview is installed alongside as @typescript/native, under a different
package name so it cannot be mistaken for the compiler in use.