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:* 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
| Workspace | Purpose | Status |
|---|---|---|
apps/design | Design catalog and component specimens | In use |
packages/design-system | Tokens, theme, antd configuration, charts | In use |
apps/docs | This documentation site | In use |
apps/api | Backend | Scaffolded |
apps/web | The member-facing product | Scaffolded |
packages/shared | Cross-workspace constants, types and helpers | Scaffolded |
apps/admin | Admin panel | Planned |
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.
| Command | Effect |
|---|---|
yarn dev | Every app in watch mode |
yarn build | Every workspace, in dependency order |
yarn check-types | TypeScript across the repository |
yarn lint | ESLint, plus the antd deprecation check in apps that use antd |
yarn test | Workspace 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.