← Back to TrueCoat Painters

Behind the build · Tiny Mammoth

A painting site that lets you try the color first

How the one interaction on this page — repainting the hero wall live from a row of swatches — was built to remove the single biggest reason homeowners stall on a paint job, without ever elbowing the phone number aside.

The concept

TrueCoat Painters is a fictional Pasadena painting company built as a conversion-first service template. Every decision answers one homeowner question — "what if I pick a color and hate it?" — and turns that hesitation into a phone call.

The aesthetic school is gallery minimalism meets the paint-chip aisle: a warm gallery-white canvas (#F6F3EE), near-black ink, one warm gray, and deliberately no fixed brand color. Instead the accent is a variable that the visitor sets themselves. Poppins — a friendly, rounded geometric sans — carries the display type like hand-lettered signage; Inter keeps the body neutral so the color, not the layout, is the loudest thing on the page. The composition is an asymmetric gallery grid: a wide-then-narrow service row and an off-kilter, slightly rotated photo frame, like prints hung on a wall.

The techniques

1 · Live repaint via a masked multiply layer

The hero is a single photo of a painter rolling a wall. Above it sits one absolutely-positioned <div> with mix-blend-mode: multiply, so whatever color it holds tints the pixels beneath it like a real glaze of paint. A soft gradient mask fades the tint out toward the bottom of the frame, so the wall recolors while the painter and floor stay believable.

/* the tint layer that "repaints" the wall */
#hero-wall{
  mix-blend-mode: multiply;
  background: var(--accent);
  mask-image: linear-gradient(180deg,#000 46%,transparent);
  transition: background .55s cubic-bezier(.22,1,.36,1);
}

Swapping the layer's background eases from one color to the next, so the wall dissolves between shades instead of snapping.

2 · One variable, repainted everywhere

Each swatch is a real <button> carrying its colors as data attributes. Choosing one doesn't just tint the wall — it rewrites a site-wide --accent custom property, so buttons, links, the section kickers, the step numbers and the review stars all shift to the chosen color in the same breath.

function apply(s){
  root.style.setProperty("--accent", s.accent);
  root.style.setProperty("--on-accent", s.on);
  wall.style.background = s.wall;   // repaint the hero
}

Every accent ships with a paired --on-accent text color and a darkened --accent-deep for links on the white background, so contrast holds no matter which swatch wins — the light ochre flips its button text to ink, the darker shades stay white.

3 · Hover previews, a click commits

Because the swatches are buttons, they work by keyboard, tap and mouse identically. mouseenter and focus preview a color live; mouseleave and blur revert to the last committed choice; a click locks it in and moves the aria-pressed state. It feels like flipping through paint chips, then setting one down.

4 · Guarding the flourish

The interaction is deliberately subordinate to the call-to-action: the phone button and "Get a Free Quote" sit above the swatch bar, and the swatch copy openly says "it's the fun part; the free quote is the real one." Under prefers-reduced-motion the global transition override makes every repaint instant — no eased fades, no pulsing map marker — so the feature still works but never moves for people who asked it not to.

5 · Art-directed photography

Both supplied photos are treated with the palette rather than dropped in raw. The hero carries the repaint layer plus a diagonal ink scrim (linear-gradient(102deg, rgba(20,18,16,.9) → transparent)) that keeps white headline text above AA on every swatch. The roller macro is hung in a slightly rotated frame with a corner color-chip and a neighborhood caption, so it reads as a hung print, not stock.

Why this converts

  • It defuses the #1 objection in the hero. Color is the scary, seemingly irreversible part of painting. Letting a homeowner see real shades on a real wall — in the first five seconds — replaces "what if I hate it" with "oh, I could do that," which is the mindset that fills out a form.
  • The phone number appears six times and twice above the fold — header pill, hero button, quote panel, the thank-you state, sticky mobile bar and footer — always a live tel: link. The playful part never buries the profitable part.
  • Trust sits directly under the headline: 4.9★ from 521 reviews, "licensed, bonded & insured," and 14 years in business, answering "are these people legit?" before the first scroll.
  • The sticky mobile call bar keeps "Call Now" and "Free Quote" under the thumb for the whole scroll, and the body reserves bottom padding so it never covers content.
  • The process section sells certainty, not services: Call → free color consult & quote → prep & protect → flawless finish. It frames the whole job as low-risk, echoing the swatch promise made in the hero.
  • Locality is everywhere — a 626 number, a Pasadena base, eight named Valley cities, and neighborhood-tagged reviews (South Pasadena, San Marino, Pasadena). "They're from here" is a local service business's strongest trust cue.

How it was made

This site was hand-coded — plain HTML, CSS, and JavaScript, written line by line. No page builders, no drag-and-drop themes, no off-the-shelf frameworks. Every detail, from the live repaint swatches that recolor the hero wall to the sticky call bar, was engineered specifically to move a homeowner toward one action: picking up the phone.

That's the Tiny Mammoth approach to a client website: a template built to convert, not just to look good.

Why this one is unique

Every template in our library moves along a few axes: its signature interaction, its relationship to color, and its aesthetic school. TrueCoat is deliberately different on all three.

Different axes from earlier templates

  • Signature: earlier service sites leaned on scroll-driven decoration (a copper pipe drawing itself) or the tired before/after slider. This one's signature is generative and user-driven — the visitor repaints the hero and reskins the site, so no two visits look the same.
  • Color: most templates commit to a fixed brand palette. TrueCoat commits to having no fixed accent — the base is an intentionally neutral gallery white so the one shifting variable can shout. The brand color is whatever the customer is considering.
  • Aesthetic: where the warm-trade sites go navy-and-slab-serif "competence," this goes gallery-white and rounded-geometric Poppins — showroom, not toolbox.

The hypothesis

Color is the scary, seemingly irreversible part of a paint job. The number-one hesitation isn't price or trust — it's "what if I hate it on the wall?" Letting a homeowner preview real colors on a real wall removes that hesitation and makes booking feel safe, which should raise quote-request rates versus a static gallery hero.

The advantages

  • The interaction is the sales pitch — playing with it rehearses the exact value proposition ("we'll show you the color first"), so engagement and message reinforce each other.
  • Because it's driven by one CSS variable and one blend layer, it costs a few lines of JS and zero extra assets, and degrades to a perfectly good static hero under reduced-motion or if scripting fails.
  • A neutral base palette ages well and re-skins instantly for any real painter who adopts it — swap five hex values and it's their brand.