# Arrive in bloom: rebranding The Vow Carriage

A year after its first launch, rebranded and rebuilt a family-run wedding car service in Singapore with a garden-wedding identity, light and dark modes, a brand kit and an Instagram launch.

## Project details

- Client: The Vow Carriage
- Service: Website Design
- Year: 2026
- Duration: 1 week
- Tech stack: Next.js, Sanity
- Live site: https://thevowcarriage.com

This is the follow-up to [From Zero to Online](/work/from-zero-to-online-a-wedding-car-rental-website-for-the-vow-carriage), the 2025 project that first put The Vow Carriage online.

## The challenge

The first site went up in two weeks in 2025, on a small budget, to get The Vow Carriage online. It did that job: couples could find the business and enquire around the clock on WhatsApp or email, and the family could update prices themselves in Sanity.

A year of running it showed what a second version needed:

- **Real photos in the hero.** The first build used an AI-generated image as a stand-in until the family had photos of their own. It showed a vintage Rolls-Royce rather than their silver Mercedes-Benz C200 AMG and white Toyota C-HR.
- **A look of its own.** Cream, forest green, terracotta and Playfair Display were a safe starting point, but they read like many other wedding sites.
- **More of the family.** The photo of the uncle beside the Mercedes, the business's strongest asset, only appeared on desktop.
- **One clear path to book.** As pages were added, booking links had drifted, and "Book Now" pointed at an anchor that didn't exist on the contact page.
- **A brand kit in use.** The wordmark and monogram made for the first site never reached the nav, and a dark palette was defined but never switched on.
- **An Instagram presence.** The business had an account but had never posted.

The brief was to keep what worked, meaning the positioning around family warmth and value, WhatsApp-first booking and the Next.js and Sanity foundation, and give the business a brand that feels like a garden wedding.

## The approach

Instead of choosing a style up front, the work started with directions the client could click through. Every round was a working mockup with real copy, real prices and the family's own photos, so each decision was made on what the site would actually look like.

### Round 1: garden and floral

The first proposal was four garden and floral options, each with one flower motif and the photos cropped into frames that hide the car-park backgrounds:

- **Invitation:** ivory card, sage line-drawn sprigs, packages set like a menu.
- **Herbarium:** pressed-flower specimen sheets around Singapore's national orchid, Vanda Miss Joaquim.
- **Blush Bouquet:** blush and wine with a peony bouquet over a domed photo frame.
- **Evening Garden:** night-leaf green, ivory and gold, with white frangipani.

