Portfolio / E-commerce + campaign system
45 handmade pieces, one conversation.
Soul Candles makes soy candles, wax flowers and event favors in Medellín, Colombia. It sold the way most handmade brands here sell: photos on Instagram, prices over chat, and a catalog that lived in the head of whoever answered. We built the store that puts order to that — a page per product, configurable color and scent, automatic wholesale pricing — and left it closing where the customer already was: on WhatsApp, with the order already written.

01The client
Candles that get given, not sold.
What Soul Candles actually sells is the gesture of giving something to someone: a candle in the scent that person wears, in their color, with a line written across it. That is where the three lines come from — scented, decorative, and favors for weddings, christenings and baby showers — and it is also the commercial constraint: almost no order closes before color, scent, quantity and message are decided.
A flat catalog does not solve that. Neither does an off-the-shelf store, which puts a buy button where a decision belongs. The brief was to build what sits in between — a site that settles everything before the first message — and then keep it alive with SEO, content and campaigns.
Published catalog
- 019 scented candles
- 0213 decorative candles
- 0323 event favors
- 045 scent families
- 05Color choice with swatches
- 06Custom message
- 07Special arrangement and packaging
- 0810% wholesale from 12 units
Our role
We are the ongoing digital partner: site and catalog, SEO architecture, content, measurement and the seasonal campaign system. The work did not end at launch — it started there.
02Before building
What already worked, what was leaking.
The project opened with market research and a full SEO/GEO/AEO architecture: category size and growth (~4.1% a year projected through 2034), the Colombian competitive set brand by brand, and how this buyer discovers and reorders. What we found set the order of everything else.
Discovery happens at craft fairs and on Instagram; closing happens on WhatsApp. That is not a limitation of the channel — it is how this market buys. The site was designed to feed that conversation, not to replace it.
With no page per product there is nothing to rank, nothing to advertise and nothing to send over chat. Prices were retyped in every conversation, the wholesale discount depended on who was answering, and even the product weight appeared differently from one channel to the next.
No Colombian candle brand owned the search intersection of handmade, wellbeing and considered gifting. The window was open and time-sensitive: sitemap, intent clusters, heading hierarchy and metadata templates were written before the first line of code.
03The idea
The concept everything else answers to.
The conversation is the checkout.
WhatsApp is not this store's fallback — it is where the sale closes. So the site's job is not to process a payment; it is to make that message arrive complete: product, quantity, color, scent, personalization, special arrangement, estimated total, and the discount already applied.
Whoever answers stops quoting and starts confirming. Whoever buys stops asking for prices and starts deciding details. Every block was measured against that: if a screen does not move that conversation closer, it does not ship.
DiscoverPersonalizeClose
04The flow
Three steps, no spare friction.
You enter by occasion, not by warehouse.
The home page shows the three doors in — scented, decorative, favors — and a short curated set. The full shop lives on its own page, with category filters written into the URL: the link someone pastes into a chat opens exactly what they were looking at.
Color, scent, message, quantity.
Each product page configures the piece: color swatches, scents grouped by family, a custom message and a special arrangement. The subtotal recalculates live and the 10% wholesale rate applies itself at 12 units — unasked for, unnegotiated, independent of who is on the other side.
The order arrives already written.
The cart collects several references and exits as a structured message: product URL, quantity, color, scent, personalization, arrangement and estimated total. Events and large orders get their own quote flow, with a confirmation page and a lead event of its own.
05Scope
The system in numbers.
The whole site is compiled before it is published: every product, article and seasonal landing exists as HTML served from ordinary hosting, with no application server to keep alive.
- 45
- Products with their own page
- 120
- Prerendered pages
- 12
- Units for the 10% wholesale rate
- 2
- Languages with hreflang and alternates
06The brand
The logotype comes with the brand. The system decides where it lives.

One lockup, two versions
“Soul” in a high-contrast italic, “Candles” in a heavy grotesque. It is a horizontal logotype with no separate mark, so the only approved variation is one of value: ink on light, white on dark. Both ship as PNGs with real transparency.
Where it appears
Fixed nav, footer, favicon, Open Graph, and the product cards people share over chat. The nav takes the ink version; the footer and anything over photography take the white one.
Clear space
Minimum air on all four sides equals the height of the “S”, and the logotype never sits on detail: either flat color, or a masked region of the photograph.
Approved grounds




