032
AI ready Refreshed

Interior Design Template

£29 View live demo or the whole Vault, £79.20

Includes the original v1 design as a separate download.

Five-page interior design website template with a split colour-field cover, a project index where each room is framed in a colour mat on hover, and a full-bleed before/after wipe. Suits interior designers, architects, kitchen makers, renovation firms and home stagers.

ScrollTriggerFlip Lenis advanced
8 more details
before-afterclip-pathflippinscroll-revealstaggerview-transitionsmap

Updated

About this template

A five-page site for a small interiors practice, built on two committed colour fields: a chocolate ground carrying large burnt-orange display type, and a cream ground carrying the rooms. The home page opens as a split cover, the studio name stacked in syllables down the colour half beside one full-height room photograph with the project's name set over it, and the cover moves slowly through three projects.

Read the full template overview

The photographs do the selling, and the visitor handles them. On the projects index each room sits on its own mat colour, and hovering or focusing a tile draws the photo in so it reads as a framed picture on a wall. A room filter and an area filter combine and reflow the grid. Each project page opens with the same colour split, then shows a full-bleed before and after of one room that the visitor drags across, followed by a gutterless mosaic of the materials, each of which opens with a note on why it was chosen.

The worked example is Orme & Pask, a two-person studio re-planning tenement flats in Edinburgh, with a Studio page that lays out the founders, four stages of a job and plain fees, and an Enquire page with a short form and a real street map. Swap the photographs and the copy, and the same pages serve an architect, a kitchen maker, a renovation firm or a home stager.

Interior Design Template - website template preview

What's included

10 items
  • Five pages: Home, Projects, Project, Studio and Enquire, with plain page loads and a short cross-document view transition
  • Split cover: the studio name stacked in a light display face across a chocolate field, beside a full-height room that cycles through three projects with dots and a pause button
  • Colour-mat project tiles: hovering or focusing a room draws the photo in to reveal the project's own mat colour, in CSS so it works without JavaScript
  • Projects filter by room and by area, combined, with an animated reflow, a live count and a plain empty state
  • Full-bleed before/after wipe driven by a native range input: drag anywhere on the photo, use the arrow keys, or read the static half-and-half split with no JavaScript
  • Gutterless materials mosaic on the project page, each tile opening a native dialog with the material's note
  • Studio page with founders, four job stages that pin and move sideways on desktop and swipe on phones, and fees stated plainly
  • Enquire page with a short static form and a MapLibre street map on OpenFreeMap tiles, loaded only as it nears the screen
  • Rooms phone menu: a full-height sheet of the pages as large serif lines with photo thumbnails, mirrored as a footer page list for no-JS visitors
  • Self-hosted fonts, baked WebP photographs with phone-sized rungs, and a token block that reskins the whole site

Perfect for

5 use cases
  • Interior design studios and decorators showing finished rooms
  • Architects and small practices presenting houses and flats as projects
  • Kitchen and bathroom makers, with Projects as installations and Studio as the workshop
  • Renovation and build firms that sell on before and after
  • Home stagers and property stylists

How it works

4 sections

Pages and navigation

Five plain HTML pages share one stylesheet and one script, and each runs its own features on load, so a buyer can delete a page or a section without touching the rest. Desktop has a slim bar with Enquire as the one filled button. Phones get a Rooms button that opens a full-height sheet of the pages; the same list sits in every footer, so the site is fully navigable without JavaScript.

The colour mat

Every project tile carries a mat colour as a custom property. The photo sits on that colour and shrinks slightly on hover or keyboard focus, so the room appears framed. It is plain CSS, so it works with no script and needs no setup beyond choosing a colour per project.

Before and after

Two matched photographs of one room are stacked and the top one is clipped to the slider position. A visually hidden range input owns the value, so keyboards and screen readers drive it directly, and pointer drags anywhere on the photo write to it. Without JavaScript it sits at an even split with both labels visible.

Filter, stages and map

The projects filter combines a room and an area choice and animates the reflow, holding the page height steady while it moves. The Studio stages pin and travel sideways on wide screens with motion allowed, and are a swipeable strip everywhere else. The map library loads only as the Enquire map approaches the screen and leaves an OpenStreetMap link if it cannot.

Plugins ScrollTrigger, Flip
Difficulty Advanced
Smooth scroll Lenis integration
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Lighthouse, as measured

Google Lighthouse on this template's demo (5 pages, lowest score shown), from the latest scan. A measurement of the demo as shipped, not a promise for your page.

Accessibility
100
Best practices
100

No performance score, on purpose. That figure depends on how you deploy: your server's compression and caching, your CDN, the connection and the device doing the test, none of which the code controls. The same page can score very differently on two consecutive runs, so measure it where it will live.

Questions about this template

Which kinds of business does this interior design template suit?

Any business that sells on finished rooms: interior designers and decorators first, then architects presenting houses as projects, kitchen and bathroom makers, renovation firms and home stagers. The colour fields, the mat-framed project index and the before and after work the same once you replace the Edinburgh flats with your own photographs and rename the filters.

