Files
CapaKraken/apps/web/next.config.ts
T
Hartmut 0d78fe1770 feat: Sprint 0 — CI/CD pipeline, production Docker, health checks
CI Pipeline (.github/workflows/ci.yml):
- 5 jobs: typecheck, lint, test, build, e2e (parallel where possible)
- PostgreSQL 16 + Redis 7 service containers for test/e2e
- pnpm store, Turborepo, Playwright browser caching
- Concurrency groups cancel in-progress runs

Production Docker:
- Dockerfile.prod: 3-stage build (deps → build → runtime ~150MB)
- docker-compose.prod.yml: postgres + redis + app with health checks
- .dockerignore for fast builds
- next.config.ts: output: "standalone" for minimal runtime

Health Check Endpoints:
- GET /api/health — liveness probe (200 OK, no deps)
- GET /api/ready — readiness probe (postgres + redis connectivity)

Documentation:
- docs/ci-cd-manual.md — full pipeline manual with troubleshooting
- plan.md — Product Owner strategic plan (bottlenecks, growth, automation)

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-19 20:33:18 +01:00

48 lines
1.2 KiB
TypeScript

import path from "path";
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "standalone",
experimental: {
optimizePackageImports: ["recharts", "date-fns"],
},
transpilePackages: [
"@planarchy/api",
"@planarchy/db",
"@planarchy/engine",
"@planarchy/shared",
"@planarchy/staffing",
"@planarchy/ui",
],
typedRoutes: true,
async headers() {
return [
{
source: "/(.*)",
headers: [
{ key: "X-Frame-Options", value: "DENY" },
{ key: "X-Content-Type-Options", value: "nosniff" },
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
{ key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=()" },
],
},
];
},
// Webpack config (used by `next build` and `next dev` without --turbo)
webpack(config) {
config.resolve.alias = {
...config.resolve.alias,
"~": path.resolve(__dirname, "src"),
};
// Resolve .js imports to .ts/.tsx (TypeScript ESM convention)
config.resolve.extensionAlias = {
...config.resolve.extensionAlias,
".js": [".ts", ".tsx", ".js"],
".jsx": [".tsx", ".jsx"],
};
return config;
},
};
export default nextConfig;