Security
What protects your books, and what does not yet
The honest list, in the same words as the project's own security file. Reviewed 21 July 2026.
✅ In place today
- Walled-off data. Every organization's data is isolated by Postgres row-level security, enforced by the database itself, not only by application code. Inside an organization, each entity is isolated the same way, one level narrower.
- An audit trail nobody can edit. Changes to key records are written to an append-only audit log. The database rejects any update or delete against it, so a logged entry can never be edited or removed after the fact.
- Passwords are hashed with bcrypt, never stored in plain text. Sign in with Google is available too.
- HTTPS only. The website and the app are served over an encrypted connection with a valid certificate; browsers are told to never use plain HTTP here.
- Login protection. Repeated failed sign-in attempts are slowed down, and an email tells you when your account is used from a new device.
- Your data, your decision. You can permanently delete your own account and all its data from Settings.
- Least privilege on the server. The app runs as its own small system user, not as the server's administrator.
⚠️ Known gaps
- Encryption at rest. The production database runs on the app server's own disk, which has no operating-system-level disk encryption. Whether the hosting provider encrypts the underlying physical storage has not been confirmed. The straightforward fix is a managed database service with an explicit encryption-at-rest guarantee.
- No formal incident-response drill. The process below is written but has not been run as a practice exercise.
- No SOC 2 or ISO 27001 certification. Not pursued; these matter when a customer or partner requires one.
If something goes wrong
- Contain. A compromised credential or key is rotated immediately; a compromised server process is stopped before anyone investigates.
- Assess. What data could have been read or changed, for which organizations and entities, using the audit log that cannot have been tampered with.
- Fix the root cause before reopening access.
- Notify affected users if their data was actually exposed: what happened, what data, what was done. An early "we are aware and investigating" beats silence.
- Write it down afterwards: what happened, root cause, what changed to prevent a repeat.
Report a security problem
Email nikhil.joshi@techwomb.com with steps to reproduce. Please do not test against real customer data. The same address is published in the site's security.txt file (/.well-known/security.txt).