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, validators sit at the route boundary so no controller ever sees an unchecked body, 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, and all data fetching runs through a single layer that handles sessions and errors in one place. To the people using it, the platform feels like a single product.
