https://github.com/strapi/website
https://github.com/strapi/website
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/strapi/website
- Owner: strapi
- License: mit
- Created: 2026-01-30T10:21:24.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-06-09T18:43:30.000Z (about 1 month ago)
- Last Synced: 2026-06-09T20:17:20.412Z (about 1 month ago)
- Language: TypeScript
- Homepage: https://website-ui-omega.vercel.app
- Size: 2.63 MB
- Stars: 2
- Watchers: 0
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# strapi-website
Source code for the [strapi.io](https://strapi.io/) website. Monorepo with Strapi v5 CMS backend and Next.js 16 frontend.
## Tech stack
- [Strapi v5](https://strapi.io/) — Headless CMS
- [Next.js v16](https://nextjs.org/docs) — App Router, React 19
- [Shadcn/ui](https://ui.shadcn.com/) + [TailwindCSS v4](https://tailwindcss.com/) — UI components and styling
- [Turborepo](https://turbo.build/) — Monorepo tooling
## Getting started
### Prerequisites
- Docker — required for the PostgreSQL database
- Node.js 22 — we recommend using [nvm](https://github.com/nvm-sh/nvm) to manage versions
- pnpm 10
### Setup
1. Clone the repository
```sh
git clone
cd website
```
2. Install dependencies
```sh
# 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
```
3. Configure the API token
Before the frontend can fetch content from Strapi, you need to create an API token.
```sh
# 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](http://localhost:1337/admin), navigate to [Settings > API Tokens](http://localhost:1337/admin/settings/api-tokens), and create a new token. Copy its value into `STRAPI_REST_READONLY_API_KEY` in `apps/ui/.env.local`.
Refer to the [UI README](apps/ui/README.md#environment-variables) for details on all environment variables.
4. Run the project
```sh
# Start both Strapi and Next.js in dev mode
pnpm dev
```
- Frontend: [http://localhost:3000](http://localhost:3000)
- Strapi admin: [http://localhost:1337/admin](http://localhost:1337/admin)
## Project structure
### Apps
| Path | Description |
| ------------- | --------------------------------------------------- |
| `apps/ui` | Next.js 16 frontend ([README](./apps/ui/README.md)) |
| `apps/strapi` | Strapi v5 CMS ([README](./apps/strapi/README.md)) |
### Packages
| 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](./packages/strapi-types/README.md)) |
## Scripts
```bash
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 commit
```
Cleanup utilities:
```bash
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 caches
```
## Contributing
### Commits
Uses [conventional commits](https://www.conventionalcommits.org/) 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](.github/workflows/auto-pr.yml) extracts these into the PR description.
### CI
- **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 `dev` to `main`
## Documentation
Detailed docs are in the [/docs](./docs) directory and in individual app/package READMEs.
## Credits
Built on top of [strapi-next-monorepo-starter](https://github.com/notum-cz/strapi-next-monorepo-starter) by [Notum](https://github.com/notum-cz).