Ethereal EBS
A multi-tenant enterprise business suite with a real double-entry ledger underneath it and a cross-company wholesale market wired in.


The public Ethereal EBS site, captured from the live page. No customer records appear in this view.
An enterprise business suite for companies that had outgrown a spreadsheet and a general-purpose CRM. An earlier codebase had accreted to the point where changing one part broke another, so the engines that were provably correct — ledger, receivables, payables, costing, tax, tenant isolation — were ported forward and everything around them was rebuilt clean.
The operational problemOperations were split across systems that disagreed with each other, and a spreadsheet settled the argument. Nothing enforced that the books balanced, and nothing stopped one company's records from being visible to another on shared infrastructure.
What was delivered- A platform kernel that treats tenancy as a primitive rather than a filter applied later: every repository call is scoped, and a cross-tenant read returns a 404 rather than a row.
- A double-entry general ledger that refuses an unbalanced journal, freezes a journal once posted, mirrors a reversal instead of editing history, and proves debits equal credits on the trial balance.
- Order-to-cash and procure-to-pay closed end to end: quotations, orders, invoices and receivables on one side; vendors, purchase orders, bills, debit memos and vendor returns on the other, all posting through the ledger.
- Eight working areas — dashboard, pipeline, purchase, accounting, sales team, marketing, reports and settings — with the first accounting report, the trial balance, tied out against a live posted invoice.
- A cross-tenant wholesale network: companies list what they are selling, express interest, and are matched, with staff-tier membership management deciding who can act on behalf of a company.
- Transactional email built against Postmark, queued to an outbox table until a sending domain is verified rather than dropped.
- nginx reverse proxy in front of the application, with rate limiting keyed on the real client address.
- SQLite via better-sqlite3 on Node 22, deployed to a single server the operator controls.
- 858 of 858 automated tests passing at the wholesale-network milestone, from 35 at the first domain wave and 477 at the trial-balance tie-out.
- A red-team pass specifically hunting cross-tenant leakage came back clean.
- The trial balance was tied out live against a real posted invoice rather than a fixture.
- A reversal-netting defect was caught by the build orchestration and fixed before it reached the ledger's users: a reversal now nets to zero on the trial balance.
- Outbound email has not been sent end to end. It is built and it queues, and it stays queued until a sending domain is verified.
- No public HTTPS cutover metrics exist yet; the go-live runbook for TLS and email is written but has not been executed against production volume.
Platform, backend and application engineering; deployment and operations.
No consulting engagement on this one — it was delivered by the engineering arm directly for the client.
What this engagement draws on.
SOPHIA XT is the engineering arm of 3 Point Forward.
3 Point Forward
3 Point Forward does the business work: diagnosing what is actually wrong with an operation, planning the implementation, applied-AI consulting, training the staff who will run it, and managing the engagement.
SOPHIA XT, the engineering arm
SOPHIA XT does the engineering: custom business software, integrations, AI engineering, developer tooling and the research underneath it.
One company, two jobs. 3 Point Forward defines the operational problem and the implementation plan; SOPHIA XT builds what the plan needs. A company that already knows what it wants built can go straight to SOPHIA XT, and a company that needs the problem defined first should start at 3 Point Forward. Either door reaches the same team.
Something like this, for your operation?
Start with the assessment if the problem is not pinned down yet, or book a consultation if it is.