Security

Specific, not "bank-grade."

Financial data deserves a precise answer to "how is this protected," not a marketing phrase. Here's exactly what's in place.

Passwords

Hashed with PBKDF2-SHA256 at 210,000 iterations using the runtime's native WebCrypto implementation — never stored, logged, or transmitted in plain text.

Sessions

Session tokens are hashed before they're written to the database, so a database read alone is never enough to impersonate a signed-in user. Cookies are httpOnly, Secure, and SameSite=Lax.

Multi-tenancy

Every tenant-scoped table carries an organization_id, and every query is scoped to it through shared middleware — one organization's data is structurally unreachable from another's session.

Audit trail

Every mutating request is logged, and sensitive edits — account changes, journal reversals, voids — additionally log the specific before/after field values, not just that a change happened.

Permissions

Role defaults (owner, admin, member, viewer) can be overridden per member and per module, so a bookkeeper can get exactly accounting access without touching payroll.

Immutable ledger

Journal entries are never edited or deleted after posting. Corrections post as reversing entries, so the history of what actually happened is never rewritten.

Infrastructure runs on Cloudflare's edge network and D1 database. If you have a specific question we haven't answered here — a compliance requirement, a data-residency question, anything — the most useful thing you can do is ask us directly rather than guess from a page like this one.