Cartobol
A B2B storefront and back office for machinery spare parts.
Cartobol sells machinery spare parts to other businesses, which makes the “boring” parts the hard parts: catalogue integrity, pricing and shipping math, and an admin surface that a non-technical team can actually run.
One monorepo, cleanly layered
The whole thing is one Turborepo monorepo — an Express 5 API written in ESM and a React SPA on Vite. The API is deliberately layered: routers are split by audience, controllers stay thin and pass errors on, and services hold every database query and business rule. Cross-cutting work — pricing, shipping, catalogue mapping and media handling — lives in dedicated helpers rather than being smeared across controllers. Failures are held to the same discipline: a single layer turns every kind of error — validation, database, payment — into one consistent response shape, so the client only ever has one error format to handle.
Behaving like one product
On the front, routes are lazy-loaded and split by access level behind guards, and data fetching runs through a single layer that quietly renews an expired session and replays the request. The result is a platform that behaves like one product even though it’s assembled from clearly separated planes.
