Webline Store

A catalogue that loads before you finish clicking
Overview
The storefront for Webline Technologies — a commerce platform on Cloudflare's edge, sharing a domain with the corporate site but running as its own application.
Two priorities: a catalogue that feels instant, and one that stays correct when stock and prices change.
Architecture
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (Cache Components), React 19 |
| API | Hono + oRPC on Cloudflare Workers |
| Database | D1 (SQLite) + Drizzle |
| Caching | Edge KV, use cache, TanStack Query |
| Async | Queues — orders, stock, cart recovery |
| Auth | Better Auth — 2FA, passkeys, anonymous sessions |
Recommendations that read the room
Three signals — content similarity, collaborative behaviour (viewed, added and purchased together) and the shopper's own category preferences — are blended per placement, because the right suggestion depends on where you are:
| Placement | Content | Collaborative | Preference |
|---|---|---|---|
| Product page | 0.45 | 0.45 | 0.10 |
| Homepage | 0.20 | 0.30 | 0.50 |
| Cart | 0.00 | 0.70 | 0.30 |
Cart drops content similarity to zero on purpose. Someone buying a laptop doesn't want a second laptop — they want the dock and the warranty. Every suggestion carries a reason, and impressions and clicks are tracked so the weights can be argued with rather than guessed at.
Variants without assumptions
Variants aren't hard-coded to size and colour. Each carries an arbitrary options object, and the dimensions a product has are derived from its data — so RAM, storage or ink configuration need a new row, not a schema migration.
Commerce mechanics
Anonymous shoppers get a real server-side cart that merges into their account on sign-up. Stock is reserved atomically at checkout, so two people racing for the last unit resolve deterministically.
Customer:
Webline Technologies Ltd.Period:
2026Performance:
Features:
Paper
Ink
Action Blue
Surface
Recommending the right thing, not the similar thing
A single similarity score gives you the same answer everywhere — and on a cart page that means offering a second laptop to someone already buying one.
Three signals are blended instead, with weights per placement. Cart sets content similarity to zero and leans on what people actually buy together; the homepage leans on the shopper's own history. Every suggestion carries a reason, and impressions and clicks are tracked so the mix can be tuned against evidence.
A catalogue that feels instant
Browsing dies on latency. Every route is a prerendered shell and the whole catalogue is generated ahead of time, so moving between products needs no API call at all.
The result is quick enough that the loading skeleton never appears — not a missing state, the intended one.
Fast and correct, not one or the other
Long cache lifetimes make a catalogue quick and wrong; short ones keep it honest and slow.
Freshness was decoupled from time. Every cached read is tagged, and an edit in the dashboard invalidates exactly what it touched — immediately — so lifetimes exist only as a backstop. Search went from 715ms to 24ms with edits still landing instantly. Where correctness truly matters, stock is re-checked atomically at order time, so a stale badge can't oversell.
Carts before customers
Demanding sign-in before an add-to-cart costs sales; discarding the cart at sign-up costs trust.
Anonymous shoppers get a real server-side cart tied to an HTTP-only session — no localStorage, one source of truth. On sign-up it merges into the account, quantities summed and capped at available stock, and a merge failure never blocks the sign-up itself.







Would you like to be featured here as well?
Feel free to use the contact form or other contact options.

