- PCB scale: 1 (native mm from FreeCAD)
- Camera stops: all positions scaled to mm (0.15m overview, 0.06m close-ups)
- Fog: 0.1-0.4 range (was 12-40)
- Lights: positions scaled to mm, distance 0.15-0.2
- Mouse parallax: 0.015 (was 1.5)
- CameraLight follow offset: 0.01 (was 1)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PCB assembly scale fixed (was 0.15, now 15 — model in mm units)
- Hero component import removed from preview.astro
- Loading screen: added "Version sans 3D →" button linking to /static/
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Countdown page:
- Cartouche footer bottom-right: titre, copyright, contact LinkedIn/email
- Glassmorphism (blur 12px, dark 50%)
- Mobile: becomes full-width centered
- Links are pointer-events: auto (clickable through overlay)
Mouse capture fix:
- .webgl-bg now has pointer-events: auto (was missing)
- .overlay children are pointer-events: none (was auto — was blocking mouse events)
- Only links and tagline area are interactive
- Three.js canvas receives mouse events across entire viewport
PCB silkscreen labels still present on preview (SectionLabel with scrollTarget)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Full-screen loading overlay with BMU.jpeg from KXKM repo
- Title "L'electron rare" with cyan accent
- Animated progress bar (gradient cyan → amber)
- Rotating status messages (electronics-themed)
- Floating animation on BMU photo
- Auto-detects when WebGL canvas renders, then fades out (1s)
- Falls back gracefully if WebGL never loads
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Assembly now exports ALL 380 meshable objects (was 76)
- Includes: 4x switch MOSFET boards, BMU v2, I2C repeater, all SMD components
- Subsampled to 267K faces / 5.7MB GLB for web performance
- Removed BoardTitle silkscreen text overlay (was white labels on board)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Hero HTML deleted — the 3D PCB board IS the hero
- First viewport = 100vh spacer showing full board overview
- SectionLabel now clickable:
MCU → #a-propos (Approche)
ANALOG → #cas-concrets
POWER → #photos
FORMATION → /formation/
MISSIONS → #graphic-sprints-title
CONTACT → opens 3D popup
- Hover: label glows white, grows, ring appears
- Click: smooth scroll to target section
- Cursor changes to pointer on hover
- Labels visible directly on the PCB 3D as silkscreen text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Ambient light 0.1 → 0.25
- Directional lights doubled (0.4→0.7, 0.15→0.3)
- Point light 0.2 → 0.4
- CameraLight: PointLight that follows camera position (intensity 0.6)
- Fog pushed back (8,30 → 12,40) for better PCB visibility
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 6x pcb-spacer (60vh transparent) between each content section
- Allows the PCB 3D model to be visible during scroll transitions
- Camera zooms on components during spacer gaps
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- LogoOrbit uses logo-mark.png as texture on 3D plane (not text)
- 3 copies at different tilts/speeds/colors (cyan, amber, green)
- Radii 1.0-1.3 (very close to nucleus)
- Billboard rendering (always faces camera)
- Glow sphere behind each logo
- Emissive tint matches orbit color
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PCB 3D Models:
- bmu-v2-full.glb (1.6MB) — complete BMU v2 from FreeCAD with all components
- bmu-switch-mosfet.glb (369KB) — switch MOSFET daughter board
- Source: KXKM_Batterie_Parallelator branch object-orriented
- Converted via cascadio/trimesh from STEP
Fonts:
- Orbitron Bold (17KB) — geometric futuristic font for 3D text
- Space Mono Bold (80KB) — tech monospace
- Applied to all WebGL text (section labels, silkscreen, countdown)
Countdown (AtomGlitch):
- 3x "ER" logo at nucleus center, each on different rotation axis
- Cyan, amber, green glow variants
- Orbitron font for all orbital text
WebGL Background:
- RealPCB now uses bmu-v2-full.glb (real FreeCAD model)
- SwitchBoard added as secondary board
- Orbitron font for section labels
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
WebGL Background v2:
- Real KXKM BMU v2 PCB (GLB) as central 3D object
- 6 component zones with real KiCad GLB models:
MCU (QFP32+SOIC8), ANALOG (SOIC8s), POWER (QFP32+caps+inductor),
COM (SOIC8s), MISSIONS (QFP32), CONTACT
- ~70 real components (resistors, caps, inductors, LEDs, ICs)
- 25 extra scattered passives for realism
- Camera orbits PCB, zooms into each zone on scroll (8 stops)
- Current flow: 80 cyan + 40 amber particles circling the board
- Section labels as silkscreen text
- Board title: "L'ELECTRON RARE REV 2026.1"
Countdown (AtomGlitch):
- Text orbits tightened (radius 3.8→2.0, 3.5→1.8, etc.)
- Countdown ring radius 4.2→2.5
- Decorative ring 5.8→3.5
- All text closer to nucleus for denser, more energetic feel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ICComponent: uses qfp32.glb (large) or soic8.glb (small) with fallback to procedural
- Capacitor: uses capacitor_0805.glb with scroll-reactive glow
- Resistor: uses resistor_0603.glb
- LED: uses led_0603.glb + dynamic PointLight for glow effect
- All models preloaded via useGLTF.preload()
- Fallback to procedural geometry if GLB fails to load
- Models from KiCad 10.0 official 3D library (STEP → GLB via cascadio)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Board expanded from 38 to 90 units depth
- All component positions, vias, branches, labels rescaled
- Zoom stops recalibrated for wider travel
- Substrate expanded (35x110)
- More breathing room between sections
- Camera Z range updated to match
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Silkscreen text on all components (ref designators, values, section labels)
- SectionLabel component: glows when camera approaches (scroll proximity)
- Camera zoom stops: 8 waypoints, smooth interpolation between components
- FOV transitions (50→40→42 etc.) for cinematic zoom effect
- smoothstep easing between stops
- Mouse parallax on camera position and lookAt
- Board markings: "L'ELECTRON RARE REV 2026.1", "Made in France"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Cards: perspective 3D enter animation (rotateX/Y from blur)
- Scroll tilt: cards subtly rotate based on viewport position
- Atomic carousel: orbital scroll container with electron dot animation on hover
- Navigation arrows with glow + orbital track indicator
- Video hover autoplay in carousel items
- Lightbox: click any photo/video for full-view with energy rings
- Carousel items: 3D perspective rotateY(-3deg) on hover + glow border
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- WebGLBackground: fixed subtle atom + particles (dimmed, camera z=14)
- WebGLCards: scroll-triggered tile materialize with particle burst
- MediaLightbox: click photos/videos for full-view with orbital energy rings
- Dark design tokens in global.css (.dark-site variant)
- Glassmorphism cards, glow borders, staggered reveals
- Photo/video hover glow effects
- Each section wrapped in webgl-section for atomic reveal
- Each content block in webgl-card with per-section accent color
- Respects prefers-reduced-motion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Three.js + React Three Fiber + postprocessing (bloom, chromatic aberration, glitch, scanlines)
- Nucleus with pulsing energy core, wireframe icosahedron shell
- 3 electron orbits with trail particles + energy arcs
- 600 particle cloud with organic movement
- Circular orbital text: title, countdown timer, subtitle curved on 3D rings
- Mouse interactions: camera parallax, atom speed boost, nucleus glow on proximity
- Camera smooth lerp follow with gentle auto-drift
- Font fix: woff2 → ttf for troika-three-text compatibility
- Logo: static mark instead of missing sprite frames
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Self-hosted runner on Tower
- Playwright E2E 23 tests
- ntfy notifications on pass/fail
- Runs on push to main + PRs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SCP + restart on Tower instead of unreachable Photon
- Node SSR container with mascarade-frontend network
- Requires TOWER_HOST, TOWER_USER, TOWER_SSH_KEY secrets
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>