Interior design Β· Featured
Demeure
Demeure is a premium interior design website template built with Next.js, TypeScript, Tailwind and All-intra video scrub + GSAP. Scroll composes an empty shell into a fully furnished home. The Claude Code prompt that builds it is free; the exact tested source code is $79 with a commercial license.
Specifications
- Framework
- Next.js Β· TypeScript Β· Tailwind
- Motion
- All-intra video scrub + GSAP
- Category
- Interiors
- Use case
- Interior design
- Responsive
- Desktop β mobile
- License
- Commercial Β· one end product
- Delivery
- Instant ZIP download
What the paid download adds
- The exact deployed code β tested, not AI-guessed
- Config-driven copy, palette & assets
- Compressed media included
- Deploy README β Vercel or your own VPS
- Commercial license β one end product
- Free updates to this template
The free Claude Code prompt
Run this with Claude Code to build your own Demeure variant β free. Want the exact, tested code shown in the demo? Thatβs the $79 download.
# DEMEURE β Free Claude Code Prompt
*From SmartDuke Studio (studio.smartduke.com). The real prompt behind
our interior-architecture template. The exact tested build β encoded
film, all the section choreography, every fix β is the paid download:
https://studio.smartduke.com*
## Before you start
1. **Generate or shoot one walkthrough film** (~8β10s, 1080p+): one
continuous camera position where an **empty room fills itself** β
bare shell β light β surfaces (wood, marble, curtains) β furniture β
a warm, lit evening. The transformation IS the scroll story.
2. **Re-encode it all-intra** so scrubbing lands on any frame:
`ffmpeg -i room.mp4 -an -c:v libx264 -preset slow -crf 23 -g 1 -pix_fmt yuv420p -movflags +faststart public/room.mp4`
3. **Pull the poster + portfolio stills from that same film** (or use
your own project photos): `ffmpeg -ss 0.15 -i room.mp4 -frames:v 1 -q:v 3 public/img/poster.jpg`, and a few furnished frames for the work grid.
4. Node.js β₯ 20.9.
## The prompt
> Build a warm, editorial website for an **interior-architecture studio**
> where **scrolling composes the room** β a single-take film scrubs
> frame-by-frame from an empty shell to a fully furnished home. Awwwards
> standard, restrained, monograph-like. Warm plaster paper (#F1ECE3),
> warm-charcoal ink (#1A1611), a dark espresso surround (#14110D) for the
> film moments, ONE terracotta-clay accent (#B06A3F). Display font
> **Fraunces** (soft modern serif), body **Inter**, via next/font.
>
> **Stack:** Next.js App Router + TypeScript + Tailwind v4 + **GSAP**
> (ScrollTrigger for all scroll animation + **SplitText** for line/char
> reveals) + **Lenis** (smooth scroll). No 3D β the "composition" is the
> all-intra `<video>` scrub. Put the brand, all copy, the HERO `beats` /
> `stages` arrays, the WORK/MATERIALS/STATS arrays and every image path
> in `src/config.ts` so it re-skins from one file; empty image paths must
> render labelled placeholders (a tonal swatch for materials).
>
> **0 Β· Preloader** β an espresso curtain: the studio wordmark + the
> discipline line fade in, a clay hairline draws itself (scaleX 0β1),
> then the whole curtain lifts (yPercent -100). Lock scroll + Lenis while
> it's up.
>
> **1 Β· Hero β the composition scrub (β440vh pinned).** A full-bleed
> `<video>` (all-intra `room.mp4`) whose `currentTime` is driven by
> scroll: ScrollTrigger onUpdate sets a target time from progress, a
> gsap.ticker lerps `video.currentTime` toward it (factor 0.14). GATE the
> ticker with `if (!duration || video.readyState < 2) return;`. The film
> does **NOT** auto-play β it rests on its first frame (the empty shell)
> and only seeks on scroll. Over it:
> - Opening headline, char-reveal with blur (SplitText chars, from
> opacity0/yPercent60/blur(10px)), an accented italic word ("An empty
> room is only a *promise.*"), a masthead eyebrow with hairline rules,
> and a clay underline that draws under it (scaleX).
> - A **HUD on the right** that steps a stage label across four movements
> as you scroll β **STRUCTURE β SURFACES β FURNITURE β LIFE**
> (floor(progress*4)), each swap a small fade-up, plus a thin progress
> hairline (scaleY).
> - **Serif beats that mask through** at fixed progress windows (a scrub
> timeline: each beat's lines animate yPercent 120β0 then β-120 across
> its window), synced to the room filling β "First, the light β and the
> proportion to hold it." β "Then the bones: oak, stone, the grain of
> shadow." β "At last, the life β the sofa, the books, the evening."
> - A final `reveal` at ~86% progress: a large "A home, composed." line
> mask-reveals at the BOTTOM over the finished frame, with a subtitle.
> - Legibility over the BRIGHT empty first frame: soft top+bottom edge
> fades + a localized **radial ink-pool** behind the headline + text
> shadows β NOT a heavy full-frame wash (it kills the room).
>
> **2 Β· Manifesto β scroll-fill.** A big serif paragraph, each word
> wrapped by SplitText; scrub their `color` from stone-grey to ink
> word-by-word (gsap stagger + ScrollTrigger scrub over the section).
>
> **3 Β· Approach β sticky title + four movements.** Two columns: a
> `position: sticky` title on the left ("We compose in four movements."),
> and on the right four numbered acts (Listen / Draw / Material / Light)
> that fade-up as they enter, each with a hairline rule that draws
> (scaleX) on entry.
>
> **4 Β· Work β animated gallery.** A lead project (16:9) + a 3-up grid
> (4:5). For EACH image: (a) a **curtain-wipe reveal** β a clay panel
> covers the frame then slides up off it (yPercent 0β-101) while the
> frame clip-paths open (`inset(0 0 100% 0)`β`inset(0 0 0% 0)`) and the
> image settles from scale 1.28β1.12; (b) **constant in-frame parallax**
> β the image is over-tall inside an `overflow-hidden` frame and drifts
> vertically (yPercent -14β14) on a scrub tied to the card's viewport
> travel, so it never sits still; (c) hover β image zooms + a soft tint +
> an accent β slides in by the name. Captions rise as each card lands.
>
> **5 Β· Materials β pinned horizontal palette.** Vertical scroll
> translates a horizontal track (gsap x to -(scrollWidth - innerWidth),
> pinned via ScrollTrigger). An intro panel + six surface cards (European
> Oak, Calacatta, Travertine, Brushed Brass, Belgian Linen, Smoked
> Glass) β each a big image (or a tonal swatch keyed to a `tone` color if
> no photo) + name + provenance + index. On espresso.
>
> **6 Β· Stats β count-up.** A 4-cell grid (residences, years, mΒ²
> composed, awards) where each number animates from 0 when it scrolls
> into view (gsap tween + ScrollTrigger once), with a clay suffix.
>
> **7 Β· Close β parallax invitation.** The finished-room still sits
> full-bleed and **parallaxes** (yPercent -12β12 + scale 1.18β1.06 on a
> scrub) under an espresso gradient; over it a masked line-reveal ("Let's
> compose yours."), a line of copy, and a bordered CTA that inverts to
> clay on hover. Footer with wordmark + studio details.
>
> Global: a fixed nav using `mix-blend-difference` so it reads on both
> the dark film and the plaster sections; `history.scrollRestoration =
> "manual"` in the Lenis provider; respect prefers-reduced-motion (skip
> parallax + the pin).
## Gotchas (we hit all of these)
- The `readyState < 2` gate on the scrub ticker is mandatory.
- `-g 1` (every frame a keyframe) is what makes `currentTime` land
anywhere β without it the scrub snaps and judders.
- The empty first frame is the BRIGHTEST state and it's now permanent
(no idle play), so light type needs a localized radial pool + edge
fades + text-shadow β a full-frame dark wash dulls the whole room.
- Work images must be over-tall inside the `overflow-hidden` frame or the
in-frame parallax exposes a hard edge.
- The pinned Materials track needs `invalidateOnRefresh: true` so its
width recomputes on resize.
- `mix-blend-difference` on the nav is what keeps it legible across the
darkβlight section changes without JS.
---
*Paid version: the film + all stills + every section's exact
choreography + README + license β studio.smartduke.com*
Demeure β questions
What is the Demeure template built with?
Demeure is a Interior design website built with Next.js, TypeScript, Tailwind CSS, GSAP, Lenis, Scroll-scrubbed video. The motion is driven by All-intra video scrub + GSAP, with Lenis smooth scrolling and GSAP ScrollTrigger for the scroll choreography.
How much does Demeure cost?
The free Claude Code prompt that builds a Demeure variant is $0. The exact, tested source code β the same site shown in the demo β is $79, delivered as an instant ZIP with a commercial license for one end product.
Can I use Demeure for a client project?
Yes. The $79 download includes a commercial license to use Demeure in one end product, including paid client work. Everything is config-driven, so copy, palette and assets re-skin from a single file.
What's the difference between the free prompt and the paid download?
The free prompt gets Claude Code to build you a Demeure variant β genuinely good, but it costs tokens and debugging time and results vary. The paid download is the exact site in the demo: tested, compressed, documented, licensed, with free updates.
Related templates
Ocean Epicure
A scroll-scrubbed chef's film opening into a bright editorial story.
Aurelia
A voyage from above the clouds to a dinner at sea β scroll is the ship.
Vesper
Scroll assembles the watch β component by component to the finished piece.
Part of
Ship Demeure today.
The free prompt gets you a variant. The $79 download is the exact, tested site β deployed in an afternoon.