
LUMINA Studio — a dark editorial site for a premium hair salon
A site for a one-to-one private hair salon in Seongsu-dong, Seoul. For a salon, one booking is one sale, so the goal is simple: never hide the price or the duration, and minimise the clicks to a booking.
The problem
This vertical is usually locked into booking platforms, leaving the salon's own site as little more than a list of Instagram links. What only an own site can do is carry the brand's tone fully, and lay out the service system and prices honestly so a first visit carries no uncertainty.
Design approach
Ink black and champagne gold set a dark editorial tone, with an English serif display face played against Korean sans-serif to create an editorial rhythm. Photography is unified through a black-and-white sepia duotone, a gold scrim and a grain overlay.
Art direction when the imagery does not exist
The most practical decision in this project was about images. Freely licensed hair photography is almost entirely snapshot quality, and using it as a premium salon's lookbook would actively damage trust. So the lookbook and stylist cards use generative SVG artwork authored specifically for this project: bundles of hair-strand line art, each with its own colour palette, captioned with signature colour names and serif numerals so the service menu becomes visually distinguishable. At roughly 4KB per file there is no performance cost.
Signature interactions
- Service category tabs — hair, colour, care and styling as keyboard-operable tabs, each item showing duration alongside price.
- Sticky booking-process steps — the four-step booking procedure advances with scroll position.
- Two-row counter-scrolling testimonial marquee — the rows travel in opposite directions, and stop entirely under reduced motion.
- Lookbook lightbox — Esc and arrow keys, with focus restored on close.
- Booking form — desired service, preferred date and time, and contact details, with inline validation (and an explicit note that a demo form sends nothing).
Engineering, performance, accessibility
- Build-free static site — plain HTML, CSS and vanilla JS. With no framework or bundler, the deployed output is the source, so nothing can rot at maintenance time.
- Deployed on Cloudflare Pages — served from the edge, with a
_headersfile applying security headers (X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Permissions-Policy) and a one-year immutable cache for static assets. Unknown paths return a branded 404 page with a real 404 status. - Images — everything converted to WebP, every
imgcarrying explicit width/height so there is no layout shift. The hero loads eagerly, everything else lazily. - Motion — animations touch only transform and opacity so they stay on the compositor, and every auto-playing motion stops under
prefers-reduced-motion. - Accessibility — skip link, semantic landmarks, keyboard-operable tabs, lightbox and mobile navigation, visible focus rings, live regions for form status, and WCAG AA contrast.
- SEO — title, description, canonical, Open Graph, Twitter card and vertical-appropriate JSON-LD structured data.
Result
Live demo: ononc-lumina-salon.pages.dev
This is a fictional-brand demo built by ononc to show production quality. It is not a real business, and the inquiry forms do not send anything. Photography comes from freely licensed Wikimedia Commons images, credited in the site footer.