/* global React, Link, ProductCard, CapChip, LogoSquare */ const { useState: useStateP, useMemo: useMemoP, useEffect: useEffectP } = React; // ---------- Home ---------- function HomePage({ products, copy }) { const heroProduct = products.find(p => p.handle === 'stone-embellished-abaya-purple'); const teasers = [ products.find(p => p.handle === 'sheer-abaya-organza-white'), products.find(p => p.handle === 'jalabiya-silk-satin-pink'), products.find(p => p.handle === 'cloud-shadow-abaya-beige'), products.find(p => p.handle === 'cloud-bisht-abaya-lace-pink'), ].filter(Boolean); return (
{/* Hero */}
May 2026 · Drop 09

{copy.hero.h1_a}
{copy.hero.h1_b}
{copy.hero.h1_c}

{copy.hero.sub}

View the Collection Private Appointment
EST. 2017 DUBAI DESIGN DISTRICT UAE
{heroProduct.runSize} · {heroProduct.name}
09
Current Drop
{/* Concept strip */}
{copy.conceptStrip.map((c, i) => (
{c.big}
{c.lab}
))}
{/* Current Drop */}
Drop 09 · May 2026

Current pieces, capped.

Each piece is cut in a tiny run and never reproduced once sold out. Available, waitlist, or capped — the chip on each piece tells you which.
{teasers.map(p => )}
+09
All 13 styles
View the full collection
Abayas · Jalabiyas · Dresses
{/* Concept band */}
The capping mechanic

One, three, or six.
Then it’s closed.

The number sets the room. After the last piece walks out, the pattern is retired and the silhouette never returns.
{copy.ladder.map((l, i) => (
{l.ratio}
{l.lab}
{l.desc}
))}
Read the concept →
{/* Ounass band */}
Currently stocked

At Ounass, AED 2,940 — 4,725.

The current drop is live on Ounass while the d3 atelier prepares the next release. Pieces ship from Ounass directly; the atelier holds appointments by request.

e.preventDefault()}>Shop on Ounass → Outbound URLs pending client confirmation
{[ { src: 'media/sheer-abaya-organza-white-styled.webp', label: 'Sheer Abaya · White · AED 4,725' }, { src: 'media/cloud-crinkle-abaya-organza-grey-front.webp', label: 'Cloud Crinkle · Pistachio · AED 4,725' }, { src: 'media/jalabiya-silk-satin-purple-front.webp', label: 'Jalabiya · Aubergine · AED 4,500' }, { src: 'media/lace-overlay-abaya-crepe-black-front.webp', label: 'Lace Overlay · Black · AED 3,885' }, ].map((it, i) => (
{it.label}
))}
{/* Appointment band */}

The room is small.
The appointment is private.

A capped piece is hard to fit through a screen. We hold private hours at the d3 atelier — try the current drop, hold the fabric, place a waitlist.

Request a private appointment
); } // ---------- Concept ---------- function ConceptPage({ copy }) { return (
The capping mechanic

We make it.
We release it.
Then we cap it.

Every month, The Cap Project releases a tiny number of garments. A piece is cut one-of-one, three-of-three, or six-of-six. After the last one walks out of the atelier, the pattern is retired and the silhouette is never reproduced. Once it’s gone, it’s gone.

{copy.ladder.map((l, i) => (
Run
{l.ratio.split('×')[0]}×{l.ratio.split('×')[1]}
{l.lab}
{l.desc}
))}
How a drop works

Monthly. One concept. A handful of pieces.

{[ { n: '01', t: 'Concept', d: 'A single idea opens the month — a fabric, a silhouette, a colour.' }, { n: '02', t: 'Cut', d: 'Pieces are cut in the d3 atelier, in the count we set in advance.' }, { n: '03', t: 'Release', d: 'The drop goes to Ounass and to the atelier’s private appointment list.' }, { n: '04', t: 'Cap', d: 'When the last piece is gone, the pattern is closed. No restock, no second cut.' }, ].map(s => (
{s.n}
{s.t}
{s.d}
))}
Live run counts & drop cadence — confirm with the brand before publish
); } // ---------- Collection ---------- function CollectionPage({ products }) { const [filter, setFilter] = useStateP('all'); const [stateFilter, setStateFilter] = useStateP('all'); const filtered = useMemoP(() => { return products.filter(p => (filter === 'all' || p.category === filter) && (stateFilter === 'all' || p.state === stateFilter) ); }, [filter, stateFilter, products]); const filters = [ { id: 'all', label: 'All' }, { id: 'abaya', label: 'Abayas' }, { id: 'jalabiya', label: 'Jalabiyas' }, { id: 'dress', label: 'Dresses' }, ]; const states = [ { id: 'all', label: 'Any state' }, { id: 'available', label: 'Available' }, { id: 'waitlist', label: 'Waitlist' }, { id: 'capped', label: 'Capped' }, ]; return (
Drop 09 · May 2026

