All projects
3D architecture experience2026

LIWAN

An architecture site where the house is the interface

A self-initiated concept for a Riyadh architecture studio: a villa drawn entirely in code that you walk through as you scroll, then specify finish by finish. Arabic first, and no downloaded models, textures or HDRIs anywhere in it.

LIWAN interface
A self-initiated concept, built at SIMA Studio for a fictional Riyadh architecture studio and residential developer. The studio is invented; the engineering is not. A villa buyer picks finishes months before anything exists, from a sample box and a flat drawing. The premise was to put them inside the house instead — on a phone, in Arabic — and let them see each finish in the room's real light. A house, not a model. The villa is generated from a plan measured in metres. Walls are extruded outlines with their openings cut through, so a window is a real hole with a reveal and a sill, not a texture. Nothing in the scene is downloaded: no GLB, no texture pack, no HDRI. Textures drawn at real scale. Stone, oak, marble and plaster are generated procedurally in Web Workers and sized in metres, so a tile is the size a tile actually is. Keeping the generation off the main thread removed a multi-second freeze on load. A camera that reads as a film. Scrolling runs one continuous timeline: wide on the garden, the threshold, the living room, the kitchen, out to the pool. The configurator. Thirteen surfaces — exterior walls, window frames, entrance door, pool water, terrace paving, floors, walls, sofa, lighting temperature, cabinets, countertop, metal accents — each dissolving into the next on the house itself rather than on a swatch. Its own interface on a phone. Phones get a compact panel that tells the camera how tall it is, so the house stays framed above the controls instead of hiding behind them. Arabic first. The root redirects to /ar; English mirrors it. Copy is written in both languages, with Alexandria for headings, IBM Plex Sans Arabic for reading and Noto Naskh for the editorial line. Performance. The first build ran at about 21 ms per frame. Merging static meshes per material, moving texture generation to workers and trimming the post-processing stack brought it to roughly 5.6 ms, and removed a 4.8-second freeze on first load. Real-time 3D on the web is a budget problem before it is a visual one. Almost every decision here — merged geometry, procedural textures, which post-processing pass survives — was a trade between how the house looks and whether a mid-range phone can hold sixty frames. The version that runs everywhere is worth more than the version that looks best on my machine.
Contact

Get in touch

Open to full-stack and frontend roles, and to freelance work. The quickest way to reach me is email — I reply to everything.