feat: initialize IoT Standards Lab website project with MAM skills & onboarding guide
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# 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.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.
|
||||
Reference in New Issue
Block a user