One Bite Candy
Confectionery e-commerce: catalogue, cart, stop-desk and home delivery with live courier tracking, plus a full admin back office.
- My Role
- Full Stack Developer
- Timeline
- Jun 2026 — Aug 2026
- Status
- Shipped

One Bite Candy is the online storefront of a confectionery brand, running in production at onebitecandy.com. Customers browse the sweets catalogue, build a cart, and place cash-on-delivery orders, choosing between home delivery and pickup at one of the courier's stop-desks — the pickup offices Ecotrack operates, one per commune.
Under the hood it is a TypeScript codebase end to end: a Next.js storefront and admin back office over a Node.js API and a PostgreSQL database. Product media is stored on Cloudflare R2, every business entity follows a soft-delete convention, and the platform ships to a production box through a CI/CD pipeline.
The problem to solve
Ecotrack's delivery network is organised around stop-desks, where each desk corresponds to a commune — and a checkout that offers a stale desk list, or a free-text pickup field, produces orders the courier cannot fulfil. Because everything is paid cash on delivery, a failed handover means no payment is collected at all. The real problem was modelling the courier's desk geography inside the platform and keeping it in sync, so the checkout only ever offers pickup points that actually exist.

How it was built
The platform keeps its own desks table synced from Ecotrack and drives the checkout's stop-desk picker directly from it: a customer picks their commune and gets the desk the courier actually operates there, with home delivery as the alternative. Once an order ships, its courier status is tracked live through the same integration.
Around that core, the admin back office manages products and orders; product media is offloaded to Cloudflare R2 instead of the application server; and every business entity uses soft-delete, so removing a product never breaks the order history that references it. The whole system runs on a production box with deploys handled by a CI/CD pipeline.
What it does
Catalogue and cart
Customers browse the confectionery range and build a multi-item cart before heading to checkout.
Cash-on-delivery checkout
Orders are placed without any online payment; the customer pays the courier in cash when the parcel is handed over.
Stop-desk picker
A desks table synced from Ecotrack feeds the checkout picker, with each desk mapped to a commune, so customers only select pickup points the courier actually operates.
Live courier tracking
Shipments run through the Ecotrack integration, and each order's delivery status can be followed live.
Admin back office
A dedicated admin interface manages the product catalogue and the order pipeline end to end.
Soft-delete data model
No business entity is ever hard-deleted: records are flagged instead, so order history stays intact when products leave the shelf.

A closer look

Built with
Frontend
Next.js server-renders the catalogue and product pages so they load fast and stay crawlable, while the storefront and admin back office share one React codebase.
TypeScript types the full path from checkout payload to courier API call, so mismatches with Ecotrack's data shapes surface at compile time instead of on a live order.
Tailwind styles the storefront and the admin from one shared utility vocabulary, which keeps iteration quick and the look consistent across both surfaces.
Backend
The Node.js API carries the order pipeline and the Ecotrack calls — desk syncing and shipment creation are I/O-bound work that suits its async model, in the same language as the front end.
Data
PostgreSQL keeps products, orders and the synced desks table under real relational constraints, and makes the soft-delete convention — flag the row, never DELETE it — straightforward to enforce across every business entity.