How RxPortal is built.
An engineering note, in plain language: what protects the prescriptions and patient details your pharmacy keeps in RxPortal, and what stays your responsibility.
Signing in
- Two-step sign-in is available. Every account can add a passkey or an authenticator app as a second step.
- Passwords stored safely. Hashed with Argon2id, then encrypted.
- Guessing is slowed down. Repeated failed sign-in attempts are limited.
- Sessions end. You are signed out after 15 minutes without activity, with a warning first, and after 12 hours in any case.
- Staff permissions. Pharmacy admins choose which staff can manage the catalog, approve prescribers or export dispensing records.
Each pharmacy kept apart
- Enforced in the database. Every request on a pharmacy’s portal runs with that pharmacy’s access, and PostgreSQL row-level security enforces it in the database itself, not only in the application.
- One address per pharmacy. Sign-in cookies work only on the pharmacy’s own address and can’t be read by scripts in the page.
Protecting the record
- Sensitive fields encrypted. Prescription contents, patient dates of birth, contact details, addresses and allergies, messages and notes, DEA numbers and authenticator secrets are encrypted in the database, with a key kept outside it.
- Signatures tied to content. Signing records the prescriber’s typed name, the time and a fingerprint of exactly what was signed. Any change afterwards clears the signature.
- An audit log the app can’t edit. Sign-ins, account changes, prescriber approvals, catalog changes, order activity, and dispensing searches and exports are recorded. A database rule blocks the application from changing or deleting entries.
- Email without patient details. Email delivery isn’t switched on during the pilot. When it is, notification emails say there is an update and ask you to sign in. They never include patient, order or drug details.
Infrastructure
- HTTPS only. Every connection is encrypted, and plain HTTP is redirected to HTTPS.
- A private database. The database has no public address and sits on a private network.
- Encrypted nightly backups. Backups run every night, are encrypted, and are kept on our server for 14 days. The key to decrypt them is stored separately.
- A strict content policy. Pages load scripts only from RxPortal itself. There are no analytics, ad or tracking scripts.
What we don’t claim
No system is perfectly secure, and we don’t claim RxPortal is.
RxPortal is designed to support your HIPAA program; it doesn’t replace it. Your pharmacy keeps its own obligations: who gets an account, the devices your staff use, and your policies. Ask us about a business associate agreement and how RxPortal fits your compliance program.
Write to [email protected].