Privacy

What we collect, and what we do with it.

Plainspoken — not legalese. A small HVAC+R shop owner should be able to read this twice and know exactly where their data sits, who can see it, and how to ask us to take it out.

Last updated . When this page changes materially, the date moves and the archive is the page history.

What we collect

Three categories. Each one tied to a form on this site.

We do not buy lists, scrape public sources, or pull third-party data into your shop record. The only data we hold is what someone typed into a Frostledger form.

01 — Pre-account

Waitlist emails.

Captured from the waitlist form on the homepage and at the bottom of every marketing page. We use it for one purpose only: to write you a single note when there is a pilot seat that fits your fleet size. That outreach is manual — a person on the team reads every address and sends by hand. There is no drip sequence, no re-engagement campaign, and the address is never forwarded to a marketing tool.

02 — Pilot interest

Request-access submissions.

Submitted from the request-access form on the pricing page. We collect the name, work email, company, technician count, an optional tier suggestion, and any notes you choose to type. We use it to start a short pilot conversation with you. It is held for the duration of that conversation plus a reasonable record-retention window, and is never added to a marketing list.

03 — Signed-in

Account, inspection, and recovery records.

Once you create a Frostledger account, we hold an email-addressed user record with optional name and avatar, plus the inspection rows and refrigerant recovery rows you create. Account authentication runs through the better-auth module — your password is stored only as a one-way hash, never as plaintext. Inspection and recovery rows are tied to your user and are not visible to any other account on the platform.

How it is stored

One managed Postgres database. One application reading it.

  • Database
    Managed Postgres on Polsia.

    Production data lives in a managed Postgres instance on the Polsia platform. The application reaches it over SSL — connections in transit are encrypted end to end.

  • Queries
    Parameterized. Always.

    Every query the application issues against the database is parameterized. There is no string-concatenated user input anywhere in the read or write paths, so injection is structurally impossible.

  • Tenant isolation
    Per-user scoping, no leakage.

    Inspection and recovery rows are owned by the user who created them. Reads and writes are scoped with a where: { userId: user.id } clause — no other customer can ever see your rows, and there is no shared "tenant" surface that crosses shops.

  • Backups
    Platform-managed.

    Database backups are managed by the platform; they live in the same managed-Postgres perimeter. We do not export customer data to an external warehouse or to a third-party backup system.

Who we share with

Short and honest: almost nobody.

We do not sell your data. We do not share it with advertisers. We do not upload it to a marketing automation platform, and there is no retargeting pixel on this site. The PDF inspection reports and refrigerant recovery records you generate belong to you — they are produced in your browser, downloaded to your machine, and never indexed by us.

The only thing the production app emits to a third party is a single platform-side visitor beacon: a page-view counter that records a visitor hit without anything user-level attached. It is not Google Analytics, it is not an ad network, and it cannot identify a signed-in account from a public visitor.

Government disclosure goes only where the law requires it. If we are ever compelled to share a record, we will tell you what was shared and why, unless that notice is itself legally restricted.

Cookies and similar

Exactly two. Both are functional, neither is marketing.

  • Theme preference (next-themes).

    A small cookie records whether you have chosen light or dark mode so the choice persists between visits. It carries no identifying data; removing it just resets the theme to system default.

  • Session cookie (better-auth).

    When you sign in, the authentication module issues a session cookie to keep you signed in. Without it, you would have to enter your email and password on every page. There is exactly one such cookie and it is bound to your account — no third party can read or set it.

No third-party cookies. No cross-site tracking. The shipped browser Permissions-Policy header keeps browsing-topics=() disabled at the platform layer — see src/lib/permissions-policy.ts.

Retention

Kept as long as the purpose justifies it. No further.

  • Waitlist emails

    Kept until you ask to be removed, or for as long as the product team needs to plan pilot onboarding queues. Removal today is a manual email to the contact below — no automation, no sequence.

  • Request-access submissions

    Kept for the duration of the pilot conversation plus a reasonable record-retention window afterwards, so we can answer follow-up questions about scope, tier, or pricing without re-asking for context.

  • Inspection and recovery rows

    Kept as long as your account is active. Deleting a single row is available today; closing the account (and removing every row tied to it) is a manual email to the contact below. We confirm in writing when the deletion has run.

  • Audit packet PDFs

    Not retained by us. A PDF is generated in your browser and downloaded to your machine. We do not store copies of generated PDFs on our side — once it is in your hands, it is in your hands.

This site does not run an automated unsubscribe system today — there is no transactional email module wired in. To come off the waitlist, write to the contact below and a person will remove you by hand.

Questions or requests

Your data, your call. One address.

Ask us to delete a waitlist entry; revoke a session by signing out; ask for the inspection or recovery rows your account holds. Any of those, and anything else privacy-related — start with one email.
Changes to this page

The date at the top moves; the archive is the history.

If something material changes — a new data category, a new shared processor, a retention rule — we update this page and bump the "last updated" line. Old revisions remain in the page history.

Questions about privacy? Write to frostledger@polsia.app.