# Stack Profile — `iot-standards-lab-landing` > Reference prototype landing page for the KNU CS IoT Standards Lab. > Workspace: `/home/godopu16/PuKi/lab/landing_page/refer_landing_page` > Produced as the deliverable for kanban task `t_239791d2`. ## 1. Languages, Frameworks, Package Manager | Layer | Pin / Range | Installed | Latest | Note | |---|---|---|---|---| | Language | TypeScript `^5.5.3` | 5.9.3 | 6.0.3 | Pin is fine; major jump to TS 6 is non-breaking for most code | | Framework | Next.js `14.2.5` (exact) | 14.2.5 | 16.2.9 | 2 majors behind; line-locked by app's React 18 dep | | UI runtime | `react` `^18.3.1`, `react-dom` `^18.3.1` | 18.3.1 | 19.2.7 | React 19 is available but is a major — see §5 | | Package manager | npm (single `package-lock.json`, lockfile v3) | npm 10.9.7 | — | No `pnpm-lock.yaml` / `yarn.lock` / `bun.lockb` present | | Runtime | Node v22.22.2 (host) | — | — | No `engines` field declared | **Type system config** (`tsconfig.json`): - `strict: true`, `noEmit: true`, `incremental: true` - `moduleResolution: "bundler"`, `jsx: "preserve"`, `isolatedModules: true` - `plugins: [{ "name": "next" }]`, path alias `@/*` → `./*` **Next.js config** (`next.config.js`): - `reactStrictMode: true`; no image domains, no redirects, no rewrites, no headers, no experimental flags. Minimal by design. **Styling**: - Tailwind CSS `^3.4.6` (installed 3.4.19) — latest line is 4.x; the `tailwind.config.ts` is rich enough (114 lines, custom theme) that the v3→v4 jump is a planned migration, not a `npm update`. - `postcss.config.js` wires Tailwind + `autoprefixer` (^10.4.19). - Font stack is loaded via `next/font` and exposed as CSS variables — no external font loader (Google Fonts, Fontsource) is in the dep tree. **Not present**: - No `Dockerfile` / `docker-compose*` / `dockerignore` — there is no container image for this app. - No `.env`, `.env.example`, `.envrc` — the app reads no env vars. - No `.eslintrc*` file and no `eslintConfig` block in `package.json`. ESLint runs through `next lint`, which uses `eslint-config-next`'s defaults (`core-web-vitals` + `next/typescript`). - No `.prettierrc*` — formatting is not enforced in CI. - No `.github/`, no `.gitlab-ci.yml`, no `.circleci/` — no CI pipeline. ## 2. Dependencies ### Direct (runtime) — 3 packages | Package | Pin | Purpose | |---|---|---| | `next` | `14.2.5` (exact) | Framework | | `react` | `^18.3.1` | UI library | | `react-dom` | `^18.3.1` | DOM renderer | ### Dev — 10 packages | Package | Pin | Purpose | |---|---|---| | `@types/node` | `^20.14.0` | Node typings (dev only) | | `@types/react` | `^18.3.3` | React typings | | `@types/react-dom` | `^18.3.0` | React DOM typings | | `autoprefixer` | `^10.4.19` | PostCSS plugin | | `postcss` | `^8.4.39` | CSS pipeline | | `tailwindcss` | `^3.4.6` | Utility CSS | | `typescript` | `^5.5.3` | Compiler | | `eslint` | `^8.57.0` | Linter | | `eslint-config-next` | `14.2.5` (exact, matches Next) | Next-flavored ESLint config | **Observations**: - Footprint is intentionally minimal — no `framer-motion`, no UI lib (shadcn/Radix/MUI), no icon set, no analytics, no CMS client, no image CDN. - `next` and `eslint-config-next` are pinned **exact** (no `^`); `react` and `react-dom` use `^`. This is the right call: Next and its ESLint config must move together. - Dev types are pinned to React 18, consistent with the runtime. - `package-lock.json` is 215 KB → transitive tree is fairly clean; the project has no obvious bloat. ## 3. Scripts Four npm scripts, all thin wrappers around `next`: | Script | Command | Use | |---|---|---| | `npm run dev` | `next dev` | Local dev server (default port 3000) | | `npm run build` | `next build` | Production build → `.next/` | | `npm start` | `next start` | Run the production build | | `npm run lint` | `next lint` | ESLint via Next's wrapper | No `test`, `format`, `typecheck`, `prepare`, `pre-commit`, or any other lifecycle hooks. The 4-script surface is honest: linting is the only quality gate declared. ## 4. Configuration / Manifest Inventory | File | Lines | Notes | |---|---|---| | `package.json` | 28 | Single manifest, no `engines`, no `workspaces` | | `package-lock.json` | (215 KB) | npm v3 lockfile | | `tsconfig.json` | 22 | strict, bundler resolution, `@/*` alias | | `next.config.js` | 6 | `reactStrictMode: true` only | | `tailwind.config.ts` | 114 | Editorial design tokens, custom colors, custom animations | | `postcss.config.js` | 6 | tailwindcss + autoprefixer | | `next-env.d.ts` | 5 | Next-managed, gitignored | | `tsconfig.tsbuildinfo` | (80 KB) | Incremental build cache, gitignored | | `.gitignore` | 27 | Standard Next.js ignore set | | `.kanban-inventory.json` | 137 | Upstream inventory artifact (not a config) | | `.antigravity-session.md` | 46 | Upstream runtime artifact (not a config) | ## 5. Outdated / Vulnerable Pins (Trivially Obvious) ### Vulnerabilities (from `npm audit`) — 8 advisories, 1 critical `next@14.2.5` is affected by **21 published advisories** that are fixed in `14.2.35` (same line, not a major jump): - **Critical** (1): Cache poisoning (GHSA-gp8f-8m3g-qvj9) - **High** (6): DoS via Server Components, image optimizer, middleware cache poisoning, SSRF via middleware redirect, etc. - **Moderate** (1): PostCSS XSS via unescaped `` (transitive through `next/node_modules/postcss`) Plus **transitive**: - `glob` 10.2.0–10.4.5 — command injection in CLI (only triggered if `glob`'s CLI is invoked; **not a runtime risk for this Next app**) - `minimatch` 9.0.0–9.6 — ReDoS (transitive via ESLint's glob walker; **dev-time only**) **Recommended fix (lowest-risk):** `npm install next@14.2.35` — same major, same line, fixes 21 Next advisories + the transitive `postcss` advisory. Does **not** require React changes. `npm audit fix --force` would jump to Next 16 + React 19 — that's a planned migration, not a security patch. ### Outdated-by-major pins (information only — not security) | Pin | Major delta | Risk profile | |---|---|---| | `next` 14 → 16 | App Router stabilized; some breaking changes (params async, etc.) | Planned migration | | `react`/`react-dom` 18 → 19 | New compiler, ref as prop, async transitions | Requires Next 15+ | | `eslint` 8 → 10 | Flat config becoming default | Could be deferred | | `typescript` 5 → 6 | Mostly compat, some strictness tightening | Trivial in this codebase | | `tailwindcss` 3 → 4 | New engine, config format change | Significant migration (would touch `tailwind.config.ts`) | | `@types/*` React 18 → 19, Node 20 → 25 | Mismatched with installed Node 22 host | Cosmetic | | `@types/node` 20 → 25 | Host is Node 22 — current pin still works but `25` would track current Node | Cosmetic | The biggest near-term "looks dated" item is the **React 18 + Next 14 stack** (released mid-2024), but everything is internally consistent — no mixed majors, no version skew between `next` and `eslint-config-next`. The stack is intentionally conservative. ### Compatibility sketch (host vs declared) - Host Node 22, npm 10.9.7 — fits Next 14 / React 18 cleanly. No `engines` field; any contributor on Node ≥18 works. - `eslint@8` is the last v8; the `next lint` shim still works in Next 14.2. ## 6. Build / Toolchain Footprint Summary - **Source files**: 25 (14 .tsx, 2 .ts, 2 .js, 1 .css, 2 .json, 4 .md), ~2,605 LOC excluding deps and lockfile (per upstream `.kanban-inventory.json`). - **Routes**: 5 under `app/` (`/`, `/lectures`, `/members`, `/publications`, `/standardization`). - **Shared components**: 7 in `components/`. - **Build artifacts present**: `node_modules/` (342 dirs) and `.next/` exist; lockfile and `tsconfig.tsbuildinfo` present. - **No test runner, no formatter, no CI, no Docker, no env vars, no analytics, no CMS, no icon lib, no motion lib.** The dependency tree is the smallest viable Next 14 + React 18 + Tailwind v3 surface. ## 7. Stack-Profile Verdict A **deliberately minimal Next 14 App Router reference implementation**: a small landing page with a hand-rolled design system encoded in `tailwind.config.ts` and `app/globals.css`. Dependencies are minimal and internally consistent; the only real-world remediation on the table is bumping `next` to `14.2.35` (one-line patch) to clear 21 advisories. Major-version upgrades (Next 16, React 19, Tailwind 4) are a separate planned migration, not security work.