Skip to main content

Service map

pdf-lib (PDF generation) and adm-zip (archive creation) run in-process and are not external services.

Hosted infrastructure

Cloudflare R2 (file storage)

Stores uploaded files: employee size profile CSVs, order documents, and bulk import files.
  • Accessed through @aws-sdk/client-s3 against R2’s S3-compatible API
  • Credentials in R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAME
  • No CDN or public access; all file access goes through the backend API
  • No file size limits at the R2 level; the 20MB Express body limit is the practical ceiling
  • No lifecycle policies; uploaded files persist indefinitely

Brevo (email delivery)

Delivers transactional email: staff invitations, password resets, order notifications.
  • The EmailService in backend/src/notifications/email.service.ts handles all sending
  • Production uses Brevo’s HTTPS REST API (BREVO_API_KEY + BREVO_SENDER_EMAIL); development falls back to nodemailer SMTP (e.g. Gmail)
  • Brevo works on Render free because it uses HTTPS, not SMTP ports (25/465/587 are blocked on Render free)
  • Requires authorizing Render’s egress IP in Brevo’s authorized-IP list
  • Templates are defined in code; every attempt is recorded in the EmailLog table
  • No email queue; emails are sent during the request cycle (failures logged, never blocking)
  • No delivery-status webhooks and no unsubscribe mechanism (transactional email only)

In-process libraries

What MUZE does not integrate with