Sefism is free for learners. We are here to help you grow, one step at a time.Join for free
Sefism.

Project structure · Full stack

Turborepo monorepo project structure

Opens with credits

One Git repository holding several apps and the packages they share, wired together by pnpm workspaces and run by Turborepo. apps/ holds things you deploy (two Next.js apps from the starter, later an API), packages/ holds shared code and config (UI components, ESLint and TypeScript configs, validation schemas, the database client). Turborepo runs each task in dependency order and caches the results, so you never rebuild what did not change.

Curated by Tauseef FayyazIntermediate146 files and foldersTurborepo 2.11, pnpm 11 (pinned by the official example), Node.js 24 LTSChecked October 2026
Explore the filesPick any file to see what it is, why it exists and when you add it.

How it grows

Each stage opens the explorer there

  1. 1Day 1What the scaffold and your first hour give you66 files and folders
  2. 2GrowingWhat a real app with features and tests adds+41 files and folders
  3. ProductionWhat running it for real users adds+20 files and foldersOpens with credits
  4. ExpertWhat a team needs to keep it healthy for years+19 files and foldersOpens with credits

How it is organised

  • `apps/` is for things you deploy; `packages/` is for things apps share. An app never imports from another app.
  • Every package declares what it uses in its own package.json, with internal ones as `workspace:*`. Install dependencies where they are used, not at the root.
  • Each package exposes a small public surface through its `exports` map. Importing a deep path or reaching into another package's folder is a bug.
  • Start with just-in-time packages (export TypeScript source, let the app compile it). Add a build step only for packages you publish or that a non-bundler tool must read.
  • Every task an app or package runs is a script in its package.json and a task in turbo.json. Declare `outputs` so cache hits restore files, `env` so cache keys include the variables a build reads, and `cache: false` for anything with side effects.
  • Configuration is shared through packages (`@repo/eslint-config`, `@repo/typescript-config`, `@repo/vitest-config`), so one pull request changes the rules everywhere.
  • CI runs the same turbo commands you run locally, with `--affected` and a remote cache, so the time a pull request takes grows with the change, not with the repo.
  • At Expert, boundaries are enforced, not hoped for: package tags and `turbo boundaries`, CODEOWNERS per folder, contract tests between apps.

At the top of the project

Open one in the explorer for the full story

Learn more on Sefism

Roadmaps, cheat sheets and projects that go with Turborepo monorepo.

See 9 more
Checked against 18 official sources, October 2026. If something has changed, the docs win.Show sources

Picked from the other libraries by shared topics.

Work with me

Stuck on something specific?

Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.

  • 1:1 Mentorship
  • Fresh Graduate Mentorship
  • Career Guidance

Brand deals, promos and partnerships: tauseeffayyaz@gmail.com