How do I add a project or change its mat colour?

Copy one list item in the projects grid, point its image at your photograph and edit the street, area, room type and year. Its data-room and data-area values feed the filter buttons. The mat is one inline custom property on the item; pick one of the four mat tokens or add your own colour to the token block.

Is the before and after a real client photograph?

No. The after is a stock photograph and the before is an illustrative concept generated from it, registered so the windows and sills line up exactly. Replace both with your own matched pair, taken from the same spot with the same lens, and the wipe will register them the same way.

Does the enquiry form send anything?

Not yet. It is an unwired static front end that collects a name, email, postcode, rooms, budget band, start date and a message, validates them and shows a thank-you note. Point the form's action at Formspree, Netlify Forms or your CRM's endpoint and remove the one line that stops the submission.

Can I move the map pin to my own studio?

Yes. The pin is one longitude and latitude pair near the top of the map code, and the address text sits in the Enquire page markup. The map uses OpenFreeMap tiles, which need no account or key, and keeps the OpenStreetMap attribution the licence asks for.

Can I change the chocolate and orange to my own colours?

Yes. The ground, the display orange, the rose for small labels and the four mat colours are tokens at the top of the stylesheet, with the measured contrast for each pairing noted beside them. Keep the orange for large type only, or check the new pair, since small text needs more contrast than display lettering.

Paid template

Purchase to unlock the code.

Buying Interior Design Template opens the HTML, CSS and JavaScript source, the full documentation, an AI setup prompt for your editor, and every update we ship to it. Standard license: unlimited personal and commercial projects. Every paid product is tested for desktop and mobile layouts, reduced-motion handling, animation cleanup and keyboard controls wherever there is something to operate.

£29 Standard license, unlimited projects

Browse free effects

Or the whole library: the Vault, £79.20, one payment.

Documentation

