Architecture
High-level
┌──────────────────────────────┐
│ Customer browser │
└──────────────┬───────────────┘
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ Marketplace │ │ Branded storefront │ │ Donations / │
│ Next.js │ │ Next.js (Type 2) │ │ Modules pages │
│ sellub.com │ │ custom domain │ │ Type 4 │
└────────┬────────┘ └──────────┬──────────┘ └────────┬────────┘
│ │ │
└────────────┬──────────┴────────────┬──────────┘
▼ ▼
┌────────────────────────────────────────┐
│ Vendure GraphQL APIs │
│ Shop API ──── Admin API │
└─────────────────┬──────────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ PostgreSQL │ │ Redis │ │ Paystack / │
│ (data) │ │ (jobs+cache) │ │ Email / Search │
└──────────────┘ └──────────────┘ └──────────────────┘
▲
│
┌──────────────────┐
│ Dashboard UI │
│ (React/Vendure) │
│ dashboard.sellub │
└──────────────────┘Channels & multi-tenancy
Each seller’s storefront is a separate Channel in Vendure. See Multi-tenancy for details.
Apps in the repo
| App | Path | Purpose |
|---|---|---|
sellub-server | apps/sellub/sellub-server | Vendure backend |
sellub-dashboard | apps/sellub/sellub-dashboard | Customised admin UI |
sellub-storefront | apps/sellub/sellub-storefront | Next.js storefront template |
sellub-docs | apps/sellub-docs | This Nextra docs site |
Key extensions
The server is mostly stock Vendure plus these custom plugins (under sellub-server/src/plugins):
- SellerApplicationPlugin — application form, review workflow, conversion to seller account.
- PaystackPaymentPlugin — Paystack integration for cards, MoMo, bank.
- SellerWalletPlugin — wallet ledger, withdrawals, adjustments.
- MultiChannelOnboardingPlugin — provisions a new channel + admin on seller approval.
- EasyModePlugin — alternative simplified UI shell.
- DomainVerificationPlugin — DNS check + cert issuance for Type 2 custom domains.
See each plugin’s README for details.