Noillin is a web-based Influencer × Brand collaboration platform that enables brands to discover influencers, book services based on availability, and complete payments securely with realtime communication and notifications.
Noillin is built to solve structured influencer–brand collaboration at scale by:
- Eliminating manual coordination and availability conflicts
- Enforcing payment-before-confirmation booking rules
- Supporting single and multi-influencer (group) gigs
- Providing realtime chat and notifications
- Maintaining a clean, scalable backend architecture with strict service boundaries
- Client sends request to NGINX (API Gateway)
- NGINX routes request to the appropriate private backend service
- Core Service handles business logic and database writes
- Redis is used for caching and booking slot locks
- Meilisearch handles fast search queries
- RabbitMQ queues async jobs
- Worker Service processes background tasks
- Realtime Service pushes events via Socket.IO
- Response flows back through NGINX to the client
Exactly three deployable backend services:
- Authentication & authorization (JWT, RBAC)
- Influencer, Brand, Admin profiles
- Gig management (single & group gigs)
- Availability rules and overrides
- Booking lifecycle
- Payment processing
- MongoDB persistence
- Redis caching & slot locking
- Meilisearch indexing
- Socket.IO server
- Realtime chat (brand ↔ influencer)
- Realtime notifications
- Redis pub/sub for horizontal scaling
- RabbitMQ consumers
- Async background jobs:
- Notifications
- Payment webhooks handling
- Search index sync
- Email / system events
No additional backend services are allowed.
- API Gateway: NGINX
- Database: MongoDB
- Cache & Locks: Redis
- Message Queue: RabbitMQ
- Search Engine: Meilisearch
- Process Manager: PM2
- CI/CD: GitHub Actions
- Monorepo Package Manager: pnpm
- All external traffic flows through NGINX
- Backend services are private (localhost only)
- NGINX handles:
- HTTPS termination
- Reverse proxy routing
- Path-based service forwarding
Example routing:
/api/*→ Core Service/socket/*→ Realtime Service
Direct access to backend services is forbidden.
noillin/
├── apps/
│ ├── core-api/ # Core/Auth Service
│ ├── realtime/ # Socket.IO Service
│ └── worker/ # Background Jobs Service
├── packages/
│ ├── config/ # Shared configs
│ ├── logger/ # Logging utilities
│ └── utils/ # Shared helpers
├── infra/
│ ├── nginx/ # NGINX config
│ └── scripts/ # Deployment scripts
├── .github/
│ └── workflows/ # GitHub Actions CI/CD
├── pnpm-workspace.yaml
├── package.json
└── README.md- Node.js (>= 20)
- pnpm (via Corepack)
- MongoDB
- Redis
- RabbitMQ
- Meilisearch
- NGINX
corepack enable
corepack prepare pnpm@latest --activate
pnpm installEach service maintains its own .env.
PORT=3000
MONGO_URI=mongodb://localhost:27017/noillin
JWT_SECRET=supersecret
REDIS_URL=redis://localhost:6379
RABBITMQ_URL=amqp://localhost
MEILI_HOST=http://localhost:7700
MEILI_API_KEY=masterKeyPORT=4000
REDIS_URL=redis://localhost:6379RABBITMQ_URL=amqp://localhost
MONGO_URI=mongodb://localhost:27017/noillin
REDIS_URL=redis://localhost:6379Start required services:
- MongoDB
- Redis
- RabbitMQ
- Meilisearch
Run backend services:
pnpm -r devStart NGINX:
sudo nginx -c /path/to/nginx.conf-
Monorepo CI using GitHub Actions
-
Workflow steps:
- Install dependencies using pnpm
- Lint, type-check, and build services
- SSH into server
- Pull latest code
- Install production dependencies
- Restart services using PM2
Each service is deployed independently but within the same repository.
- Exactly 3 backend services
- No direct public access to backend services
- All traffic must pass through NGINX
- Booking is confirmed only after payment success
- Redis must be used for booking slot locking
- RabbitMQ must handle async workloads
- MongoDB is the single source of truth
- pnpm workspace structure must remain intact
- Initial scale: thousands of users
- Redis pub/sub enables realtime horizontal scaling
- Worker Service scales independently
- Stateless backend services behind NGINX
- Search queries offloaded to Meilisearch
- Rate limiting at NGINX
- JWT validation at gateway
- Admin analytics dashboard
- Webhook-based payment retries
- Advanced availability optimization for group gigs
- Read replicas for MongoDB
- Explicit boundaries over microservice sprawl
- Predictable request flow
- Payment-first booking integrity
- Realtime where it matters, async where it scales
- Infrastructure-aware backend design
- Production-first decisions over shortcuts