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:browsernpm 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.