Files
agent-park/.planning/codebase/STACK.md
T
2026-04-18 19:28:53 +08:00

6.4 KiB

Technology Stack

Analysis Date: 2026-04-18

Languages

Primary:

  • TypeScript 5.x - Application code, API routes, hooks, Prisma access, and most tooling live in src/**/*.ts, src/**/*.tsx, prisma/seed.ts, tailwind.config.ts, and vitest.config.ts; the compiler is declared in package.json.

Secondary:

  • JavaScript - Next.js and PostCSS config live in next.config.js and postcss.config.mjs.
  • CSS - Global styling and external font/icon imports live in src/app/globals.css.
  • JSON - Locale message catalogs live in src/messages/en.json and src/messages/zh.json; repo config also uses .eslintrc.json and .prettierrc.json.
  • Prisma schema DSL - Database schema and datasource definitions live in prisma/schema.prisma.

Runtime

Environment:

  • Node.js - Repo runtime is Node-based because scripts use next, vitest, prisma, and ts-node from package.json.
  • Version pinning: Not detected in repo. No .nvmrc, .node-version, or .tool-versions file is present.
  • Local tool version observed in this workspace: Node.js v22.21.1.

Package Manager:

  • pnpm - Project commands, lockfile, and Vercel install/build configuration use pnpm in package.json, pnpm-lock.yaml, and vercel.json.
  • Local tool version observed in this workspace: pnpm 10.27.0.
  • Lockfile: present in pnpm-lock.yaml.

Frameworks

Core:

  • Next.js 15.1.11 - App Router web framework for pages, layouts, metadata, and route handlers in src/app/**/*; version declared in package.json.
  • React 19.0.0 and react-dom 19.0.0 - UI runtime for components in src/components/**/* and route segments in src/app/**/*; versions declared in package.json.
  • next-intl 4.0.2 - Locale routing and message loading via next.config.js, src/middleware.ts, src/i18n/request.ts, and src/app/[locale]/layout.tsx.
  • Prisma 6.1.0 / @prisma/client 6.1.0 - ORM and generated client used in src/lib/prisma.ts, src/hooks/useProjects.ts, src/app/api/**/*, prisma/schema.prisma, and prisma/seed.ts.
  • Zod 3.24.1 - Request and payload validation in src/lib/validations.ts and multiple route handlers under src/app/api/**/*.

Testing:

  • Vitest 2.1.8 - Unit-style test runner configured in vitest.config.ts and used by files such as src/lib/auth.test.ts and src/app/api/tags/route.test.ts.

Build/Dev:

  • Tailwind CSS 3.4.17 - Utility-first styling configured in tailwind.config.ts and consumed by src/app/globals.css and component classes across src/components/**/*.
  • PostCSS 8.x with autoprefixer 10.4.20 - CSS processing configured in postcss.config.mjs.
  • ESLint 9.x with eslint-config-next 15.1.11 and eslint-config-prettier 9.1.0 - Linting configured in .eslintrc.json.
  • Prettier 3.4.2 - Formatting configured in .prettierrc.json.
  • ts-node 10.9.2 - TypeScript execution for seeding via the prisma.seed command in package.json.
  • tailwindcss-animate 1.0.7 - Tailwind plugin loaded in tailwind.config.ts.

Key Dependencies

Critical:

  • next 15.1.11 - Main application framework; routes, layouts, metadata, and route handlers all depend on files under src/app/**/*.
  • react 19.0.0 / react-dom 19.0.0 - Required by all React components in src/components/**/* and page/layout files in src/app/**/*.
  • @prisma/client 6.1.0 - Database access layer instantiated in src/lib/prisma.ts and used heavily in src/hooks/useProjects.ts, src/app/api/projects/route.ts, src/app/api/signals/route.ts, and related files.
  • prisma 6.1.0 - Schema and migration tool backing prisma/schema.prisma and prisma/migrations/*/migration.sql.
  • next-intl 4.0.2 - Locale middleware and message loading depend on src/middleware.ts, src/i18n/request.ts, and src/messages/*.json.
  • zod 3.24.1 - Input validation for search, tag maintenance, and webhook payloads in src/app/api/search/ai/route.ts, src/app/api/tags/maintenance/route.ts, and src/app/api/webhook/signals/route.ts.

Infrastructure:

  • @vercel/analytics 1.6.1 and @vercel/speed-insights 1.3.1 - Vercel client telemetry mounted in src/app/VercelMetrics.tsx and conditionally included in src/app/layout.tsx.
  • react-markdown 10.1.0, remark-gfm 4.0.1, and rehype-sanitize 6.0.0 - Markdown rendering stack used by src/components/project/MarkdownContent.tsx.
  • lucide-react 0.468.0 - Icon set optimized through experimental.optimizePackageImports in next.config.js.

Configuration

Environment:

  • Template env vars are documented in .env.example.
  • Real runtime env files exist as .env and .env.local; contents were not read.
  • Code-level env usage is limited to:
    • DATABASE_URL in prisma/schema.prisma
    • WEBHOOK_API_KEY in src/lib/auth.ts
    • N8N_AI_SEARCH_WEBHOOK in src/app/api/search/ai/route.ts
    • NEXT_PUBLIC_SITE_URL in src/app/robots.ts and src/app/sitemap.ts
    • VERCEL_ENV in src/app/layout.tsx
  • .env.example also declares NEXT_INTL_DEFAULT_LOCALE and NEXT_INTL_SUPPORTED_LOCALES, but locale handling in current code is hard-coded in src/i18n/request.ts and src/middleware.ts.

Build:

  • next.config.js wires next-intl, remote image hosts, and optimizePackageImports.
  • tsconfig.json enables strict TypeScript, noUncheckedIndexedAccess, noImplicitReturns, and the @/* path alias.
  • tailwind.config.ts and postcss.config.mjs define the styling pipeline.
  • vercel.json defines deployment-time build/install commands, Next.js framework selection, region hkg1, and disables Git-triggered deployments.
  • package.json scripts expose dev, build, start, lint, test, and Prisma seeding.

Platform Requirements

Development:

  • Node.js and pnpm are required to run package.json scripts.
  • PostgreSQL is required because prisma/schema.prisma uses the postgresql provider and DATABASE_URL.
  • Prisma client generation is required before production builds; vercel.json explicitly runs pnpm prisma generate && pnpm build.

Production:

  • Vercel is the explicit deployment target indicated by vercel.json and the Vercel-specific telemetry components in src/app/VercelMetrics.tsx.
  • The app expects Vercel environment semantics for telemetry gating via process.env.VERCEL_ENV in src/app/layout.tsx.
  • Server runtime storage is PostgreSQL via Prisma; no alternate production datastore is configured in repo.

Stack analysis: 2026-04-18