Skip to Content
TechnicalProject architecture

Project architecture

Densy Club is a single repository containing every application and every shared package. Yarn workspaces resolve the packages, Turborepo runs tasks across them, and a change to a shared package is visible to its consumers immediately without publishing anything.

Workspace dependencies. Every edge is a workspace:* dependency; there are no others.

Two things follow from that shape. @repo/design-system and @repo/shared depend on nothing inside the repository, so they can be built first and in parallel. And no application depends on another application — the only sharing between apps happens through packages.

Layout

workspaces is apps/* and packages/* — every directory above is one or the other.

What each workspace is

WorkspacePurposeStatus
apps/designDesign catalog and component specimensIn use
packages/design-systemTokens, theme, antd configuration, chartsIn use
apps/docsThis documentation siteIn use
apps/apiBackendScaffolded
apps/webThe member-facing productScaffolded
packages/sharedCross-workspace constants, types and helpersScaffolded
apps/adminAdmin panelPlanned

In use means present and working today. Scaffolded means the workspace is set up and building, with its feature work still ahead. Planned means agreed direction with nothing in the repository yet.

How tasks run

turbo.json defines the task graph. build, check-types and test each declare dependsOn: ["^build"], so a workspace’s dependencies are built before it runs — which is why @repo/design-system and @repo/shared build first.

CommandEffect
yarn devEvery app in watch mode
yarn buildEvery workspace, in dependency order
yarn check-typesTypeScript across the repository
yarn lintESLint, plus the antd deprecation check in apps that use antd
yarn testWorkspace test suites

Single workspaces run through yarn workspace <name> <script> — for example yarn workspace docs build.

Yarn is pinned by devEngines, so any npm or npx command fails with EBADDEVENGINES. Use yarn dlx where you would reach for npx.

Last updated on