backend/
backend/
Express API plus the socket server, in one process.
One Node process serves HTTP and realtime together: index.js mounts the
route modules, starts the socket server on the same HTTP server, and listens.
Everything protected goes through the auth guard; uploads branch into
Multer before reaching their controllers.
What it owns
- The REST API: eight route modules under /api
- The realtime server: rooms, chat, typing, presence, live pushes
- Mongoose models and the MongoDB connection
- Upload handling: Multer with Cloudinary or local fallback
Files
File list and purposes from the folder README.
| File | Purpose |
|---|---|
index.js | Entry point — app, routes, socket, listen. |
config/ | Database, Redis, and Cloudinary setup. |
routes/ | One Express router per area. |
controllers/ | Request handling, one module per area. |
models/ | Six Mongoose schemas. |
middleware/ | Auth guard, rate limits, upload handling. |
utils/ | The Socket.io server. |
Dependencies
| Library | Version range | Why it is used here |
|---|---|---|
| dotenv | ^16.5.0 | First line of index.js. |
| Socket.io Redis adapter | ^8.3.0 | Attached to the io server in utils/socket.js when pub/sub are ready. |
| ioredis | ^5.11.1 | Presence hash plus the pub/sub pair in config/redis.js. |
| Socket.io | ^4.7.4 | Server, rooms, and event handlers in utils/socket.js. |
| cookie-parser | ^1.4.7 | Cookie parsing in index.js, read by authMiddleware. |
| cors | ^2.8.5 | Permissive CORS in index.js and utils/socket.js. |
| Express | ^5.1.0 | App, router mounting, and static uploads in index.js. |
| express-rate-limit | ^8.5.2 | Auth, connection, search, post, and job limiters in middleware/rateLimiter.js. |
| Mongoose | ^8.14.1 | All six models plus the database.js connector. |
| Cloudinary | ^1.41.3 | Configuration in config/cloudinary.js; upload targets in middleware/upload.js. |
| Multer | ^2.0.1 | Avatar, post, cover, and document uploaders in middleware/upload.js. |
| multer-storage-cloudinary | ^4.0.0 | Cloud storage engines in middleware/upload.js. |
| Nodemailer | ^9.0.3 | Admin plus confirmation mails in contactController.js. |
| bcryptjs | ^2.4.3 | Pre-save hash and password check in models/User.js. |
| better-authDeclared but not used in source | ^1.6.23 | Declared in both manifests but never imported in any source file; authentication is JWT plus bcrypt. |
| jsonwebtoken | ^9.0.2 | Token issue in userController and authController; verified in authMiddleware. |
| validator | ^13.11.0 | Field validation in models/User.js. |
Dependencies as of commit cdef8af.
Laying out Backend overview…
BrowserAPIRealtimeCacheDatabaseShareddurableephemeral
Talks to
Sources: backend/index.js, backend/README.md (documented at commit cdef8af)