COORD: 44.21.90
OFFSET: +12.5°
SYS.READY
BUFFER: 99%
FOCAL_PT
BACK TO DEVLOG
DESIGN-STUDIO

First Trace for AI Studio Portfolio Site

Design engineer portfolio site — a Vite + React 19 SPA built in AI Studio, deployed to Docker Swarm. No `.traces/` directory existed yet. The project had uncommitted modifications across most componen

2026-01-22 // RAW LEARNING CAPTURE
PROJECTDESIGN-STUDIO

Starting Point

Design engineer portfolio site — a Vite + React 19 SPA built in AI Studio, deployed to Docker Swarm. No .traces/ directory existed yet. The project had uncommitted modifications across most component files (visible in git status: App.tsx, all View components, Header, Navigation, StickyFooter, Container, constants.ts, types.ts).

Goal: Create the default trace to capture how this codebase works for future sessions.

Assessing the Project

Quick file count showed 498 files total, but that includes node_modules/ and dist/. The actual source is ~28 files — a standard single-purpose SPA. No need to ask the user for scope confirmation.

Root listing revealed the full picture immediately:

App.tsx, constants.ts, types.ts, index.tsx, index.html
components/ (Views + UI primitives)
vite.config.ts, tsconfig.json, biome.json
Dockerfile, docker-compose.yaml, nginx.conf

No routing library, no state management, no API layer. Pure view-state switching.

Parallel Exploration

Launched two Explore agents simultaneously:

  1. Architecture agent — directory structure, entry points, config files, styling approach, dependencies, build/deploy
  2. Views agent — App.tsx view system, all *View.tsx components, Navigation, data layer (constants.ts + types.ts), UI primitives, animation patterns

Both returned comprehensive results. Key findings that weren't obvious from CLAUDE.md alone:

ArtMotionView is the complex one

A full simplex noise flow field with ~2000 particles rendered on Canvas 2D. Has two layout modes (workstation vs theater), 4 color palettes, physics controls (speed/chaos/density), seed management. Uses requestAnimationFrame directly — the only component with side effects beyond simple renders.

No motion library usage in components

Despite motion being in dependencies and import maps, the actual animation work is all:

  • Tailwind CSS keyframes (fadeIn, pulse-slow, scan, spin)
  • Hover transitions via Tailwind classes
  • Raw Canvas 2D + requestAnimationFrame for the particle system

The import maps in index.html provide esm.sh fallbacks for CDN resolution, but components use Tailwind animations directly.

Styling is 100% CDN Tailwind

No CSS files anywhere in the project. Everything is:

  • tailwind.config in a <script> tag in index.html (custom colors, fonts, animations)
  • <style> block in index.html (scrollbar, vertical-text, bg-noise utilities)
  • Tailwind classNames in components

Custom theme tokens: background (#050505), card (#0a0a0a), border (#1f1f1f), accent (#333), text-muted (#666).

Design system is opacity-layered, not shadow-based

Depth achieved through white/5 to white/20 border opacity, not box-shadows. Cards are semi-transparent dark backgrounds. This is a deliberate aesthetic choice — the Blueprint SVG background bleeds through subtly.

Synthesis Decisions

Format choices for the trace:

  • Mermaid for architecture — the component tree and data flow benefit from visual rendering
  • Mermaid for ER diagram — data schema is small but precise (3 types + 1 enum)
  • Mermaid for deploy pipeline — linear flow, clean in diagram form
  • Tables for file maps — quick reference, scannable
  • ASCII kept minimal — the view lifecycle is simple enough as a text flow

What to lead with:

Put Mental Model first — "single-page terminal dashboard" anchors understanding immediately. Someone reading this trace should grok the aesthetic intent before diving into file structure.

ArtMotionView got its own section because it's architecturally distinct from the other views (stateful, canvas-based, dual-layout, complex controls). The other views are pure render functions consuming constants.

Where We Landed

.traces/default.md created with:

  • Mental model + architecture diagram
  • View lifecycle (text flow — simple enough)
  • Complete file map (2 tables: components + UI primitives)
  • Data schema (Mermaid ER diagram)
  • Design system reference (colors, typography, animation inventory)
  • ArtMotionView deep dive with its own flow diagram
  • External deps breakdown (CDN vs import maps vs npm)
  • Build/deploy pipeline diagram
  • Dev commands reference

Takeaways

  • AI Studio projects use import maps as CDN fallbacks — the esm.sh URLs in index.html aren't the primary module source (npm provides that via Vite), but they enable the SPA to work if served without a bundler step.
  • Tailwind CDN config lives in a <script> tag — no tailwind.config.js file. Runtime configuration. This is the AI Studio pattern: everything in index.html for portability.
  • 498 files looks big, 28 source files is tiny — always filter out node_modules/dist before assessing project complexity for trace scoping.
LOG.ENTRY_END
ref:design-studio
RAW