Stage 1 ยท Framework

Every message HomeKode sends, in one place.

Thirty post-action templates across the order journey and the returns lifecycle โ€” each one written for email and WhatsApp, each one carrying the root cause back to the customer in plain language. ๐Ÿ•Š๏ธ

Templates authored3017 order journey ยท 13 returns & refunds
Root-cause reasons52Shown to the customer, never hidden
Channels per trigger2Email โœ‰๏ธ Email and
How a message gets sent
  • ๐Ÿ‘ฉโ€๐Ÿ’ผ An agent takes an action in Shopify โ€” that is the only trigger.
  • ๐Ÿ”” Shopify fires a webhook to a Cloudflare Worker (HMAC-verified).
  • ๐Ÿงฉ The Worker pulls order and customer data from Shopify, logistics from Dobesell, ticket context from Freshdesk.
  • ๐Ÿ“ The matching template is filled, in the customer's language and tone.
  • ๐Ÿ“ค It goes out on both channels, and every send is written to an audit log.
Build roadmap
  • โœ… Module 1 โ€” Framework, template library, Preview Studio (this page)
  • โณ Module 2 โ€” Cloudflare Pages + Supabase deploy, sign-in, roles
  • โณ Module 3 โ€” Shopify custom app, webhooks, HMAC verification
  • โณ Module 4 โ€” Email sending: ESP + SPF, DKIM, DMARC on homekode.com
  • โณ Module 5 โ€” Live Website Updates poller (cron + diff engine)
  • โณ Module 6 โ€” WhatsApp Business Platform + Meta template submission
Credentials are only ever requested at the module that needs them. Nothing here holds a key. ๐Ÿ”
Stage 4 ยท Preview

Preview Studio

Pick the source, the template and the channel โ€” then see exactly what lands on the customer's phone or in their inbox, before a single message goes out. ๐Ÿ‘€

Where each property comes from
Sample record
order#57668 ยท 17 May 2026
customerNadine Finge
itemGraciell Warm Terracotta Bench
total1,450.00 AED
marketDubai, UAE ๐Ÿ‡ฆ๐Ÿ‡ช
Stage 2 ยท Part one

Order journey

Seventeen moments between checkout and the doorstep. The ones that carry bad news carry a reason with them โ€” a customer who knows why is a customer who waits. ๐Ÿงญ

Stage 2 ยท Part two

Returns, refunds & replacements

Thirteen stages from "I'd like to return this" to money back in the account โ€” every message naming the piece and the reason it's going back. ๐Ÿ”„

Reason codes accepted on a request
Stage 1 ยท Reading A โ€” store feed

Live website updates

What changed on homekode.com โ€” new arrivals, price moves, stock swings, collection updates โ€” polled and refreshed without you asking. ๐Ÿ“ก

 Change feed
refresh in 20s
How the feed is wired
  • โฑ๏ธ A Cloudflare Worker cron polls homekode.com/products.json and the collection endpoints.
  • ๐Ÿ—ƒ๏ธ Each poll is snapshotted to Supabase.
  • ๐Ÿ” The next poll is diffed against the last one, so the feed shows change events, not a product list.
  • ๐Ÿท๏ธ Events detected: new arrival, price drop, price increase, back in stock, sold out, collection updated.
  • ๐Ÿ”„ The page re-renders on its own โ€” no manual refresh.
Verified 23 Aug 2026: the endpoint returns live product JSON with title, handle, updated_at, images and variants carrying price, compare_at_price, available โ€” everything the diff engine needs. The feed below is sample data until Module 5 goes live. โœ…
Stage 1 ยท Integrations

Data sources

Three systems, one message. Every property on every template resolves back to exactly one of them โ€” no guessing, no duplicated truth. ๐Ÿ”Œ

๐Ÿ›๏ธ Shopify

System of record and the only trigger. Orders, customers, payments, fulfilment status, totals and VAT, addresses.

Needed at Module 3
Custom app ยท Admin API token ยท webhooks: orders/create, orders/updated, orders/cancelled, fulfilments, refunds
๐Ÿšš Dobesell

The back-office command centre. AWB and courier telemetry, timestamps, delivery attempts, fulfilment-model routing, invoices, FC receipt.

Needed at Module 3
API base URL ยท auth method ยท endpoint docs for AWB, timestamps, fulfilment model, invoices
๐ŸŽง Freshdesk

Customer conversation context. Ticket ID and status, reason code captured by the agent, agent notes, CSAT hooks.

Needed at Module 3
API key ยท domain ยท ticket field IDs for reason code
Full property map
Stage 3 ยท Integrations

API connections

One slot for every credential, waiting for IT. Paste it, save it, test it โ€” the app tells you straight away whether it works. ๐Ÿ”‘

โš ๏ธ This page is the preview, not the vault

Nothing typed here is stored, sent, or remembered โ€” this preview has nowhere to put it. Paste real credentials only into the deployed app, where each one is encrypted with AES-256-GCM before it touches the database and can never be read back out. Try the flow here with anything you like. ๐Ÿงช

Slots waiting17Filled as IT hands each one over
Needed next10Module 3 ยท Shopify, Dobesell, Freshdesk
Readable back0Write-only by design ๐Ÿ”’
Stage 1 ยท Non-negotiables

Security & delivery

This app will send real messages to real customers. That's a responsibility, so the guardrails come before the features. ๐Ÿ”

Security posture
  • ๐Ÿ—๏ธ No key ever reaches the browser. All secrets live in Cloudflare Worker environment bindings.
  • โœ๏ธ Every Shopify webhook is HMAC-verified before it's trusted.
  • ๐Ÿ” Sends are idempotent โ€” one action, one message, even if a webhook is delivered twice.
  • ๐Ÿ‘ค Sign-in required, with roles: Owner (you), Editor, Viewer.
  • ๐Ÿงพ An audit log of every message: who, what, when, to whom, on which channel, and the result.
  • ๐Ÿ›‘ A global kill switch that stops all outbound sending in one click.
  • ๐Ÿงช A dry-run mode that renders and logs a send without dispatching it.
  • ๐Ÿ™ˆ Customer data is rendered, never stored beyond what the audit log needs.
Deliverability & compliance
  • ๐Ÿ“ง SPF, DKIM and DMARC on homekode.com โ€” without these, mail goes to spam.
  • ๐Ÿ’ฌ WhatsApp templates must be pre-approved by Meta; free-form text outside a 24-hour customer-initiated window is not permitted.
  • ๐ŸŒ Written for a multi-national Middle East audience: plain English, no idioms, no slang, AED, UAE address format.
  • โฐ Send windows respect customer care hours, 9amโ€“9pm, seven days a week.
  • ๐Ÿ”• A customer who opts out of WhatsApp still receives email.
Outstanding items are credential handovers, not decisions. Each is requested only at its own module. Nothing is blocked today. โœ