Skip to content
Platform

The foundation underneath every module.

Every business is its own tenant with isolated data. Multi-currency from day one. Full audit log. Installable as a Progressive Web App.

Multi-tenant · Multi-currency · Audit log · PWA

Capabilities

What ships in the platform layer.

The cross-cutting concerns most accounting tools treat as enterprise upsells — built into TwinBooks for every plan.

Multi-tenant by default

Every business runs as its own Client with isolated data — no cross-tenant leakage, enforced at the data layer.

Multi-currency

Currency per client (USD, EUR, etc.) flows through every dashboard, invoice, bill, and report. Switch businesses without signing out.

Role-based access

Owner, Admin, Accountant — plus per-module fine-grained controls. Multiple users per business with the right permissions.

Audit log

Every create, update, and delete is recorded with who, what, when, and the resource it touched. Sensitive fields redacted.

Subscription billing on Stripe

Monthly and annual plans, Basic / Premium / Enterprise tiers, hosted payment intents, idempotent webhooks. Failed signals don't double-charge.

Progressive Web App

Installs to the home screen on iOS and Android. Service worker caches the shell so repeat opens are instant.

Architecture

Multi-tenant from day one

Every business in TwinBooks runs as its own Client with isolated data. There's no shared customer table that could accidentally leak records between tenants — isolation is enforced at the data layer, not at the application layer where it's easy to slip up.

If you have access to multiple businesses (say, you're the owner of two companies, or an accountant managing several clients), you can switch between them without signing out. Each switch loads only the records you have access to in that tenant — users, customers, invoices, banks, everything.

Roles ship in three flavors: Owner, Admin, and Accountant, with per-module fine-grained controls layered on top. Read-only accountant access is a single click.

Trust the record

Audit log

Every create, update, and delete is captured in the audit log with who, what, when, and the resource it touched. The full body is captured (with sensitive fields like passwords and tokens redacted) so you can answer “what changed and when” without guessing.

That's the difference between an answer and a hunch when an auditor asks why a $4,200 deposit was reapplied to a different invoice three months later.

Mobile-ready

Installable as a PWA

TwinBooks installs to your phone's home screen with no app store, no install friction, and no review delay:

  • One-tap install on iOS Safari and Android Chrome. Full-screen, branded, looks native.
  • Instant repeat opens thanks to a service worker that caches your shell, fonts, icons, and translations.
  • Offline-resilient. Pages you've already visited still load without a signal; new pages show a graceful offline notice.
  • Same codebase as the web app. Every fix and feature ships everywhere at once.
  • Tenant-safe. Bank data, customer records, and payroll responses are never cached on shared devices.

Security & reliability

Built on a foundation you can trust

  • Locked-down API with helmet headers, CORS allowlist, and tiered rate limiting on auth endpoints
  • Schema-validated requests — typed payloads checked before they touch the database
  • Idempotent integrations — Stripe webhooks, Plaid sync, Gusto syncs, and seed data all safe to re-run
  • 169 automated tests covering authentication, RBAC, every CRUD module, payment workflows, audit logging, and Stripe webhook signature verification
  • Bank-grade Plaid integration with read-only tokens — TwinBooks never sees your banking password
  • SOC 2 partner ecosystem — Plaid, Gusto, and Stripe all carry their own SOC 2 Type II attestations

At a glance

What ships in the platform layer

  • Multi-tenant data isolation enforced at the data layer
  • Multiple users per Client with role-based permissions
  • Switch between businesses without signing out
  • Multi-currency per client (USD, EUR, MXN, etc.)
  • Audit log of every create, update, and delete
  • Stripe-powered subscription billing (monthly + annual)
  • Idempotent Stripe webhooks — no double-charge or double-cancel
  • Internationalization — English, Spanish, French
  • Installable as a Progressive Web App (iOS + Android)
  • Service-worker caching for instant repeat opens
  • Helmet headers + CORS allowlist + rate limiting
  • 169 automated tests across auth, RBAC, CRUD, payments, webhooks

Try the whole stack.

45-day free trial. No credit card. Plaid, Gusto, and Stripe ready to connect on day one.