How kishorekola19/outbox-lab-assignment works
ReachInbox is a full-stack email scheduling and lead-outreach platform. Users authenticate, prepare recipient lists, compose campaigns, and send immediately or schedule delivery; they can then review/search email status, connect Slack, and monitor queues. Scheduled campaigns persist in PostgreSQL and dispatch through BullMQ/Redis workers, with rate limiting, idempotency, Slack alerts, and Elasticsearch search. The README documents these capabilities; the sampled source confirms key controller, worker, auth, search, and integration behavior, but not every frontend/API or dispatch connection.
Main entry points: emailWorker.ts Email worker · App.tsx ReachInbox UI · db.ts PostgreSQL · server.ts Express server
Components 25
Web client
- ReachInbox UI
frontend/src/App.tsx - Compose campaigns
frontend/src/pages/ComposePage.tsx - Scheduled and sent
frontend/src/pages/ScheduledPage.tsx - Email details
frontend/src/pages/EmailDetailPage.tsx - Slack settings
frontend/src/pages/SlackSettingsPage.tsx - Queue dashboard
frontend/src/pages/QueueAdminPage.tsx
API and identity
- Express server
backend/src/server.ts - Auth routes
backend/src/routes/authRoutes.ts - Auth handlers
backend/src/controllers/authController.ts - Identity service
backend/src/auth/authService.ts - Email routes
backend/src/routes/emailRoutes.ts - Campaign handlers
backend/src/controllers/emailController.ts - Slack routes
backend/src/routes/slackRoutes.ts - Slack handlers
backend/src/controllers/slackController.ts
Campaign delivery
- PostgreSQL
backend/src/config/db.ts - BullMQ queue
backend/src/queues/emailQueue.ts - Redis
backend/src/config/redis.ts - Email worker
backend/src/workers/emailWorker.ts - Unified dispatch
backend/src/services/unifiedEmailService.ts
Search and integrations
- Gmail OAuth and send
backend/src/services/gmailService.ts - Slack integration
backend/src/slack/slackService.ts - Email search index
backend/src/elasticsearch/client.ts
Other components
- Campaign user
- Google Gmail API
- Slack
Connections 36
- Campaign user → ReachInbox UI: uses
- ReachInbox UI → Compose campaigns: opens
- ReachInbox UI → Scheduled and sent: opens
- ReachInbox UI → Email details: opens
- ReachInbox UI → Slack settings: opens
- ReachInbox UI → Queue dashboard: opens
- ReachInbox UI → Express server: REST requests
- Express server → Auth routes: mounts
- Express server → Email routes: mounts
- Express server → Slack routes: mounts
- Express server → Email worker: starts
- Auth routes → Auth handlers: dispatches
- Auth handlers → Identity service: verifies identity
- Identity service → PostgreSQL: upserts users
- Auth handlers → PostgreSQL: reads connections
- Email routes → Campaign handlers: dispatches
- Campaign handlers → PostgreSQL: stores campaigns
- Campaign handlers → BullMQ queue: enqueues jobs
- Campaign handlers → Unified dispatch: dispatches now
- Campaign handlers → Email search index: indexes and searches
- BullMQ queue → Email worker: delivers jobs
- Email worker → PostgreSQL: checks and updates
- Email worker → Redis: checks rate limits
- Email worker → BullMQ queue: reschedules jobs
- Email worker → Unified dispatch: dispatches messages
- Email worker → Slack integration: alerts on limits
- Email worker → Email search index: indexes sent mail
- Unified dispatch → Gmail OAuth and send: uses Gmail delivery
- Gmail OAuth and send → PostgreSQL: reads credentials
- Gmail OAuth and send → Google Gmail API: sends mail
- Slack routes → Slack handlers: dispatches
- Slack handlers → Slack integration: exchanges OAuth
- Slack handlers → PostgreSQL: reads and updates
- Slack integration → PostgreSQL: stores connection
- Slack integration → Slack: posts alerts
- Email search index → PostgreSQL: fallback search