TypeScript + React application built with Next.js (SWC compiler).
- Next.js 15 (Pages Router)
- React 18
- TypeScript
- SWC (Next.js built-in compiler/minifier; no Babel pipeline)
- ESLint + Prettier
- Vitest + Testing Library
- Playwright + start-server-and-test
- Docker + Docker Compose
- Husky + lint-staged
- GitHub Actions CI
- Node.js 20+
- npm
npm cinpm run devOpen:
npm run typechecknpm run lint
npm run formatnpm run testnpm run build
npm run e2e:cinpm run buildNext.js build output is written to .next/.
npm run startOpen:
Runs next dev in a container with your local source mounted for live edits.
docker compose up --buildOpen:
Builds and runs next start on port 4173.
docker compose -f docker-compose.yml up --buildOpen:
Build the image:
docker build -t projectrainbows-web .Run it:
docker run --rm -p 4173:4173 projectrainbows-webOpen:
GitHub Actions runs:
npm cinpm run typechecknpm run lintnpm run test:runnpm run buildnpm run e2e:ci
CI also verifies there is no project Babel configuration so Next.js compiles with SWC.
-
pages/— Next.js Pages Router routes -
src/— shared React/TypeScript components, styles, and test setup -
.next/— Next.js build output (generated) -
e2e/— Playwright end-to-end tests -
.github/workflows/ci.yml— CI pipeline -
Dockerfile— production Next.js container build -
docker-compose.yml— production container config -
docker-compose.override.yml— development container overrides -
docker-compose.e2e.yml— Playwright tests inside Docker -
tsconfig.json— TypeScript compiler settings -
vitest.config.ts— Vitest configuration -
playwright.config.ts— Playwright configuration -
commitlint.config.cjs— commit message lint rules -
CHANGELOG.md— release notes / project history -
package.json/package-lock.json— dependencies + scripts -
Makefile— convenience shortcuts for common tasks
.next/is generated output and should not be committed.- This repo intentionally does not include a Babel config file, so Next.js uses SWC end-to-end.
package-lock.jsonmust be generated by npm commands (npm install/npm ci) and never hand-edited.