# 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*