Quick Start

  1. Unzip the folder and open index.html in a browser, or upload the whole folder to any static host.
  2. There is no build step. Every page links assets/style.css and assets/script.js, and loads GSAP and Lenis from a CDN.
  3. Serve it over http (not file://) if you want the map to load in local testing.

Using It With Your Own Design

Start with the token block at the top of assets/style.css: the chocolate ground, the cream page, the display orange, the rose for small labels on the colour field, and four mat colours. Every other colour on the site is one of those at another opacity. Then replace the photographs (see Images below), the studio name in the cover and nav, and the copy. The display face is Italiana and the body face is Hanken Grotesk, both self-hosted in assets/fonts/; swap the two @font-face rules and --font-display / --font-body to change them.

To make it an architect's site, rename Projects to Work and the room filter to building types. For a kitchen maker, the room filter becomes kitchen styles and Studio becomes Workshop. For a renovation firm, lean on the before and after: it works on any matched pair of photographs.

Pages and Configuration

Page What is on it
index.html Split cover with three cycling projects, three selected projects, a before and after teaser, a studio line with the founders, an enquiry prompt
projects.html Title, room and area filters, nine mat-framed project tiles, an empty state
project.html Colour split opener with facts, full-bleed before and after, the brief, the materials mosaic, credits, next project
studio.html Introduction with the founders' portraits, the founders, four job stages, fees, a client line
enquire.html What happens next, the enquiry form, the studio address and map

Every feature looks for its own markup and does nothing if it is missing, so any section can be deleted.

Cover ([data-cover], home)

Each [data-cover-frame] is one project: a photograph and a linked name. Add or remove frames and their matching [data-cover-dot] buttons. The first frame is the page's main image and is preloaded in the <head>; change that preload if you change it. The cycle waits six seconds per project, pauses while the pointer or focus is on the photograph, and stops with the Pause button. The stacked name is four <span> lines in .cover-word, each with its own indent; for a longer studio name, break it into as many short lines as fit and adjust the padding-left values.

Project tiles and the colour mat

Each tile is an <li class="tile"> with data-room, data-area and an inline --mat colour. Hover or keyboard focus draws the photo in so the mat shows round it. The effect is CSS only.

Filter ([data-filters], projects)

Buttons carry data-filter-room or data-filter-area; their values must match the tiles' data-room and data-area. The two groups combine. When nothing matches, [data-empty] shows with a reset button. Without JavaScript all projects are listed.

Before and after ([data-wipe])

Two images of the same room, .wipe-after underneath and .wipe-before on top, plus a range input. The input's starting value sets the opening split. Both photographs must be the same size and taken from the same position, or the room will jump at the line.

Materials mosaic ([data-mosaic], project)

Each tile is a button whose data-title and data-body fill the dialog. The layout is a named grid (grid-template-areas in .mosaic), with one letter per tile set inline as grid-area; if you add or remove tiles, redraw the area map so it has no holes. There is a separate two-column map for phones.

Stages ([data-stages], studio)

An ordinary swipeable list of four stages. On screens 1024px and wider with motion allowed, the script pins the section and moves the list sideways as you scroll.

Enquiry form ([data-enquiry])

A static front end. It validates the required fields and shows a thank-you message, and sends nothing. Set the form's action to your handler (Formspree, Netlify Forms or a CRM endpoint) and delete the e.preventDefault() line in initEnquiry in assets/script.js.

Map ([data-map], enquire)

The studio pin is STUDIO ([longitude, latitude]) in assets/script.js. The map uses MapLibre GL with OpenFreeMap tiles (no account or key) and loads only when the map nears the screen. If it cannot load, the OpenStreetMap link in the box stays.

Rooms menu (phones)

Below 900px the nav links give way to a Rooms button that opens a full-height sheet of the pages. Edit the list in each page's .rooms-list. The footer carries the same pages for visitors without JavaScript.

Palette

Token Value Use
--choc #4A2E25 Colour field, body text on cream
--cream #F4EBDF Page ground, text on the field
--orange #E87A22 Display type on the field, the primary button. Large type only (4.2:1 on chocolate)
--rose #E9BFA8 Small labels on the field, the wipe handle
--rust #A0461A Links on cream
--mat-* orange, rose, moss, slate Project frame colours, never a ground for text

Accessibility and Fallbacks

  • The wipe is a native range input with a label and a spoken value; the materials open in a native <dialog>; filters are buttons with aria-pressed and a live count.
  • The Rooms sheet is a labelled dialog: focus moves in, Tab stays inside, and Escape, the close button or a tap on its background closes it and returns focus to the button.
  • Reduced motion: no cover cycle, no pinning, no reveals; every element is visible and the stages are a plain strip.
  • No JavaScript or a blocked CDN: every page reads as a complete document, the wipe shows an even split and the footer carries the navigation.
  • Contrast pairs are measured and listed in the stylesheet's first comment.

Dependencies

  • GSAP 3.12+ with ScrollTrigger (this demo was built against 3.15.0), plus Flip on projects.html
  • Lenis 1.1+ for smooth scrolling (optional; built against 1.3.17). Turn it off with ?smooth=off or data-smooth="off" on <html>
  • MapLibre GL 4.7.1 and OpenFreeMap tiles, on enquire.html only, loaded when needed
  • Italiana and Hanken Grotesk, both under the SIL Open Font License (assets/fonts/OFL.txt)

Images and Credits

The photographs are bundled as art-directed WebP derivatives in assets/img/, cropped and graded from the originals below. The originals are from Pexels and used under the Pexels licence (https://www.pexels.com/license/). To replace an image, drop your own file in with the same name and size, or edit assets/img-manifest.json and regenerate the derivatives with the asset script that came with your download, or any image tool.

The before photograph is not a real client photograph. before-warrender.webp is an illustrative concept, generated with an AI image tool from the after photograph (Pexels 32940939) and registered to it so that the windows, sills and door line up. It shows how the wipe works; replace both images with your own matched pair before publishing.

Files Source
room-warrender.webp, room-warrender-sm.webp, cover-warrender.webp, after-warrender.webp https://www.pexels.com/photo/32940939/
room-junction.webp, room-junction-sm.webp, cover-junction.webp https://www.pexels.com/photo/35165091/
room-spottiswoode.webp, room-spottiswoode-sm.webp, cover-spottiswoode.webp https://www.pexels.com/photo/13067890/
room-royal.webp, room-royal-sm.webp, cover-royal.webp https://www.pexels.com/photo/36260779/
room-marchmont.webp, room-marchmont-sm.webp https://www.pexels.com/photo/31488380/
room-bellevue.webp, room-bellevue-sm.webp https://www.pexels.com/photo/36099150/
room-dalmeny.webp, room-dalmeny-sm.webp https://www.pexels.com/photo/15576709/
room-bruntsfield.webp, room-bruntsfield-sm.webp https://www.pexels.com/photo/10117713/
room-leamington.webp, room-leamington-sm.webp https://www.pexels.com/photo/10142896/
before-warrender.webp assets/img-src/before-h9.jpg: illustrative concept generated from Pexels photo 32940939 (see below)
isla.webp https://www.pexels.com/photo/6568687/
tom.webp https://www.pexels.com/photo/6568689/
stair-hall.webp, stage-build.webp https://www.pexels.com/photo/34415859/
rattan-chair.webp https://www.pexels.com/photo/13335741/
stage-survey.webp https://www.pexels.com/photo/4792480/
stage-plan.webp https://www.pexels.com/photo/6894105/
stage-specify.webp https://www.pexels.com/photo/6580549/
mat-parquet-sun.webp https://www.pexels.com/photo/36178801/
mat-sash.webp https://www.pexels.com/photo/40326918/
mat-mixer.webp https://www.pexels.com/photo/16718612/
mat-plaster.webp https://www.pexels.com/photo/14916747/
mat-linen.webp https://www.pexels.com/photo/6580010/
mat-shadow.webp https://www.pexels.com/photo/38660121/
mat-taps.webp https://www.pexels.com/photo/36650049/
mat-swatches.webp https://www.pexels.com/photo/276267/
mat-green.webp https://www.pexels.com/photo/7599116/
mat-parquet.webp https://www.pexels.com/photo/37341468/

Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.