On this behind-the-scenes, Merouane Bali takes us via the journey of making his portfolio mission—a 3D internet design that blends interactive experiences with person engagement. He shares the challenges he confronted, the inventive choices that formed the mission, and the options he carried out, to craft an attractive and purposeful expertise.
Constructing My Portfolio: A Journey in 3D Design and Improvement
Making a portfolio isn’t any small process. It’s your first impression, your digital handshake, and a possibility to inform your story and create an expertise. Once I got down to rebuild mine, I wished it to face out, not simply visually but in addition in the way it engages guests.

This mission has been an thrilling mixture of creativity and problem-solving, combining 3D design and interactive components to create one thing I’m genuinely pleased with. Whereas it’s farm from being good, it’s fairly rewarding, as each step of the method has been an opportunity to be taught and push my limits as a developer.
On this article, I’ll stroll you thru the overall course of, share what went proper (and what didn’t), and provide you with a peek behind the scenes.
The Desktop Expertise: The place 3D Meets Interplay
Once I began brainstorming the desktop model, I had one aim: to make the expertise memorable. I didn’t need guests to scroll via to seek out what they’re searching for. As an alternative, I wished them to really feel like they had been getting into one thing distinctive, a bit world that mirrored my character.
The end result? An interactive 3D scene designed in Blender and constructed with Three.js. Guests can discover the surroundings, click on on components, and transition from one part to a different as they please. However making a “wow” issue wasn’t sufficient. I spent plenty of time eager about usability, ensuring the interactions felt pure and that the 3D surroundings didn’t get in the best way of the content material. Particularly for people who find themselves not so tech savvy.
Was it difficult? Oh, completely. However watching it come to life made the lengthy hours and numerous revisions value it.

Adapting for Cellular: Preserving It Enjoyable, Preserving It Easy
If desktop was all about immersion, cell was about steadiness. Let’s face it: 3D experiences might be tough on smaller screens, particularly while you consider efficiency, unstable cell networks, and the restricted display real-estate. So, I took a step again and centered on creating one thing lighter however nonetheless participating.
The cell model options an interactive header with a 3D mannequin that guests can play with, however the remainder of the location makes use of a extra conventional format, powered by some fascinating React parts, serving to me craft a design that felt tailor-made to cell with out compromising on efficiency or readability.

Connecting WebGL and the Structure for Seamless Interplay
One of many extra intriguing challenges of this mission was guaranteeing that the WebGL scene and the web site format might work collectively as one cohesive unit. Not like normal internet components, a WebGL scene doesn’t natively work together with HTML. This separation required an progressive resolution to synchronize the 3D surroundings with person interactions on the web page.
To resolve this, I relied on React’s Context API to create a communication bridge between the WebGL scene and the remainder of the web site. I constructed a customized context supplier and shopper, enabling real-time information trade and interplay between the 2 layers. This strategy allowed customers to regulate points of the 3D scene straight from the web site format, such altering the render high quality, toggling sound results, or interacting with some components.
import React, { createContext, useContext, useState } from 'react';
// Create Context
const SharedStateContext = createContext();
export const SharedStateProvider = ({ youngsters }) => {
const [isInScene, setIsInScene] = useState(true); // Instance: observe if person is within the scene
const leaveScene = () => setIsInScene(false); // Instance: exit WebGL scene
return (
<SharedStateContext.Supplier worth={{ isInScene, leaveScene }}>
{youngsters}
</SharedStateContext.Supplier>
);
};
// Customized Hook
export const useSharedState = () => useContext(SharedStateContext);
// App Element
export const App = () => (
<SharedStateProvider>
<WebGLScene />
<WebsiteLayout />
</SharedStateProvider>
);
// Instance WebGL Element
const WebGLScene = () => {
const { isInScene } = useSharedState();
return isInScene ? <canvas id="webgl-canvas"></canvas> : null;
};
// Instance Web site Structure
const WebsiteLayout = () => {
const { isInScene, leaveScene } = useSharedState();
return (
<div>
{isInScene ? (
<button onClick={leaveScene}>Exit Scene</button>
) : (
<p>You are actually out of the WebGL scene!</p>
)}
</div>
);
};
The Challenges (and Some Wins)
Like every mission, this one got here with its fair proportion of hiccups:
- Optimizing for Efficiency: Getting the 3D fashions to load rapidly and run easily was an uphill battle. I needed to experiment with textures, scale back file sizes, compression, and ensure the animations didn’t hog too many sources.
- Translating Concepts into Code: The leap from designing in Blender to implementing in Three.js wasn’t as clean as I’d hoped. Issues didn’t look precisely or carry out the identical at first, so I did plenty of debugging, tweaking settings, and making compromises to get issues good. However these challenges had been additionally alternatives to develop. Every roadblock pushed me to be taught one thing new or discover a higher resolution, and that’s what made the method rewarding.
- UI/UX Stability: Discovering the correct steadiness between inventive design and purposeful usability was a key problem. The 3D expertise needed to be immersive but in addition serve its goal as a portfolio. so I needed to refine the interface by simplifying animations and including refined cues to information navigation with out overwhelming customers or distracting from the core content material.

Wrapping It Up
This portfolio isn’t good, and it’s not purported to be. It’s a mirrored image of the place I’m proper now—what I’ve realized, what I’m nonetheless determining, and the place I wish to go.
Constructing it jogged my memory that design and growth are as a lot about problem-solving as they’re about creativity. And truthfully? I had plenty of enjoyable bringing all of it collectively.
Should you’re curious concerning the code, wish to see extra behind-the-scenes particulars, or simply have suggestions, I’d love to listen to from you. This mission isn’t nearly showcasing my work—it’s additionally about connecting with others who share the identical ardour for creating.



