Scaffold React/Vite SPA + port 80s aesthetic #33

Closed
opened 2026-06-14 23:39:33 +02:00 by myrmidex · 2 comments
Owner

Stand up the standalone React frontend in frontend/.

  • Vite + React + TypeScript (official template).
  • Tailwind 4 + the 80s terminal theme: red-500 primary, dark-only, monospace, 7-segment digital font, glow effects (.glow-red), digital progress-bar color zones.
  • Base layout + shared UI primitives (clean components from day one — no Inertia).
  • API client wired to the dev Vite proxy (/api).

Exit: SPA builds, is styled in the terminal aesthetic, and talks to /api.

Stand up the standalone React frontend in `frontend/`. - Vite + React + TypeScript (official template). - Tailwind 4 + the 80s terminal theme: red-500 primary, dark-only, monospace, 7-segment digital font, glow effects (`.glow-red`), digital progress-bar color zones. - Base layout + shared UI primitives (clean components from day one — no Inertia). - API client wired to the dev Vite proxy (`/api`). Exit: SPA builds, is styled in the terminal aesthetic, and talks to `/api`.
myrmidex added this to the v0.3.0 milestone 2026-06-14 23:39:33 +02:00
myrmidex added the
enhancement
label 2026-06-14 23:39:33 +02:00
myrmidex self-assigned this 2026-06-14 23:39:33 +02:00
Author
Owner

Scope addition (moved from #28): also add the dev Vite web service to compose.override.yaml (Node 22, HMR) once frontend/ is scaffolded, and wire the Vite dev-server /api proxy → the php container. The backend container stack (#28) is already running; this ticket adds the frontend container alongside it.

Scope addition (moved from #28): also add the dev **Vite `web` service** to `compose.override.yaml` (Node 22, HMR) once `frontend/` is scaffolded, and wire the Vite dev-server `/api` proxy → the `php` container. The backend container stack (#28) is already running; this ticket adds the frontend container alongside it.
myrmidex added a new dependency 2026-06-26 00:11:23 +02:00
myrmidex added a new dependency 2026-06-26 00:11:23 +02:00
Author
Owner

Resolved on release/v0.3.0 (6 commits: scaffold+compose service → Prettier → Tailwind 4 + theme → primitives + layout → API client → finish-phase token/hygiene cleanup).

Stood up the standalone React SPA in frontend/ (Vite + React 19 + TS 6, Tailwind 4 via @tailwindcss/vite, oxlint + Prettier). Runs as a dev-only frontend node service in compose.override.yaml (podman-compose); compose.prod.yaml untouched (prod build is #35).

Exit criteria met:

  • Buildsnpm run build (tsc -b && vite build) green in-container.
  • Styled — 80s terminal aesthetic ported from the old app's git history: dark-only OKLCH palette, red primary, recovered 7-segment font, .glow-red, DigitalProgressBar with chart-token color zones. Primitives (Button/Panel/DigitalProgressBar) + AppLayout shell, all using semantic theme tokens.
  • Talks to /api — Vite proxies /apihttp://php:80 (container-to-container, same-origin so the session cookie flows); verified /api/scenarios → 401 through both the container network and the proxy.

Also added a cookie-session API client (lib/api.ts: get/post/patch/delete, ApiError, ld+json / merge-patch+json, 204 handling) + Hydra envelope types — the foundation #52/#53-56 build on. Intentionally not wired to UI yet.

Deferred (deliberate): frontend test harness (vitest/msw) → #52 (first consumer). Prod build + CI → #35.

Notable gotchas captured in PLATFORM.md: named-volume node_modules (arch guard), proxy target php:80 not localhost:8100, erasableSyntaxOnly bans TS parameter properties.

pr-reviewer (full-ticket, all 5 commits rebuilt in isolated worktrees for bisect-safety): Approve, 0 must-fix.

Resolved on `release/v0.3.0` (6 commits: scaffold+compose service → Prettier → Tailwind 4 + theme → primitives + layout → API client → finish-phase token/hygiene cleanup). Stood up the standalone React SPA in `frontend/` (Vite + React 19 + TS 6, Tailwind 4 via `@tailwindcss/vite`, oxlint + Prettier). Runs as a dev-only `frontend` node service in `compose.override.yaml` (podman-compose); `compose.prod.yaml` untouched (prod build is #35). **Exit criteria met:** - **Builds** — `npm run build` (tsc -b && vite build) green in-container. - **Styled** — 80s terminal aesthetic ported from the old app's git history: dark-only OKLCH palette, red primary, recovered 7-segment font, `.glow-red`, DigitalProgressBar with chart-token color zones. Primitives (Button/Panel/DigitalProgressBar) + AppLayout shell, all using semantic theme tokens. - **Talks to /api** — Vite proxies `/api` → `http://php:80` (container-to-container, same-origin so the session cookie flows); verified `/api/scenarios` → 401 through both the container network and the proxy. Also added a cookie-session API client (`lib/api.ts`: get/post/patch/delete, ApiError, ld+json / merge-patch+json, 204 handling) + Hydra envelope types — the foundation #52/#53-56 build on. Intentionally not wired to UI yet. **Deferred (deliberate):** frontend test harness (vitest/msw) → #52 (first consumer). Prod build + CI → #35. Notable gotchas captured in PLATFORM.md: named-volume node_modules (arch guard), proxy target `php:80` not `localhost:8100`, `erasableSyntaxOnly` bans TS parameter properties. pr-reviewer (full-ticket, all 5 commits rebuilt in isolated worktrees for bisect-safety): Approve, 0 must-fix.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference: lvl0/buckets#33
No description provided.