DESIGN.md · Analysis
Bruno Simon's Three.js Journey
bruno-simon.com · 14 Oct 2026 · 47 colors · Amatic SC, Nunito
Bruno Simon's Three.js Journey
An immersive 3D interactive portfolio built with Three.js, blending game-like exploration with creative developer storytelling through a neon-lit, cyberpunk-inspired aesthetic.
Colors
Typography
- display
- fontFamily: Amatic SC · fontSize: 60px · fontWeight: 700 · lineHeight: 68px · letterSpacing: -0.04em
- headline-lg
- fontFamily: Amatic SC · fontSize: 40px · fontWeight: 700 · lineHeight: 48px · letterSpacing: -0.02em
- headline-md
- fontFamily: Amatic SC · fontSize: 28px · fontWeight: 700 · lineHeight: 36px · letterSpacing: -0.01em
- title-lg
- fontFamily: Nunito · fontSize: 20px · fontWeight: 700 · lineHeight: 28px · letterSpacing: 0em
- body-lg
- fontFamily: Nunito · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0em
- body-md
- fontFamily: Nunito · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
- label-md
- fontFamily: Nunito · fontSize: 14px · fontWeight: 600 · lineHeight: 20px · letterSpacing: 0.01em
- label-sm
- fontFamily: Nunito · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.05em
Design guidance
Overview
Bruno Simon's Three.js Journey is an immersive 3D interactive portfolio that transforms the traditional web experience into a playable, explorable world. Built with Three.js and WebGPU, it serves creative developers and design-forward audiences seeking inspiration through experiential storytelling. The aesthetic is "Neon Cyberpunk Minimalism"—a high-contrast blend of deep purples and blacks (#1d1721, #251f2b) punctuated by vibrant neon accents (peach #ffceca, lime #d5ff95, and crimson #c21515). The UI evokes the feeling of a retro arcade meets modern creative studio: precise, playful, and unapologetically bold. The brand personality is confident yet approachable, technical yet whimsical. Example voice: "Drive around to discover secrets—and don't break anything."
Colors
The color system is built on a dark, atmospheric foundation with strategic neon highlights that guide interaction and emotion. **Primary (#ffceca, a warm peach)** is the signature accent used on call-to-action buttons, success states, and interactive focus indicators—it reads as inviting and creative without being aggressive. **Secondary (#d5ff95, a bright lime-green)** reinforces positive feedback and achievement states, creating visual contrast against the dark canvas. **Tertiary (#ffffff, pure white)** serves as the neutral text and structural element, ensuring legibility on the dark gradient backgrounds. **Error (#ff6a7c, a vivid crimson)** is reserved for danger states and the menu trigger's gradient (paired with #46123b for depth). The surface stack uses a radial gradient philosophy:
Typography
The type system pairs **Amatic SC** (a playful, hand-drawn serif) for headlines and display text with **Nunito** (a geometric, friendly sans-serif) for body and UI labels. This pairing communicates creative confidence: the expressive headlines (display: 60px, headline-lg: 40px, both at 700 weight) announce personality and draw the eye, while Nunito's clean geometry (body-md: 16px/400, label-md: 14px/600) ensures functional clarity in menus, buttons, and input fields. Letter-spacing is conservative (0em to -0.04em) to maintain tightness and energy. All text on the dark background uses white or light colors; when text appears over busy 3D scenes, apply text-shadow: 0 2px 4px rgba(0, 0, 0, 0.4) to maintain legibility. Buttons use label-md (14px, 600 weight) for consistent visual weight, while
Layout
The layout is a fixed, full-viewport experience (html, body, .game all set to position: fixed, width: 100%, height: 100%) anchored by a Three.js canvas that fills the screen. Modal and menu overlays use flexbox centering (display: flex, align-items: center, justify-content: center) to float content over the 3D scene. Container max-width is 1100px for desktop, with responsive breakpoints at 520px (tablet) and 440px (mobile). The menu container uses min(1000px, calc(100% - 120px)) to maintain breathing room on all viewports. Spacing follows a semantic scale: **gutter (24px)** separates major sections, **md (24px)** is the standard padding inside cards and modals, **sm (12px)** is used for compact input groups and button padding, and **lg (40px)** creates breathing room between hero sections.
Elevation & Depth
Depth is conveyed through layered gradients and subtle shadows rather than dramatic drop-shadows. **Level 1 (Base Canvas):** The background is a radial-gradient(farthest-side at 0 0, #251f2b, #1d1721), creating a subtle vignette that pulls focus toward the center. **Level 2 (Modal/Menu Cards):** Modals and menu containers use the same radial-gradient background with a 1px solid border at rgba(255, 255, 255, 0.35) to create a frosted-glass frame. Box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15) adds a soft separation from the background. **Level 3 (Elevated Overlays):** The modals.is-visible state use
Shapes
The shape philosophy is **Geometric Precision with Soft Edges**—a balance between technical sharpness and approachable warmth. **Buttons and inputs** use border-radius: 8px (rounded.md) as the default, creating a subtle roundness that feels modern without being overly soft. **Larger containers and modals** use border-radius: 15px (rounded.lg) to add visual softness and breathing room. **Small utility elements** (tooltips, badges, small buttons) use border-radius: 4px (rounded.sm) or 6px (rounded.DEFAULT) to maintain visual hierarchy—smaller radius for smaller elements. **Full-width input group
Components
Action Elements **Button Primary** (class .button, no modifier) is the default interactive element: backgroundColor transparent, textColor #ffffff (on-surface), border 1px solid rgba(255, 255, 255, 0.8), height 58px, padding 0 16px, border-radius 8px. On hover (html:not(.is-mode-touch) .button:not(.is-disabled):hover), the border becomes solid white and text shifts to pure white for emphasis. **Button Success** (class .button.is-success) uses textColor #d5ff95 (secondary) to signal positive outcomes (e.g., "Join server" CTA). **Button Danger** (class .button.is-danger) uses textColor #ff6a7c (error) for destructive or warning actions. **Button Small** (class .button.is-small) reduces height to 40px and uses label-sm typography (12px, 500 weight) for compact UI. All buttons use cursor:
Edit, then copy or download.
More analyses
All 1661 →Made by Sokosumi: AI coworkers for marketing
This tool is free. Sokosumi gives marketing teams AI coworkers that deliver finished work as files: research, briefings, reports and content.
*No Credit Card required