Cargease Back to Security

Security policies

Adopted 23 September 2026 · Revised 25 September 2026

Owner of all three policies: Gonzalo Palazuelos, operator of Cargease. Each is reviewed at least once a year, and whenever the system or a provider changes in a way that makes a line untrue.

1. Backup and recovery

What is protected, and how

DatabaseManaged PostgreSQL (Neon) with continuous point-in-time restore covering the last 7 days. Any moment in that window can be recovered.
DocumentsObject storage (Cloudflare R2). Files are never overwritten: every upload is stored under a new, unique name. A file deleted in the application is not destroyed. It is moved to a holding area and kept for 7 days, then removed automatically. The 7 days match the database window, so a document deleted by mistake can be recovered in full, both its record and its file.

Every night, each document is also copied to a separate backup bucket. The application's storage credentials cannot reach it, and a lock rule refuses to delete anything in it until it is 30 days old. Removing that rule requires signing in to the storage provider's account, which is protected by multi-factor authentication. When a document is deleted, its backup copy is removed automatically about 30 days later, and never more than 35.
ApplicationEvery deployed version is retained by the hosting platform (Vercel) and can be put back into production in about two minutes. Source code is held in version control (GitHub).
ConfigurationProduction secrets are held as environment secrets in the hosting platform. They can be reissued by each provider if lost.

How a restore is done

  1. A new copy of the database is created from the chosen point in time. Production is never restored in place, so the decision to switch is taken after checking the copy.
  2. The copy is checked against production table by table (row counts and the most recent change in each table) and confirmed to still carry every tenant-isolation policy.
  3. The application is run against the copy and signed in to, to confirm the data is usable and not just present.
  4. Only then is the recovered data brought back into production, and the copy is deleted.

Testing

Last tested 23 September 2026: a point-in-time copy was created, verified row for row against production, and signed in to through the application. End to end it took about 20 minutes. The restore is rehearsed again at least every six months, and after any change to the database provider or plan.

Limits

2. Incident response

How an incident is noticed

External monitoring
An independent service checks every 15 minutes that the application is up and can reach its database, and alerts the operator's phone when it cannot.
Reports
From customers, or from anyone who finds a vulnerability, at info@cargease.com. A vulnerability report is acknowledged within two business days.
Provider notices
From the hosting, database, storage and email providers.
Dependency alerts
Every source repository is watched for dependencies with known vulnerabilities and for malicious packages, with alerts emailed to the operator.

What happens

1. Triage
Against a written runbook: is it our change, a provider outage, or the database? Provider status pages are checked before our own code.
2. Contain
Depending on the cause: roll back to the previous version; rotate the affected credential (sign-in secret, database password, storage key or email key); remove a user; or revoke a supplier's upload link. Rotating the sign-in secret signs every user out at once.
3. Recover
Using the restore procedure above where data is affected.
4. Tell the customer
For an outage affecting their shipments, as soon as it is confirmed, and before they notice where possible. For a security incident affecting their data, without undue delay and within 72 hours of confirming it, stating what happened, what data was involved, what has been done, and what they should do.
5. Write it down
Every incident gets a short record: timeline, cause, fix, and what changes so it does not recur. A customer affected by an incident can ask for that record.

Limits

There is no 24/7 on-call rotation. Alerts reach one person. Response is fast during working hours in Mexico (Central Time) and best effort outside them.

3. Access control

Who has access to production

One person: the operator. No contractor, agency or other third party holds access to production systems or customer data.

How that access is protected

Multi-factor authentication
On every account behind the service: hosting, database, document storage and DNS, email delivery, source code, uptime monitoring, and the identity accounts they can be recovered through.
Credentials
Kept in a password manager that is itself protected by multi-factor authentication, or only in the hosting platform's secret store, from which they cannot be read back. They are never kept in the codebase or in shared documents. Every commit is scanned for credentials, on the development machine before it is made and again on every push.
Scope
Each credential is scoped to its job: the storage key reaches one bucket, and the email key can send mail but cannot read it or change the sending domain.
The operator's computer
Full-disk encryption, and it locks automatically when idle.

Least privilege inside the system

Customer users

If anyone joins

Anyone given production access gets their own named accounts, with multi-factor authentication required from the first day, and only the access their work needs. Shared logins are not used. On leaving, their access is removed the same day and any credential they could have seen is rotated.

Review

The list of accounts with production access, and the multi-factor state of each, is reviewed every three months.