Use the version that contrasts
Ink on light, white on dark. That is the only decision to make.
Do not recolor it
Brand color enters through the photographed product, never through the logotype.
Do not stretch it
The relationship between the italic and the grotesque is fixed. Always scale from a corner.
Do not drop it onto a photo
Over photography it goes in white, on a masked area — not across the detail.
Do not shrink it past “Candles”
If the word stops reading, the logotype has stopped working: size it up or use another asset.
07Color
The interface brings no color. The product does.
Primary surface
- HEX
- #FFFFFF
- RGB
- 255 · 255 · 255
Bands and cards
- HEX
- #F5F5F5
- RGB
- 245 · 245 · 245
Text · Contrast
- HEX
- #0A0A0A
- RGB
- 10 · 10 · 10
Secondary text
- HEX
- #6B6B6B
- RGB
- 107 · 107 · 107
Editorial accent · from the photo
- HEX
- #8A5A3A
- RGB
- 138 · 90 · 58
08Typography
One family, three registers.
Amulya · 850
Aa Bb Cc — 0123456789
Variable 300–900 · used at 850
Amulya · 400
Aa Bb Cc — 0123456789
Variable 300–900 · used at 400
Amulya · 650
Aa Bb Cc — 0123456789
Variable 300–900 · used at 650
Gifts that feel made for someone.
clamp(44–88) · -3% · 850Come in by occasion, not by noise.
clamp(32–56) · -2% · 780 UPFour ways to give light.
clamp(24–34) · -1% · 780Scented pieces, wax flowers and personalized details for giving with intent.
20 / 32 · 0 · 400The WhatsApp message carries product, quantity, color, scent, personalization, special arrangement and the wholesale discount when it applies.
17 / 27 · 0 · 400Wholesale from 12 units
12 / 16 · 12% · 650 UP09Voice and content
Like telling a friend. Never like selling.
Close
Second person, sentences someone would say out loud. If the person packing the candle would not say it, it does not ship.
Concrete
Soy wax, 150 g, wooden wick, delivered in so many days. Facts outsell adjectives.
Sensory, in moderation
A scent is described by what it brings to mind, not by a note list nobody recognizes.
Unevenly paced
A hard rule for TikTok scripts read by synthetic voice: vary sentence length, use natural connectors. Parallel structures make the read sing-song.
Like this
It arrives ready to hand over: wrapped in tissue paper, with your message across the top.
Not like this
Experience a unique and unparalleled sensory journey with our premium highest-quality products.
Like this
150 g of soy wax. A concrete vessel. A dropper of fragrance so you can refill it when it runs out.
Not like this
An innovative aromatic solution designed to transform and enhance every space in your home.
10Below the surface
What holds the store up when nobody is looking.
Every URL states what it is.
Per-route metadata, canonicals, ES/EN alternates, Open Graph and Twitter cards, robots, and a sitemap index with one file per type — pages, products, blog and English. Structured data for the catalog, products, breadcrumbs, FAQs and seasonal landings.
The KPI is intent sent.
GA4 and Tag Manager are installed, with a lead event fired when someone generates a quote. The Google Ads conversion is wired and waiting for its tag; Meta Pixel and the Conversions API are the next step to close the loop on paid media.
Compile, verify, publish.
Critical font preloaded, preconnect to analytics, heavy visual pieces loaded lazily, and a full static export. Deployment runs as a single command: build, artifact verification, permissions, and a push to the branch the host watches.
11What keeps growing
The Colombian calendar, built once.
A gifting brand lives on dates. The expensive mistake is rebuilding the store for each one: new landing, new URL, duplicated product pages, and every bit of ranking starting over each September. Here a season is configuration, not construction.
Each campaign gets an evergreen URL reused year after year, featured products that point at the pages that already exist, gift guides grouped by price range, a shipping cut-off date, its own FAQs and its own structured data. The visual atmosphere shifts through CSS tokens switched on by season: the site repaints without being rebuilt.
On the commercial side the catalog ships labelled for advertising — season, margin, price, priority and type — using the custom labels in Google Merchant Center and the Meta catalog, with campaign naming conventions and UTMs defined. Amor y Amistad, Colombia's September friendship-and-love date, opened the system with Standard Shopping and Search on Google and manual campaigns with dynamic product ads on Meta.
Dates in the system
- 01Amor y Amistad
- 02Velitas and Christmas
- 03Mother's Day
- 04Father's Day
- 05Women's Day
- 06Halloween
- 07Black Friday and CyberLunes
- 08Valentine's Day
Running now
Amor y Amistad runs as a six-week plan with ROAS, CPA and CTR compared year over year. Día de las Velitas and Christmas is next to be built: it is the date with the strongest fit for a candle brand, and the system is already in place to receive it.
12The system applied
From product page to gift.
Gifts that feel made for someone.
Scented pieces, wax flowers and personalized details for giving with intent — without losing your calm on the way to checkout.
→ Visit the shopAn editorial headline, three doors in, and a short selection. The full shop lives elsewhere so the entrance is not a warehouse.

Crystal Pink: textured pink glass with a wooden lid — the piece that opens the home page.

Lotus: flower-shaped ceramic with a wooden wick, for quiet rooms.

Mini Bouquet: wax roses on a ceramic vessel — the events line.
The work continues
A store is not a catalog with prices on it.
It is the shortest path between someone who wants to give something and someone who can make it. If your brand already sells over chat and the site is not helping that conversation, this is exactly what we build.
Tell us about your project