backend/
server.js               # entry: dotenv → app → connectDB → listen + graceful shutdown
app.js                 # Express core: security middleware + routers + 404 + errorHandler
config/
├─ index.js            # Joi-validated env loader (throws on missing/bad vars)
└─ db.js               # Mongoose connection (pooled, timeout, reconnect events)
seed-admin.js          # creates/promotes the admin account
src/
├─ controllers/        # auth, user, admin request handlers
├─ middleware/         # errorHandler.js
├─ models/             # User.js, Token.js (refresh tokens), index.js
├─ routes/             # authRoutes.js, userRoutes.js, adminRoutes.js
├─ services/           # business logic: authService, emailService, userService, adminService
└─ utils/              # jwtToken, logger (pino), response helpers, errors, catchAsync
utils/                 # shared utilities: schemas (Joi), auth + validation middleware, jwtToken

trust proxy
helmet
cors
Logging
Rate limiters
Body parsing
cookie-parser
compression
Data hygiene
Timeouts
Errors

backend
pnpm test       # Jest suite (272 tests) with coverage
test:watch       # re-run on file changes
pnpm lint        # ESLint (eslint 9 flat config)
pnpm lint:fix
pnpm format      # Prettier