1. Monorepo আসলে কী?
Monorepo (Monolithic Repository) মানে হলো একটা single Git repository-তে অনেকগুলো project / service / app একসাথে রাখা। অন্যদিকে Polyrepo মানে হলো প্রতিটা service বা app আলাদা repository-তে রাখা।
Analogy: ধরুন একটা কোম্পানির ভেতরে অনেক ডিপার্টমেন্ট আছে → HR, Sales, Marketing, IT.
- যদি প্রতিটা ডিপার্টমেন্ট আলাদা আলাদা বিল্ডিং-এ থাকে → Polyrepo.
- যদি সব ডিপার্টমেন্ট একটা বড় বিল্ডিং-এর ভেতরে থাকে, কিন্তু আলাদা ফ্লোরে ভাগ করা → Monorepo.
2. Monorepo কেন দরকার?
- সবকিছু একই repo-তে থাকায় → সহজে manage, develop, test, deploy করা যায়।
- Shared code (utils, types, constants, config ইত্যাদি) সহজে reuse করা যায়।
- CI/CD pipeline এক জায়গা থেকে run করা যায়।
- Dependency management সহজ হয় (যেমন একই eslint config সব জায়গায়)।
- Cross-team collaboration সহজ হয়।
3.Example: Trip Booking CMS
ধরি আপনি একটা বড় SaaS বানাচ্ছো:
-
Frontend Apps
admin-dashboard→ Super Admin manage করবেsaas-landing-page→ আপনি SaaS এর main websiteb2b-site→ প্রতিটা company (agency) এর booking siteb2b-dashboard→ Agency (B2B client) এর backend dashboardb2c-dashboard→ End user / traveler এর booking panel
-
Backend
auth-service(NestJS) → Login, JWT, OAuth ইত্যাদিbooking-service(NestJS) → Flight, Hotel booking logicpayment-service(NestJS + Stripe)notification-service(NestJS + Mail/SMS/Push)
-
Shared Packages (Libraries)
ui→ Common React/Tailwind UI components (button, modal, form ইত্যাদি)utils→ Helper functions (date formatting, validation)types→ Shared TypeScript interfaces/typesconfig→ ESLint, Prettier, Tailwind config
👉 এগুলো সবকিছু এক repo-র ভেতরে থাকবে।
4. Folder Structure (Practical Example)
trip-booking-cms/
│
├── apps/ # Main applications
│ ├── admin-dashboard/ # Next.js / React
│ ├── saas-landing-page/ # Next.js / React
│ ├── b2b-site/ # Next.js / React
│ ├── b2b-dashboard/ # Next.js / React
│ ├── b2c-dashboard/ # Next.js / React
│ └── backend/ # NestJS microservices
│ ├── auth-service/
│ ├── booking-service/
│ ├── payment-service/
│ └── notification-service/
│
├── packages/ # Shared reusable code
│ ├── ui/ # UI Components
│ ├── utils/ # Helper functions
│ ├── types/ # TypeScript types/interfaces
│ └── config/ # Shared config (eslint, prettier)
│
├── turbo.json # Turborepo config
├── package.json # Root dependencies (dev tools)
└── tsconfig.json # Base TS config5. Microservice Approach (NestJS)
আপনি backend টা NestJS দিয়ে microservices আকারে ভাগ করবেন:
-
প্রতিটা service (auth, booking, payment, notification) self-contained হবে।
-
আলাদা আলাদা NestJS project হবে, কিন্তু সব একই repo-র ভেতরে।
-
একে অপরের সাথে কথা বলবে message broker (RabbitMQ, Kafka) বা REST/gRPC দিয়ে।
-
Example:
- User login করলে →
auth-serviceJWT issue করবে - User booking করলে →
booking-servicepayment initiate করবে →payment-service - Payment success হলে →
notification-serviceuser কে email/SMS পাঠাবে
- User login করলে →
6. Dependency Management
Shared dependencies
- Root
package.json-এ রাখেন → eslint, prettier, turbo, typescript ইত্যাদি।
Service-specific dependencies
-
প্রতিটা app/service এর আলাদা
package.jsonথাকবে।- যেমন
auth-service-এ থাকবে@nestjs/jwt, কিন্তুpayment-service-এ থাকবেstripe।
- যেমন
-
যদি common dependency লাগে (যেমন
axios,class-validator), সেটাpackages/utilsথেকে share করতে পারো।
Example:
apps/backend/auth-service/package.json
apps/backend/payment-service/package.json7. Tools for Monorepo
1. Turborepo (Best for JS/TS projects)
- Vercel এর বানানো tool।
- Fast build, caching, parallel execution।
- Example: একবার
uibuild করলে → cache করে রাখে, আবার build করতে হয় না। - Config ফাইল:
turbo.json
2. Nx
- আরেকটা powerful monorepo tool।
- NestJS এর সাথে অনেক ভালো integration আছে।
- More strict but feature rich.
3. Lerna
- Old কিন্তু popular।
- Mostly package publishing এর জন্য ভালো।
- Nowadays Turborepo/Nx বেশি ব্যবহার হয়।
8. Turborepo Example Config
turbo.json
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**"]
},
"lint": {},
"dev": {
"cache": false
}
}
}build→ সব app build করবেlint→ ESLint run করবেdev→ local dev mode
9. Workflow (Developer Experience)
-
আপনি যখন
apps/admin-dashboard-এ কাজ করবেন → শুধু ওই app run করতে পারবেcd apps/admin-dashboard npm run dev -
Shared
uipackage এ কোনো component change করলে → সব app automatically আপডেট পাবে। -
Turborepo caching এর কারণে build/test super fast হবে।
-
CI/CD pipeline থেকে আপনি আলাদা আলাদা app deploy করতে পারবে।
10. Final Takeaway
- Monorepo = এক repo-তে সবকিছু → easy management, code sharing, CI/CD simplification।
- Trip Booking CMS Example = apps + backend microservices + shared packages।
- Dependencies → root dev tools + service specific local
package.json। - Tools → Turborepo (Next.js friendly), Nx (NestJS friendly)।
- Microservice Approach → প্রতিটা NestJS service independent, communication via API or broker।