A memorable portfolio can still hide the information that matters
Foliofarer presents a career as an explorable 3D world. That makes for a strong first impression, but the product has a more important job: help a visitor understand my work. A recruiter should not need gaming instincts, a powerful GPU, precise pointer control, or a tolerance for motion to reach the evidence.
The first architectural risk was obvious. If WebGL owned the content model, every fallback would become a reduced version of the real site. Accessibility would be a patch, search and testing would depend on scene state, and lower-capability devices would receive less information.
I chose a different constraint: 3D could own the experience, but it could not own access to the content.
Progressive enhancement only works when the enhanced layer is not the sole source of truth.
The Atlas is a complete interface, not a fallback apology
I paired the world with an accessible Atlas that exposes the same professional history through a document-oriented surface. It supports keyboard-friendly navigation and lets visitors move directly through projects and career landmarks without operating the scene.
Both experiences are driven by validated portfolio data. The scene can translate that data into geography and interaction, while the Atlas translates it into headings, links, and readable structure. Neither needs to scrape or reverse-engineer the other.
This separation changed how I evaluated features. A new landmark was not complete when it looked good in Three.js. It was complete when its meaning was represented in the shared data and reachable through both paths.
I compiled the world instead of hand-placing it
Hand-authored coordinates would have made the first scene quick and every later change fragile. Navigation, the minimap, landmarks, progression, and tests all need to agree about the same route. Small visual edits cannot be allowed to create unreachable content or nondeterministic test failures.
Foliofarer uses a deterministic journey compiler and generators to produce route and world data. The compiler adds complexity, but it creates a stable contract: the same input produces a world that navigation and tests can inspect consistently.
That decision turns procedural generation from visual decoration into an engineering tool. Repeatability makes generated environments debuggable. Validation catches broken route assumptions before a visitor discovers them inside the scene.
Maximum fidelity was not the default definition of quality
A single rendering profile assumes every device and visitor values the same thing. Foliofarer instead uses adaptive quality tiers and preference signals, including viewport, connection and device capability, reduced motion, and reduced data.
The goal is not to guess a benchmark score perfectly. It is to avoid making the heaviest experience the price of entry. Capability-aware rendering can reduce scene work while the Atlas preserves the complete information path.
Reduced motion is also a product decision, not a CSS afterthought. When movement is part of navigation and atmosphere, honoring the preference requires the interaction model to remain understandable with that movement reduced.
The architecture made an unusual interface testable
The project maintains compiler, interaction, accessibility, browser, and visual-baseline tests. Each suite protects a different contract: valid generated routes, usable navigation, reachable content, real browser behavior, and intentional presentation.
Visitors can explore the 3D career world, read the same history through the Atlas, track local Passport progress, and use the experience across a broader range of capabilities and preferences.
Foliofarer reinforced a principle I use in senior frontend work: ambitious presentation is safest when content and behavior have deeper, renderer-independent foundations.
