Project Overview
This is a website I built for my mum's wedding dress cleaning business. The brief was a professional, trustworthy site that clearly presents the services on offer and makes it easy for potential customers to request a quote or get in touch.
The site is built as a static HTML/CSS/JS site — fast, simple to host, and easy to maintain without a server-side framework. The key interactive feature is a multi-step personalised quote builder that collects dress details and submits the enquiry directly into a custom CMS I built alongside it. A PHP email fallback ensures no enquiries are lost if the CMS is unavailable. Pricing data is stored in a central JSON file so rates can be updated in one place without touching the page markup.
Project Highlights
- Personalised Quote Builder: Multi-step form that collects dress details and sends a tailored quote request directly to the CMS
- CMS Integration: All enquiries and quote requests post to a bespoke CMS via JavaScript, keeping everything in one manageable place
- PHP Fallback: If the CMS is unreachable, PHP handles email delivery as a safety net so no lead is ever dropped
- Centralised Pricing: Prices are defined in a single JSON file, making updates straightforward without editing the HTML directly
Site Structure
Homepage
A strong opening section that immediately communicates what the business does and who it's for — brides looking to clean, preserve, or restore their wedding dress. Clear calls-to-action guide visitors toward requesting a quote.
Services
An overview of the full range of services offered: wedding dress cleaning, preservation boxing, on-site steaming, and accessories cleaning. Each service is presented with enough detail to answer common questions without overwhelming the visitor.
How It Works
A step-by-step breakdown of the process from initial enquiry through to collection and return. Reduces friction by setting clear expectations and building confidence in first-time customers.
Pricing
Dress cleaning prices are displayed from the central JSON data source, covering different dress types, complexity levels, and optional extras. Keeping pricing in JSON means the business owner can request updates without a developer needing to edit the page template.
Why Choose Us
A trust-building section covering the business's experience, care approach, and guarantees — designed to convert visitors who are comparing options.
On-Site Steaming & Accessories Cleaning
Dedicated sections for the supplementary services, each with their own detail and pricing, ensuring these offerings are visible rather than buried in a general services list.
Personalised Quote Builder
The conversion centrepiece. A multi-step form walks the customer through describing their dress — fabric, embellishments, condition, any staining — and collects their contact details. On submission, the data is posted to the CMS via JavaScript where it appears as a new quote request for the business to review and respond to. A confirmation message is shown immediately so the customer knows their enquiry has been received.
Technical Implementation
The site was deliberately kept simple — no frameworks or build pipelines, just clean HTML, CSS, and vanilla JavaScript. This keeps hosting straightforward and the site fast without unnecessary dependencies.
Static HTML / CSS / JavaScript
Each page is written in plain HTML with CSS for styling and vanilla JS for all interactivity. The quote builder's multi-step logic, form validation, and CMS submission are all handled in JavaScript without any external libraries.
CMS Integration via JavaScript
When a quote request or contact form is submitted, JavaScript posts the form data to the companion CMS API. This keeps all enquiries centralised and visible to the business owner in one dashboard rather than scattered across an email inbox. See the Dress Cleaning CMS project for the full CMS build.
PHP Email Fallback
A PHP script sits alongside the static files as a fallback. If the JavaScript CMS submission fails for any reason — network issue, CMS downtime — the form data is caught and sent directly via PHP's mail functions. This means the business never misses an enquiry even during maintenance windows.
JSON Pricing Data
All pricing information lives in a single JSON file that the page reads at load time. This separates content from presentation — updating a price means editing one value in one file rather than hunting through HTML markup.
Project Gallery