Docs · Technical

Architecture

How ERPSav is built: engines, tenancy, data and jobs.

Overview

  • Next.js application server and PostgreSQL, on servers in the EU behind Cloudflare.
  • Every table carries the workspace id and every query filters on it; records from other workspaces answer 404.
  • Each recovery module is a pure engine: a parser that turns a CSV into rows and a rule set that turns rows into cases. Engines do no I/O, take today's date as input and work in integer minor units, so results are reproducible and unit-tested.
  • The platform layer owns storage, deduplication, workflow, fees, statements, letters and notifications for every module the same way.

Background jobs

JobFrequencyWhat it does
Mail queueEvery 5 minutesSends queued email with retries and back-off.
ConnectorsEvery 5 minutesSyncs connections that are due, a few at a time.
Email-inEvery 5 minutesReads new messages to import addresses.
RemindersEvery 5 minutesDeadline nudges, morning pipeline digest, lifecycle emails, each sent once per window.
HousekeepingEvery 5 minutesExpired sessions and orphaned files are removed.

Email

Mail is sent from erpsav.com with SPF, DKIM and DMARC. Optional emails carry a one-click unsubscribe; account and billing emails always send.