The Collection

13 pieces in the current drop, priced AED 2,940 — 4,725 and currently stocked at Ounass. Each piece carries its cap-state: available, on the waitlist, or capped and closed.
{filters.map(f => ( ))} {states.map(s => ( ))} {filtered.length} {filtered.length === 1 ? 'piece' : 'pieces'}
{filtered.map(p => )}
{filtered.length === 0 && (
No pieces in this filter. Try another category or state.
)}
); } // ---------- PDP ---------- function ProductPage({ product }) { const [waitlisted, setWaitlisted] = useStateP(false); if (!product) { return

Piece not found.

; } const stateLabel = product.state === 'capped' ? 'Capped — closed run' : product.state === 'waitlist' ? 'Waitlist only' : 'Available'; return (
{product.images.map((src, i) => (
{product.name
))}
← Back to collection {product.category} · {product.drop}

{product.name}

{stateLabel}
Price AED {product.price.toLocaleString()}
Colour {product.colour}
Fabric {product.fabric}
Run {product.runSize}

{product.editorial}

{product.state === 'available' && ( e.preventDefault()}>Shop on Ounass → )} {product.state === 'waitlist' && ( <> {!waitlisted ? ( ) : (

You’re on the list.

We’ll write when a slot opens or when the next drop covers this silhouette.

)} e.preventDefault()}>Check Ounass stock → )} {product.state === 'capped' && ( <> {!waitlisted ? ( ) : (

Noted.

This silhouette is closed. We’ll write when a related shape walks back in.

)} )} Try at the d3 atelier
Drop{product.drop}
Run size{product.runSize}
OriginDubai, UAE
ChannelOunass · d3 atelier
Run sizes, drop dates & Ounass URL — prototype state, pending brand confirmation
); } // ---------- The Project ---------- function ProjectPage({ products }) { const moodImages = [ 'media/lace-overlay-abaya-crepe-black-detail.webp', 'media/stone-embellished-abaya-purple-detail.webp', 'media/cloud-crinkle-abaya-organza-grey-detail.webp', 'media/jalabiya-silk-satin-pink-detail.webp', ]; return (
The Project

An Emirati design experiment in scarcity.

Founded in Dubai in 2017 by an anonymous Emirati design duo from art backgrounds. The Cap Project reimagines the abaya through deconstructed tailoring, oversized silhouettes, vibrant colour, and luxe fabrics — anything but the traditional black abaya.
Cloud Bisht Abaya in Lace, Blush — Drop 09

We don’t make collections.
We make capped pieces, in tiny rooms, that leave.

The Cap Project is a limited-release modest-fashion label built on a single rule: make a few, release a few, then close the pattern. Each design is cut one-of-one, three-of-three, or six-of-six, and is never reproduced once sold out.

Founded in 2017 by an Emirati design duo with art-school backgrounds, the label treats each garment as a design object — closer to a small edition print than a wholesale SKU. Pieces are conceived in the d3 atelier, finished by hand, and released as monthly exclusives.

The label keeps its founders anonymous. The work is the signature: deconstructed tailoring on the abaya silhouette, oversized cuts, lace and crinkle organza, hand-corded embroidery, and the small orange square at the cuff.

How a drop works →
Timeline

Nine years.
Many drops.

{[ { y: '2017', what: 'Founded in Dubai. The first capped pieces leave the atelier.' }, { y: '2019', what: 'Concept formalised: monthly drops, one-of-one / three-of-three / six-of-six.' }, { y: '2021', what: 'd3 atelier opens at Building 4, Dubai Design District. Private appointments begin.' }, { y: '2024', what: 'Ounass partnership launches; the line becomes available outside the atelier.' }, { y: '2026', what: 'Drop 09. 13 styles live. Relaunch of the brand site.' }, ].map((t, i) => (
{t.y}
{t.what}
))}
Atelier details

Closer in.

The small things you notice on a piece — the lace, the hand-corded loops, the orange enamel square.
{moodImages.map((src, i) => (
))}
); } Object.assign(window, { HomePage, ConceptPage, CollectionPage, ProductPage, ProjectPage });