Guju Style
A tattoo studio’s gallery that behaves like a film — with a working course, seminar and shop platform hidden behind it.
Built in React. Every three-dimensional thing on the site — the nine artist busts, the hero sculpture, the shirt and the cap — I modelled, lit and rendered myself in Blender, then exported as frame sequences the front end plays back. Alongside that, the backend work behind the shop.
The brief, and what it did not need
Guju Style is a tattoo studio and gallery in Galata, Istanbul. The brief was a portfolio that looks like the work — dark, cinematic, unhurried — with artists, a collection, masterclasses and a drops shop hanging off it.
Two jobs in one, and the unusual half is that the 3D is mine as well as the code. Every rendered element on the site was modelled, lit and rendered by me in Blender — nine artist busts, the hero sculpture, and the apparel — then exported as image sequences and driven from React.
The two halves pull against each other. Heavy motion is what usually makes a commerce site slow, and a CMS-driven catalogue is what usually makes a cinematic site generic. Most of the work was refusing to trade one for the other — sequences preloaded so the gallery never stutters, and a platform underneath that the studio can run without me.
Serkan — one of nine artist renders, running here from the site’s own frames.
Every frame is preloaded before the loop starts; the image swaps src on a
requestAnimationFrame tick.
02 — Artists
Nine artists, modelled and rendered.
Each artist has a signature bust — sculpted, lit and rendered by me in Blender, one turntable per artist, exported as a frame sequence. Serkan is the one running here, playing from the site’s own frames.
On the front end each sequence is played rather than streamed: frames are preloaded as images, then a requestAnimationFrame loop advances the source on a fixed interval. That keeps control — the loop pauses off-screen, the first frame paints immediately, and nothing depends on how a phone buffers video.
- Nine turntables modelled and rendered in Blender
- A blurred glow fades in behind only once the sequence is ready
- Loop paused when the element scrolls out of view
- Artist assets loaded per artist, not all nine at once
The shop as it ships: a 40 px grid at 3% opacity, the garment turning behind its release badge, the product line pinned to the bottom rule. Hover scales the render to 110% and lifts the panel.
03 — Shop
The shop, built for the drop.
I built the storefront around how a studio actually releases: in drops. Each product is a full-height column with the garment turning inside it — both pieces modelled and rendered by me in Blender — and its release state stamped across the middle. GSAP lifts the columns in on load with a stagger; hovering scales the render and brings the panel forward.
A drop carries its own render sequence, price, category and release window, so adding the next one is data rather than a rebuild — and the front end stays fast because a product page is images and a state, not a framework of its own.
- Drop-based storefront — release window, price, category, state
- Each product turns in 3D, reusing the artist sequence player
- Columns animate in with
expo.outand a stagger - Both garments modelled, lit and rendered by me in Blender
04 — Platform
A gallery on top, a business underneath.
Masterclass content needed somewhere to live, so I built the video side end to end — upload, hosting and playback — rather than pointing the studio at a third-party player and calling it done.
Artist, style, placement, size, brief and contact arrive as one complete message. A tattoo studio books by conversation; the job was to make the first message good enough that the conversation starts on the second reply.
Release window, price, category and state per product, each with its own render sequence — so the next drop is data, not a rebuild, and the storefront stays as fast as the gallery in front of it.
Three revenue surfaces on a Node.js backend, with content on a headless CMS so the studio publishes without waiting on a developer — the half of the project nobody sees, and the half that decides whether the beautiful one survives its first month.
Stack
Frontend
- Next.js
- React
- Tailwind CSS
- Responsive layout
Motion
- GSAP
- Lenis smooth scroll
- ScrollTrigger
- Scroll-scrubbed timelines
- Canvas frame sequences
3D — authored by me
- Blender
- Modelling, lighting, rendering
- Turntable exports as WebP sequences
Platform
- Next.js API route
- Resend (reservation email)
- Static assets, no CMS
- Vercel
Outcome
Delivered as the only person on it — the React build, every 3D asset from modelling through render, the sequence playback pipeline, the reservation flow the studio receives bookings through, and the backend behind the shop.
It should feel like the work — and still load.