Source code for the strapi.io website. Monorepo with Strapi v5 CMS backend and Next.js 16 frontend.
- Strapi v5 — Headless CMS
- Next.js v16 — App Router, React 19
- Shadcn/ui + TailwindCSS v4 — UI components and styling
- Turborepo — Monorepo tooling
- Docker — required for the PostgreSQL database
- Node.js 22 — we recommend using nvm to manage versions
- pnpm 10
-
Clone the repository
git clone <repo-url> cd strapi-website
-
Install dependencies
# Switch to the correct Node.js version (v22) nvm use # Optionally, ensure the right pnpm version corepack prepare pnpm@10.28.1 --activate # Install all workspace dependencies pnpm install
-
Configure the API token
Before the frontend can fetch content from Strapi, you need to create an API token.
# Start Strapi first pnpm dev:strapi[!WARNING] This step is required before the first run. Without the token, the UI app won't be able to load any content.
Open the Strapi admin at http://localhost:1337/admin, navigate to Settings > API Tokens, and create a new token. Copy its value into
STRAPI_REST_READONLY_API_KEYinapps/ui/.env.local.Refer to the UI README for details on all environment variables.
-
Run the project
# Start both Strapi and Next.js in dev mode pnpm dev- Frontend: http://localhost:3000
- Strapi admin: http://localhost:1337/admin
| Path | Description |
|---|---|
apps/ui |
Next.js 16 frontend (README) |
apps/strapi |
Strapi v5 CMS (README) |
| Path | Description |
|---|---|
packages/eslint-config |
Shared ESLint + Prettier config |
packages/typescript-config |
Shared tsconfig |
packages/design-system |
Shared design tokens and styles |
packages/shared-data |
Shared constants and types |
packages/strapi-types |
Auto-generated types from Strapi schemas (README) |
pnpm dev # Run all apps
pnpm dev:ui # Run Next.js only
pnpm dev:strapi # Run Strapi only
pnpm build # Build all
pnpm lint # Lint all packages
pnpm commit # Interactive conventional commitCleanup utilities:
bash ./scripts/utils/rm-modules.sh # Remove all node_modules
bash ./scripts/utils/rm-all.sh # Remove node_modules, .next, .turbo, .strapi, dist
bash ./scripts/utils/rm-next-cache.sh # Remove .next cachesUses conventional commits enforced by Husky + commitlint.
feat(ui): add dark mode toggle
fix(strapi): resolve null pointer on login
chore: update dependencies
When introducing new env variables, mention them in the commit body (env.VARIABLE_NAME). The auto-pr workflow extracts these into the PR description.
- ci.yml — builds on every push/PR to
main - qa.yml — manual trigger for E2E, accessibility, and performance tests
- auto-pr.yml — auto-creates PRs from
devtomain
Detailed docs are in the /docs directory and in individual app/package READMEs.
Built on top of strapi-next-monorepo-starter by Notum.