Files

141 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `</style>` (transitive through `next/node_modules/postcss`)
Plus **transitive**:
- `glob` 10.2.010.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.09.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.