Freelance — sole engineer 2025 · 6 months guju.style

Guju Style

A tattoo studio’s gallery that behaves like a film — with a working course, seminar and shop platform hidden behind it.

React · Next.js GSAP · ScrollTrigger Blender React Lenis Tailwind CSS
Fig. 01Hero sculpture BlenderModelled · lit · rendered Turntable90 frames · 20° arc shown ExportWebP sequence → React
0% Guju hero sculpture, modelled and rendered in Blender

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.

6Months, end to end
12+3D assets authored in Blender
1Engineer
3Revenue surfaces
01

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.

0% Serkan — artist signature render

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
0% Acid Purple Tee
Coming soon
Acid Purple Tee [Apparel]
$45.00
0% Signature Hat
Locked
Signature Hat [Headwear]
$35.00

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.out and a stagger
  • Both garments modelled, lit and rendered by me in Blender

04 — Platform

A gallery on top, a business underneath.

01 Seminars, with a video system behind them

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.

upload → host → play
02 Booking that reaches a human

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.

full brief, one step
03 A shop shaped like a drop

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.

Node.js · headless CMS

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.

05

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
06

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.