Files
Portfolio/docs/redesign/discovery.md

2.2 KiB

Discovery brief (2026-10-10)

Synthesized from two read-only Haiku mapping passes of commit 08f3ac1 plus a look at the running site.

Stack

Vue 3.5 + TypeScript, Vite 8, three 0.185 (EffectComposer, bloom), zod, Geist fonts. SSR + prerender to static HTML with hydration. Vitest, Playwright (+axe). Node 22.

Run

  • npm run dev (vite on 127.0.0.1)
  • npm run typecheck, npm run test:unit, npm run test:browser
  • npm run build:preview = full static build with budgets

Structure

Single page, hash sections: start, profile, experience, infrastructure, selected-builds, additional-work, toolkit, contact. src/components (HeroJourney, SceneCanvas, ProjectCard, ...), src/scene (three world), src/journey (scroll/nav controllers, road signs), src/audio (adaptive soundtrack), src/styles (8 layered CSS files), src/content (zod schemas).

Content (preserve)

content/public/portfolio-content.json: Luca Pîslaru, System Administrator & Full-Stack Developer, Bucharest. Three roles, systems proof (Nextcloud migration, self-hosted platform), selected and additional projects, toolkit, education, languages, LinkedIn/GitHub/GitLab/email contact. Media in inputs/prepared-assets.

Current identity

Dark night-drive grand-tourer: fixed WebGL car/road scene behind content, scroll drives the camera, road-sign navigation, adaptive soundtrack. Palette canvas #040814, cyan #78d8e5, magenta #c74b91, amber #f4ad67. Geist + Geist Mono.

Works well

Strong content hierarchy, semantic no-JS/reduced-motion fallbacks, strict a11y and budget testing, native scrolling.

Weaknesses

  • Scroll perf: 71 fps with chapter masks vs 116 without (docs/performance).
  • ~2.4 MB of GLB models; heavy on mobile.
  • 8 overlapping stylesheets, repeated media queries.
  • Screen-reader and audience validation still pending.
  • The one-note "car on a road" metaphor says little about sysadmin + full-stack work.

Must preserve

All content and links; CSP/nginx/Cloudflare deploy contracts (nginx test asserts exact headers); performance budgets (initial JS 120 KB, HTML+CSS 100 KB, fonts 120 KB); test-hook gating (__PORTFOLIO_TEST_BUILD__ false in production); prerender markers in index.html.