Store conversion
Navigation, search, the mobile bar and profile screens were rebuilt around product sales. The menu turned out to be database-driven, so old records were hidden and a guard was added in code as well.
A camping-gear store converted from an events platform: database-driven navigation, one shared product card and a legal layer rewritten for physical goods. 56k lines of code, 47 tables.
| Stack | React 18 + TypeScript, Vite, Tailwind CSS, Framer Motion |
|---|---|
| Backend | PostgreSQL with edge functions and row-level security |
| Codebase | ~56,000 lines · 329 files |
| Interface | 141 components · 35 pages · database-driven navigation |
| Database | 47 tables · 72 versioned migrations |
| Server functions | 17 (payments, email, image resizing, automated blog) |
| Payments | 3-D Secure cards, instalments, campaign and coupon engine |
| Media | Object storage with separate desktop/mobile crops for category banners |
| Legal | Distance selling and 14-day withdrawal flows rewritten for physical goods |
Navigation, search, the mobile bar and profile screens were rebuilt around product sales. The menu turned out to be database-driven, so old records were hidden and a guard was added in code as well.
Category tiles, deals, new arrivals and featured categories as horizontal shelves with banners, closing with a trust strip: secure payment, shipping, returns and genuine products.
A shared card with a price-brand-name hierarchy, used identically by the homepage shelves, category rows and the product grid. Add-to-basket and favourite behaviour is handled in one place.
Category banners are produced in separate desktop and mobile crops, served from object storage and overridable from the admin panel.
Privacy, terms, returns and distance selling texts were rewritten for physical-goods commerce including the 14-day withdrawal right; company title, address and contact details are fed from a single source.
Most of the problems we solved on Campmatik repeat across sectors. Tell us about yours and we will scope it together.
We load nothing beyond the cookies required for the site to work. If you let us measure which pages get attention, we can make the site better. Details