Full disclosure first: Bellwood & Ash is a fictional business, our demo client. It is a small-batch candle studio in Guelph with nine scents in three sizes. We built its storefront, then ran the same client through every other module we sell, so you can see what each one actually produces instead of reading a description of it. Everything below is real work you can inspect.
bellwood-ash.vercel.app: open it, add a candle, view source
The scent library: filter by family, switch size to reprice the rangeThe checkout step, demonstrated without taking a payment
What the build included (demo project)
Seventeen pages: home, a filterable scent library, nine product pages, a collection page, a scent guide, the studio story, stockists, wholesale, and contact
A working cart with a slide-out drawer, quantity editing, a free-shipping threshold, and totals that survive a page reload
A checkout screen that shows the payment step exactly as a customer would meet it, with every field inert and a notice saying so
Twenty-seven SKUs generated from a single catalogue file, so a price or a burn time is corrected in one place and lands in nine
Built to WCAG AA: one h1 per page, labelled controls, full keyboard operation, and contrast verified in both light and dark themes
Everything readable with JavaScript switched off, because that is also what a crawler sees
No framework and no page builder. The whole site is 39 KB of CSS and 24 KB of JavaScript before compression, which is roughly what one stock hero image costs on a template store.
The SEO pass, before and after (demo project)
The storefront launched with deliberately weak search signals, the way most small business sites actually launch, and our process fixed them. Every row is verifiable in the page source:
Search visibility work on the Bellwood & Ash demo storefront, before and after Vela's SEO process. Bellwood & Ash is a fictional demo client.
Field
Before
After
Homepage title tag
Home
Bellwood & Ash | Hand-Poured Soy Candles in Guelph, Ontario
Homepage heading
Welcome to our shop
Candles that smell like somewhere, not like something
Product + AggregateOffer on all nine, with three sized Offers each
Local signals
(none)
LocalBusiness schema, opening hours, Guelph and Wellington County service area
Content depth
0 informational pages
A scent guide answering the six questions people actually search
Crawl signals
No sitemap, no robots.txt
17 indexable URLs, cart and checkout noindex and excluded
All nine modules, one demo client
Most agencies show you a website. The website is the part you can see, and it is usually the smallest part of the problem. Here is every module on our services page applied to the same fictional shop, each with something you can look at.
The storefront itself: 17 pages, nine product pages generated from one catalogue file, a working cart, and a checkout that demonstrates the payment step without taking a payment.
Open it and click through. Every page is hand-built static HTML with no framework behind it.
Keyword research, page-by-page metadata, Product and LocalBusiness structured data, an internal linking pass, and a scent guide built around what people actually search.
The before-and-after table above, and the schema in the page source.
A 10-second vertical Instagram ad built around what a photo can't carry: the strike of the match, the pour, and the wick catching. Cut for sound-on Reels, with the product saved for the last shot.
The stack first: email platform, signup forms, and ad tracking, connected in accounts the shop owns. Then an abandoned-cart sequence and a post-purchase sequence written to sound like the shop, with a suppression rule so a customer never gets both.
The wholesale form feeds a triage step that scores each enquiry against the shop's actual minimums and routes it. Real prospects reach a person the same day; the rest never take up studio time.
One email every Monday: what sold, what is running low, what needs a decision this week. Assembled from the store's own numbers, reviewed by a person before it sends.
Unit costing for all 27 SKUs, tracked against supplier price changes, so a quiet increase in vessel cost surfaces as a number rather than as a bad quarter.
A stock watch that turns a low-inventory threshold into next Thursday's pour list, ordered by what will run out first, so a batch is scheduled before a bestseller goes dark.
The sample pour list below.
The deliverables themselves (sample, fictional client)
Six of those modules produce something you can look at rather than a page on the website: an ad, two emails, and three working documents. Every frame and figure below is invented for a business that does not exist, shown to demonstrate the format.
A candle is hard to sell through a screen, because the part people buy is the part a photo can't carry. So this ad leans on sound: close, crisp, and quiet, the way ASMR is, which does the job the scent can't do through a phone.
The hook lands in the first second. The match is already striking before anyone has decided whether to keep scrolling.
The middle sells the handmade part without saying it: clay turning on a wheel, a slow pour over fir.
The product is saved for the last shot, lit, in the kind of room someone would actually burn it in, so the ad ends on the thing to buy.
Ten seconds, vertical, no voiceover and no text overlays, so one cut works across Reels, Stories, and the feed.
Shot by shot: a match is struck and touched to the wooden wick of a stoneware candle until the flame catches; hands shape a vessel on a turning pottery wheel; golden wax pours over fir sprigs in the vessel; and the finished candle burns on a wooden table beside a wool blanket, in front of a window onto misty forest.
Footage and sound are both generated, then cut to length. For a real client this module delivers a set of cuts and hooks to test against each other, with the campaign set up in the client's own ad account and nothing live until they approve it.
Abandoned cart, sent 4 hours after · Subject: You left a Harrowgate Cedar behind
Hi there,
You had a Harrowgate Cedar in your cart this afternoon and did not finish. No hard sell: it is still there if you want it, and it will stay there for a week.
If you were hesitating because you cannot smell it through a screen, that is fair. The Discovery Set is three travel tins, one from each family, and it costs less than one large candle. Most people who start there come back for a 9 oz of something.
Maya
Suppression rule: anyone who has bought in the last 30 days is excluded, and no customer receives more than one automated email in any 72 hour window. That rule is the difference between follow-up and nuisance.
Monday briefing · Subject: Bellwood & Ash: week of 17 August (sample)
Morning Maya. Three things this week.
Orchard Frost outsold everything again, second week running, and it is the one with the thinnest stock. Fourteen 9 oz left.
Wholesale enquiries are up: four last week against a usual one. Two are worth your time, and they are at the top of your inbox.
The Atelier vessel price went up again on the 12th. Your margin on that size is still healthy, but it has moved twice since June.
One decision to make: whether Thursday's pour is Orchard Frost or the Bellwood Fir restock. The stock numbers say Orchard Frost.
Margin watch (sample figures, fictional client)
Sample unit costing for three Bellwood & Ash candle sizes, showing wax and fragrance, vessel and packaging, labour, total unit cost, retail price and gross margin. Bellwood & Ash is a fictional demo client and every figure is invented.
SKU
Wax + fragrance
Vessel + packaging
Labour
Unit cost
Retail
Margin
Travel tin, 5 oz
$2.30
$2.40
$3.75
$8.45
$28.00
69.8%
Signature jar, 9 oz
$4.10
$7.40
$5.00
$16.50
$48.00
65.6%
Atelier, 16 oz
$7.20
$11.65
$6.25
$25.10
$78.00
67.8%
What the module is for is the sentence underneath the table: in this sample, the Atelier vessel rose twice since June. The margin still holds at 67.8%, and a third increase takes it below the 65% floor the shop set. That is a decision made early rather than a surprise found at year end.
Lead triage (sample week, fictional client)
Sample wholesale enquiry triage for Bellwood & Ash, showing each enquiry, what it asked for, how it scored, and where it was routed. Bellwood & Ash is a fictional demo client.
Enquiry
What it asked for
Score
Where it went
Independent gift shop, Stratford
Full range, 36 units
Hot
Straight to Maya, same day
Hotel group, Toronto
480 units, own label
Out of scope
Declined with a referral
Student, no shop named
Asking for a discount code
Not a lead
Auto-reply, no human time
Homewares buyer, Kingston
Wants samples first
Warm
Sample pack queued, follow-up in 7 days
Two of those four were worth an owner's attention. The scoring runs against the shop's own stated minimums, and anything the rules cannot place confidently goes to a person rather than being guessed at.
Stock watch to pour list (sample, fictional client)
// low stock threshold reached, 3 SKUs
Orchard Frost, 9 oz 14 left sells 11/wk out in 9 days
Bellwood Fir, 16 oz 6 left sells 3/wk out in 14 days
Speed River Linen, 5 oz 22 left sells 9/wk out in 17 days
// Thursday pour list, ordered by what runs out first
1. Orchard Frost, 9 oz batch of 60
2. Bellwood Fir, 16 oz batch of 30
// Speed River Linen holds: 14 day cure means it would not ship sooner anyway
The last line is the part that matters. An automation that ignores the fourteen day cure schedules a pour that cannot help, which is why this kind of work gets built around a business rather than bought off a shelf.
What is real here and what is not
The build is real. Every page, the cart, the filtering, the schema, and the accessibility work exist and can be inspected.
The business is not. Bellwood & Ash, Maya, the stockists, and the reviews are invented. No real shop, product, or person is represented.
Every figure in the artifacts above is invented data chosen to demonstrate a format, not a client result. We have no client results to show yet and will not imply otherwise.
The checkout takes no payment. There is no payment provider connected, no keys, and no field that collects a card number.
The photography and the Instagram ad, footage and sound both, are generated rather than shot or filmed, and labelled as a demo throughout.
Details a real client would supply and we could not verify were left as placeholders rather than invented. That is the same rule every real client gets, and it is why this page exists in the form it does.
Want one of these with your name on it?
A storefront is one module of nine. Pick the ones that solve your actual problem, and leave the rest. Everything is quoted per project.