A monorepo that lets two teams ship without breaking each other.
A two-sided freelance marketplace platform built as a Turborepo monorepo — a structured codebase that lets the api and web teams ship independently without breaking each other.
- Role
- Full-Stack Developer (api + web workspaces)
- Stack
- TurborepoTypeScriptNode 20+npm 10 workspaces
- Tags
- MarketplaceMonorepoTwo-sided platformPlatform engineering
- Live
- corelance.com
Context
Corelance is building a marketplace where independent developers and clients connect on real production projects. As soon as the team had two surfaces (REST API + Next.js web client) they hit the classic monorepo-or-polyrepo decision point. Polyrepo would have meant version drift on shared types. A flat repo would have meant slow CI and cross-talk between unrelated changes.
Approach
Structured the entire platform as a Turborepo monorepo with apps/api and apps/web as workspaces, plus shared packages/* for type definitions and utilities so the API contract is checked at compile time on both sides. CI runs build/lint/test across the workspace boundaries so API breakage surfaces in PR review, not in production. npm 10 with workspace dependencies and explicit version-pinning where it matters (express types, etc.) prevents drift. Node 20 minimum for top-level await and stable native test support.
Outcome
The team can ship API and web changes independently, but a breaking change to a shared type fails CI immediately. Onboarding a new contributor takes minutes — clone, npm install, run npm run dev from any workspace. The monorepo pays for itself the first time someone tries to rename a shared interface.
What it does
- 01Single-repo, two-app architecture (api + web) with shared type packages enforced via Turborepo workspace boundaries
- 02CI runs turbo build/lint/test with per-workspace caching — only affected workspaces re-run
- 03Onboarding from clone to running dev server in minutes; shared-type renames fail loudly at CI, not at runtime
Tell us what you’re working on.
We’re happy to talk through what we learned on this project and whether we’re the right partner for yours.