A maison storefront from campaign image to order number
Twenty-two routes, one voice: catalogue, product page, four-step checkout, wishlist and customer account in a single hand.
- Branding
- Web design
- UX design
- Design system
- E-commerce
- Frontend development
- Accessibility
- Role
- Concept, design & development: DeNitro
- Scope
- 22 routes, 4-step checkout
- Stack
- React 19, Vite, React Router
MAISON ÉLAN is our answer to a problem every fashion house knows: the brand is uncompromising on the campaign image — and from the category page onwards the shop system takes over. Filters, bag and checkout then look like they do everywhere else.
So we built the whole flow ourselves: from the campaign through catalogue and product page to the order confirmation, with no shop template behind it. That is the only way to find out whether a luxury voice holds up where the forms, the error messages and the loading states are.
Typography is the brand: a classical Renaissance serif for every heading, a narrow grotesque at a 14-pixel base size for the text. Every large headline follows the same rule — first line in caps, second line in italic serif ("THE ART / of restraint"). The pattern repeats in the hero, the section titles, the 404 and the order confirmation.
Colour stays almost entirely ivory and ink. A single bordeaux takes on hover surfaces, focus rings and text selection — and reappears as a product colour, so the collection and the interface share one palette.
Motion needs no animation library: scroll reveals run on a bespoke IntersectionObserver, everything else on CSS transitions along one shared easing curve. That keeps the page light and the movement identical everywhere.

The catalogue filters across seven groups — category, size, colour, material, collection, availability and price — with a result count per facet, multiple selection, a counter on the filter button and real price-band logic. Plus sorting, a toggle between a three- and four-column grid, and a load-more that shows its progress and leaves skeleton cards standing while it works.
The product page builds six views out of two product images, held in a full-screen viewer with a counter and paging. Colour swatches and sizes are marked up as real selection groups; without a size the add-to-bag action is blocked and explains itself inline. Alongside it a size chart as a drawer, five expandable sections including traceability, and a fixed bag bar on mobile.
The checkout runs through contact, delivery, packaging and payment. Each step validates its own fields, the card number formats itself into groups of four as you type, every field carries the right autofill hints, express delivery shows up in the total immediately, the gift message counts its characters — and you can only jump back to steps already completed, never forward. At the end there is an order number to a fixed scheme and a confirmation page of its own.
The customer account, wishlist and order history complete the flow: sign-in, registration and password reset share one component with three modes, orders show a four-stage status timeline, and an appointment can be booked either in the boutique or by video.

What was built
Everything that is in MAISON ÉLAN — conceived, designed and built by DeNitro.
- Brand picture: type pairing, palette, grid logic, image strategy
- 22 routes including catalogue, product and account areas
- Component library of around 20 reusable parts
- Header with mega menu, full-screen search and mini bag
- Catalogue with seven filter groups, sorting and load-more logic
- Product page with gallery, full-screen viewer and size chart
- Four-step checkout with field validation and six payment methods
- Wishlist with size selection and share function
- Customer account: orders, status timeline, addresses, appointments
- Bespoke image set — 17 shots, no stock sources
- Automated QA run across desktop and mobile
What that changes
Four points where the work is readable in the interface itself. Figures on revenue or reach are deliberately absent — this is our own production, not a client campaign.
The brand holds all the way to checkout
Forms, error messages and loading states follow the campaign's typographic rule too — there is no point at which a shop template shows through.
Abandonment is caught early
Without a size the add-to-bag action is blocked and explains itself inline; every checkout step validates its own fields instead of rejecting everything at once at the end.
Operable by keyboard
Selection groups for colour and size, dialog roles for overlays, errors linked to their fields, escape to close, and a global reduced-motion state.
Verifiably checked
An automated run drives the whole journey on desktop and phone: 29 checks, no console errors, no horizontal overflow.
The stack behind MAISON ÉLAN — and the decisions that mattered enough to write down.
- React 19 with Vite and React Router as a single-page application; 22 route declarations, one of them a checkout shell of its own without footer and overlays.
- State exclusively through React Context: bag, wishlist, overlays and notices. Bag and wishlist survive in localStorage, the order confirmation lives in the session.
- Styling through a single hand-written stylesheet — no utility framework, no CSS-in-JS layer.
- No animation library: scroll reveals through IntersectionObserver, everything else through CSS transitions on a shared curve.
- Catalogue data sits statically in the code (20 items with colours, materials, collections and sizes); prices run through Intl.NumberFormat.
- A bespoke demo mode drives catalogue, product page and checkout by itself — it aborts permanently on the first real click and is off entirely under reduced motion.
- Checkout and account are interface demonstrations: no payment data is transmitted or stored.
Where is your digital growth leaving money on the table?
In 15 minutes we look at where customers find you today, where the potential is being lost, and which lever is worth pulling first: website, SEO & GEO, conversion or automation. You leave with a clear next step — even if we are not the ones who take it with you.