How your data is protected

Encryption, access control, and the guardrails that keep your time data yours — plus the backups behind them.

Your time data is your livelihood — often literally — so keeping it safe and yours is part of the product, not an afterthought.

Two questions matter here: who can reach your data, and what happens if something goes wrong. Most of this page is the first — the security that keeps it yours day to day. Backups are the safety net underneath.

Encrypted in transit and at rest

Everything between you and ProjectPacer travels over HTTPS — nothing about your account crosses the network in the clear.

The secrets you connect are encrypted a second time, on top of that, before they're ever written to the database — with AES-256-GCM, the current standard:

  • your calendar feed URL (itself a private link),
  • your Clockify API key, if you connect it.

Each is decrypted only for the instant it's used to make a request, and never leaves in an export.

Your password

Passwords are hashed with bcrypt and never stored in a form anyone can read back — not us, not someone who obtained the database. Changing your password immediately revokes every existing session, so a stolen or stale cookie stops working the moment you reset.

Sessions and sign-in

Your session cookie is httpOnly (invisible to page scripts, so a script injection can't steal it), secure (HTTPS only), and sameSite (won't ride along on a cross-site request). Sign-in is rate limited, so a password can't be found by hammering the login endpoint.

Access control

Your data is walled off at two levels, both enforced on the server — not merely hidden in the interface:

  • Between workspaces — every query is scoped to the workspace you're in. A member of one workspace cannot reach another's data, full stop.
  • Within a workspace — roles & permissions decide who opens what. Money is gated on its own, and split in two — what work bills at, and what it costs. Members and viewers get neither by default; seeing what work costs — including what people are paid — takes the See costs permission, a deliberate grant.

Every privileged action taken on your workspace is written to an append-only audit log, so nothing happens to it without a trail.

Guardrails against the classics

A couple of whole categories of attack are closed off by design:

  • No SSRF. When ProjectPacer fetches a calendar feed you provide, the address is validated — and re-validated on every redirect — so a malicious feed can't trick the server into reaching private network addresses.
  • No trackers in the middle. There are no analytics or advertising scripts in the app, so your time data isn't copied to anyone's dashboard as a side effect of using it. The complete list of services that ever receive anything is in What we collect.

Deletion that's hard to undo by accident

Deleting an account or a workspace destroys nothing immediately — it opens a 30-day grace window where the data is locked but fully restorable, and only then does a cleanup erase it for good. See Export & delete your data.

Backups, if the worst happens

Security keeps your data yours; backups make sure it's still there. They're layered on the 3-2-1 rule — three copies, two kinds of storage, one held somewhere else — so no single failure (a bad deploy, a dead disk, even losing our hosting account) takes it with it:

  • Render Managed Postgres — automated daily backups plus point-in-time recovery, which rewinds to a moment rather than a day.
  • Cloudflare R2 — a nightly copy, AES-256 encrypted before it leaves our server, kept for 30 days and held with a separate provider so it survives losing Render entirely.

We periodically restore from that off-site copy to confirm it rebuilds a working database — a backup nobody has restored is a guess. These are disaster recovery for the whole service, not a per-account undo.

You can keep your own backups, too. Nothing here is a lock-in: you can export your data any time — for billing, for your records, or just to hold a copy somewhere you control.

Was this helpful?
Still stuck? Contact support and we'll help.