![Round 1 mockups: Invitation, Herbarium, Blush Bouquet and Evening Garden.](https://cdn.sanity.io/images/eepq19gf/production/f8833d0e48bdc41b16fa849cdd49f51bdec2f41a-1920x1080.jpg)

Blush Bouquet and Evening Garden made the shortlist.

### Round 2: light and dark

Both shortlisted options were designed in light and dark, with a working toggle in the mockups. Every text colour was checked to at least 4.5:1 contrast in both modes, which meant darkening the gold for labels on ivory.

![Round 2: Blush Bouquet and Evening Garden, each shown in light and dark.](https://cdn.sanity.io/images/eepq19gf/production/97bf4c8b9e9c205476b0e98ac3d9f667b842b902-1920x1080.jpg)

Evening Garden won. Two decisions were settled at the same time: every visitor starts in light mode, and a single sun and moon button switches between the two.

### The direction: Evening Garden

Evening Garden is a garden at noon in light mode and the same garden at dusk in dark mode. It keeps one flower, the white frangipani found in gardens across Singapore, and uses it everywhere instead of a generic flourish.

- **Background:** ivory #FAF7F0 in light mode, night leaf #13231B in dark.
- **Text:** forest ink #1D3326 in light, ivory #F3EEE2 in dark.
- **Gold labels:** antique gold #86692F in light, gold #C8AD78 in dark.
- **Gold hairlines and leaves:** #B99A5E and #5C7D66 in light, #C8AD78 and #2E4A3A in dark.
- **Type:** Bodoni Moda for headings, in italic for display lines like "Arrive in bloom.", and Tenor Sans for body text and spaced capitals.
- **Frangipani artwork:** a crown above headlines, a bouquet over photo frames, a branch beside headings, a garland over the enquiry band and a single bloom as the section mark. Baby's breath is drawn in the same flat style as a filler.
- **Details:** a domed photo frame for people, square buttons in spaced capitals, and hairlines instead of boxed cards.

![The brand reference page, showing the colour tokens, type and flower artwork side by side in light and dark.](https://cdn.sanity.io/images/eepq19gf/production/c7eb7375ea1cee451f832331c85b8f381a42c03d-1920x1080.jpg)

### The rebuild

The first build's foundation held up, so the rebuild kept its Next.js and Sanity stack and focused on the brand. It landed in 46 small commits, each reviewable on its own.

1. **Foundations.** Colours moved into CSS tokens for light and dark, replacing the JavaScript that injected them. New typefaces, square buttons, and a sun and moon toggle that starts every visitor in light mode.
1. **Homepage.** A new hero, then Our family, Packages, Fleet, FAQs, Journal and the enquiry form, separated by hairlines. The uncle's photo now shows on phones too.
1. **Booking fixes.** Every "Book" link goes to one enquiry page with the car and package already filled in. The watermarked photo and the inaccurate "vintage wedding car" keyword were removed.
1. **Inner pages.** Packages, FAQs, contact, the journal, articles and the 404 page were restyled, and frangipani was added across them.
1. **Mobile.** The menu opens full screen on phones, with a header that mirrors the nav bar.

![The old Our Story section beside the new Our family section with the domed photo frame.](https://cdn.sanity.io/images/eepq19gf/production/692491f5065759e87541abf4068e6ab62a10cd5f-1920x1080.jpg)

![Phone screens: the old homepage, the new homepage, and the new full-screen menu in dark mode.](https://cdn.sanity.io/images/eepq19gf/production/b50c6a010c8d4cd365d694b95bc4a8dfb2103d8f-1920x1080.jpg)

![The new packages section in dark mode and a journal article in light mode.](https://cdn.sanity.io/images/eepq19gf/production/c0043bc2b4302d328264a6f01fd250f35556bc60-1920x1080.jpg)

#### Technical implementation

- Colour tokens in `globals.css` for `:root` and `.dark`, switched by next-themes with a two-way toggle that renders both icons to avoid a flash on load.
- The flower artwork is a set of SVG React components that read CSS variables, so one set of drawings serves both modes.
- Headless Chrome checks after each change: screenshots in light and dark from 390px to 1920px, a sideways-scroll check on every page, and a script that measures each flower against every line of text so decoration never covers copy.
- The H1 keeps "Wedding cars in Singapore" for search while "Arrive in bloom." carries the design, and the existing structured data (LocalBusiness, FAQPage, BlogPosting) is unchanged.

### Brand kit and assets

Every asset is generated from the same flower drawings and colour tokens as the site, so a change to the brand updates all of them with one command.

- **Icon and wordmarks:** a single frangipani on night leaf for the favicon and app icons, and the wordmark in spaced capitals under a small bloom, in light and dark versions.
- **Brand reference page:** an internal `/brand` page that renders the real components and colour tokens in both modes, so the reference can't drift from the site.
- **OG images:** a separate composition for each page that isn't driven by the CMS: the family photo for the homepage, a dark rate card for packages, real questions for FAQs, contact details for the enquiry page and an invitation layout for the journal.
- **Enquiry email:** the lead notification from Resend now carries the wordmark, a garland, a ruled table of the enquiry with real package names and prices, and one-tap "Reply by email" and "WhatsApp" buttons.

![The icon, and the wordmark in light and dark.](https://cdn.sanity.io/images/eepq19gf/production/7c775e6a73b23f10e68ce9491bba2ee5926958af-1920x1080.jpg)

![Open Graph images for the homepage, packages, FAQs, contact and journal pages.](https://cdn.sanity.io/images/eepq19gf/production/198944a2f8718dce1d6f21ce82c4df066e728666-1920x1080.jpg)

![The branded enquiry email with the wordmark, garland, enquiry details and reply buttons.](https://cdn.sanity.io/images/eepq19gf/production/35a74657903bdb86241435b06b0db913b6ce2254-1920x1080.jpg)

### Socials: setting up Instagram

The Vow Carriage had an Instagram account but had never posted. The rebrand came with a complete kit to launch it, generated by the same scripts as the site's assets.

- **Profile:** a frangipani profile picture sized for the circle crop, a display name, a 109-character bio ("Family-run bridal cars in Singapore. Our uncle drives.") and the website link.
- **Highlight covers:** Our family, Fleet, Packages, How to book and FAQ, each with its own flower motif inside a gold ring.
- **First post:** a five-slide carousel that opens with "Nice to meet you.", then introduces the family, the two cars, the package prices and how to book. The caption keeps to five hashtags, and each slide has its own alt text.
- **Story:** an announcement for the first post, with space left under the photo for a link sticker.

![The five slides of the first post: Nice to meet you, Our family, Fleet, Packages and How to book.](https://cdn.sanity.io/images/eepq19gf/production/2ff80349cf9a0cae51e5284353b67c9fcd881b6c-1920x1080.jpg)

![The Instagram profile with its highlight covers, and the story announcing the first post.](https://cdn.sanity.io/images/eepq19gf/production/fd976ff6579a88d2b2f07255208a8aa4d406896a-1920x1080.jpg)

#### A setup guide for the team

So the family could set up Instagram without a designer on hand, the kit came with a private guide page. It previews the finished profile, lists every image in upload order, and has a copy button for the name, bio, link, caption and each slide's alt text. Instagram asks for alt text one image at a time, so each slide gets its own.

![The guide's profile section: a phone preview of the finished Instagram profile beside copy-ready name, bio and link.](https://cdn.sanity.io/images/eepq19gf/production/41dca742da24655a379142babf5305efaed8f984-1920x1080.jpg)

![The guide's first-post section: the carousel in upload order.](https://cdn.sanity.io/images/eepq19gf/production/ab9a19d6d71129144a6303e5ca6a8432a1f46d2a-1920x1080.jpg)

![The guide's caption with a copy button, and alt text for each slide with its own copy button.](https://cdn.sanity.io/images/eepq19gf/production/c37103013d11d2349ccb8e23ba706e0680e3df13-1920x1080.jpg)

![The guide's highlights section: five covers with the highlight name to use for each.](https://cdn.sanity.io/images/eepq19gf/production/3ea8b5d370528b4a9977855b0d3e1ec9b1ba46d2-1920x1080.jpg)

## The impact

The Vow Carriage now looks like what it is: a family with two well-kept cars and a garden-wedding sensibility. The site shows the real fleet, puts the uncle at the centre, sends every booking to one place, and works in light and dark. The brand kit and Instagram launch are ready to go out alongside it.

The new site went live on 30 September 2026. Results are still to be measured.

---

Source: https://leezonghan.com/work/arrive-in-bloom-rebranding-the-vow-carriage
Author: https://leezonghan.com