Legal

Privacy Policy

How Ridgeline Budget handles your data - written to be read, not just agreed to.

Effective: March 23, 2026 Last updated: August 5, 2026

Overview

The short version: Free accounts store all data locally in your browser - nothing is ever transmitted to our server. Paid accounts encrypt all data on your device before syncing to the server, and we cannot read it - unless you deliberately turn encryption off during setup, which stores your data on the server in readable form. Either way, we collect only what is necessary to operate the service. We do not sell data or serve ads. The only measurement we use is Vercel Web Analytics, which counts page views without cookies and without building a profile of individual visitors.

Ridgeline Budget is a personal household budgeting application operated by Ridgeline Budget LLC, a single-member limited liability company based in Minnesota, United States. This policy explains what information is collected, how it is stored and protected, what rights you have over it, and how this application relates to major privacy regulations.

This policy applies to the Ridgeline Budget web application at app.ridgelinebudget.com and the associated marketing website at ridgelinebudget.com. It does not apply to third-party services linked from these sites.

How the Application Works

Understanding the architecture is essential to understanding the privacy model. Ridgeline Budget is a client-side-first application. All data processing - budgeting calculations, encryption, and decryption - happens in your browser. The server is a storage relay, not a data processor.

Free accounts (local only)

Free accounts store all data exclusively in your browser's localStorage. Nothing is transmitted to any server. Your financial data never leaves your device.

Paid accounts (synced)

When you upgrade to a paid plan, your workspace data is encrypted in your browser before being sent to the server. The server stores an opaque, encrypted blob. The encryption key is stored only in your browser's localStorage - it is never transmitted to the server in any form.

The sync architecture uses an operation log (op_log) and a workspace state snapshot (workspace_state). Both tables store only encrypted ciphertext when encryption is enabled. The server cannot reconstruct any financial data from what it stores.

What the server can see

For free accounts, the server receives no financial data at all - only account credentials (email and hashed password). For paid accounts, even with full database access, the server (and the developer) can see only:

  • Your account email address and hashed password (managed by Supabase Auth)
  • Workspace identifiers (UUIDs) and workspace names
  • Timestamps of when operations were written
  • Encrypted ciphertext blobs prefixed with enc: - unreadable without your key
  • Passkey credential metadata (credential ID and public key only - never the private key)

If a paid account chooses no encryption, financial data is stored as readable JSON on the server. This is clearly disclosed during setup. Encryption is strongly recommended and enabled by default for new workspaces.

What We Collect and Why

DataPurposeStored where
Email address Account identity, sign-in, password reset, partner invitation emails Supabase Auth (server)
Hashed password Authentication Supabase Auth (server) - bcrypt hash, never plaintext
Passkey credential Password-free authentication Server - credential ID and public key only. Private key never leaves your device.
Workspace financial data Core application function - budgets, income, expenses, history Free accounts: browser localStorage only, never transmitted. Paid accounts: encrypted in browser; encrypted ciphertext stored on server.
Encryption key Encrypting and decrypting your data Browser localStorage only - never sent to server
Session tokens Maintaining your signed-in state Browser localStorage and server-side session record
Operation timestamps Conflict resolution for real-time sync Server - ISO timestamps only, no content
Subscriber status Tracking paid plan status, sponsor/partner relationship Server - plan tier and associated email
Debug logs Optional diagnostic output to your own browser console Browser only - never transmitted. Off by default.

We do not collect: IP addresses beyond what Supabase's infrastructure logs for security purposes and what Vercel Web Analytics hashes transiently to count visits, device fingerprints, cross-site tracking data, browsing history outside this service, or any data for advertising purposes.

Encryption in Detail

Encryption is implemented entirely in your browser using the Web Crypto API - the same standard cryptography interface used by banks and password managers. No third-party encryption library is involved.

Encryption modes

ModeAlgorithmKey storageKey recovery
Random key AES-GCM-256, 96-bit random IV per operation Browser localStorage None - must transfer key manually to new devices
Passphrase AES-GCM-256, key derived via PBKDF2 (600,000 iterations, SHA-256) Browser localStorage after derivation Re-enter passphrase on any new device
None No encryption N/A N/A - data readable on server

What "end-to-end encrypted" means here

In this application it means the data is encrypted before it leaves your browser and decrypted after it arrives in your browser. The server never holds the key. This is structurally identical to end-to-end encryption in messaging applications - the transit layer and the storage layer both handle only ciphertext.

Important: If you lose your encryption key and have no backup, your data is permanently unrecoverable. We cannot reset or recover encryption keys. Export a data backup regularly via Settings → Data Backup → Export.

What encryption does not protect against

Encryption protects your data at rest on the server and in transit. It does not protect against malware on your own device that can read localStorage, or against someone who has physical access to an unlocked device where you are signed in.

Third-Party Services

Supabase

The backend database, authentication, and serverless functions run on Supabase (supabase.com), which is hosted on AWS infrastructure. Supabase processes your email address, hashed credentials, and encrypted workspace data as a data processor on our behalf. Supabase is SOC 2 Type II certified and GDPR-compliant. Their privacy policy is available at supabase.com/privacy.

Google Fonts

The marketing website loads fonts (Instrument Serif, DM Sans, JetBrains Mono) from Google Fonts. This causes your browser to make a request to Google's servers, which may log your IP address. Google's privacy policy applies to this request. The application itself (app.ridgelinebudget.com) does not load any external font resources.

Analytics and advertising

Ridgeline Budget does not use Google Analytics, Mixpanel, Amplitude, Segment, Sentry, Hotjar, Intercom, or any other behavioral analytics, error tracking, or session recording service. There are no advertising networks, no tracking pixels, and no data brokers involved. The single measurement tool in use is Vercel Web Analytics, described immediately below.

Both the marketing website and the application use Vercel Web Analytics, which counts page views without cookies and without building a profile of individual visitors. It sets no cookies and stores no persistent identifier; visit counts are derived from a hash of IP address, user agent, and path that is discarded rather than retained as a profile.

Inside the application, the only thing reported is which screen you are viewing, recorded as a path: /dashboard, /income, /expenses, /progress, /budgets, /settings, /history, /reports, or /net worth. No financial data, no budget names, no account identifier, and no free-text you have entered is included. The purpose is to know which parts of the application are used, not who is using them.

Halation game statistics

The word game at /games/halation records anonymous, aggregate information about how puzzles are played, so we can understand whether the game is working and how many people play it. Specifically, when a round finishes we record the puzzle number, whether it was played in hard mode, whether it was solved, how many guesses were used, and how long the player's current daily streak is. We also record when someone taps the Share button.

No account, identifier, cookie, or device fingerprint is attached to any of this. These records cannot be linked to each other, to a person, to a browser, or to a Ridgeline Budget account, and they contain nothing about your budget or finances. Your personal game statistics - streaks, win rate, guess distribution - are stored only in your own browser's localStorage and are never uploaded. Clearing your browser data erases them permanently, and we hold no copy.

As with any website, our hosting providers (Vercel and Cloudflare) record standard request logs that include IP addresses for security and abuse prevention. That is infrastructure logging, separate from the game statistics described above, and the two are not joined together.

No cookies

This application does not use HTTP cookies. Authentication sessions and encryption keys are stored in localStorage, which is not transmitted with every request the way cookies are. There is no cookie banner because there are no cookies to consent to.

Data Retention

Active accounts

Your account data is retained for as long as your account exists. Workspace data (encrypted) is retained indefinitely to support the app's multi-year history feature.

Account deletion

You can permanently delete your account at any time via Settings → Account → Delete Account. Deletion requires typing DELETE to confirm. Upon deletion, your account record, all workspace memberships, all encrypted workspace data, and all operation log entries are permanently removed from the server. This action is irreversible.

Workspace removal

Deleting a workspace removes all associated data from the server immediately. If you are a member (not the owner) and are removed from a workspace, your access is revoked but the workspace data remains for the owner.

Free account data

Free account data lives only in your browser's localStorage. Clearing your browser data, using a private window, or switching browsers removes it permanently. There is no server copy to delete.

Backups

Supabase maintains infrastructure-level backups as part of its standard operations. These backups are encrypted at rest and are used only for disaster recovery purposes, not for data analysis. Point-in-time recovery is available for a limited window per Supabase's standard retention policies.

Your Rights and Controls

Regardless of where you live, you have the following practical controls over your data:

  • Access: Your financial data is always accessible to you in the app. You can export a full JSON backup at any time via Settings → Data Backup → Export.
  • Correction: All data in the app is editable directly. There is no data we hold about you that you cannot see and change yourself (except infrastructure logs maintained by Supabase).
  • Deletion: Delete your account via Settings → Account → Delete Account. This permanently removes all server-side data.
  • Portability: The JSON export format is human-readable and can be used independently of this application.
  • Encryption control: You choose your encryption mode and hold your key. You can change or remove encryption at any time in Settings → Encryption.
  • Collaboration revocation: Workspace owners can remove members at any time. Members can leave a workspace at any time.
  • Passkey management: Register and delete passkeys at any time via Settings → Passkeys.

GDPR (European Union & UK)

If you are located in the European Economic Area (EEA) or the United Kingdom, the General Data Protection Regulation (GDPR) or UK GDPR applies to your personal data.

Legal basis for processing

Processing activityLegal basis
Account creation and authenticationContract performance (Art. 6(1)(b)) - necessary to provide the service you signed up for
Storing encrypted workspace dataContract performance (Art. 6(1)(b)) - core function of the service
Sending partner invitation emailsLegitimate interests (Art. 6(1)(f)) - necessary to fulfil the collaboration feature you initiated
Subscriber / payment statusContract performance (Art. 6(1)(b)) - necessary to manage paid plan access

Your GDPR rights

  • Right of access (Art. 15): You can export all your data at any time. To request any data held outside the app (e.g. Supabase Auth records), contact us at the address below.
  • Right to rectification (Art. 16): All app data is editable directly. Contact us to correct account email or metadata.
  • Right to erasure (Art. 17): Delete your account in-app. All server-side personal data is permanently removed.
  • Right to data portability (Art. 20): Export your data as JSON at any time. Format is machine-readable and documented.
  • Right to object (Art. 21): We do not process data for direct marketing or profiling. There is nothing to object to beyond the service itself.
  • Right to restriction (Art. 18): Contact us to discuss restrictions on specific processing activities.

Data transfers outside the EEA

Supabase hosts data on AWS infrastructure, which may involve servers outside the EEA. Supabase relies on Standard Contractual Clauses (SCCs) approved by the European Commission for international data transfers. Details are available in Supabase's Data Processing Agreement.

Data Protection Officer

Ridgeline Budget LLC is a single-member company and does not meet the thresholds requiring a formal Data Protection Officer appointment under Art. 37 GDPR. Privacy inquiries should be directed to the contact address below.

CCPA / CPRA (California)

If you are a California resident, the California Consumer Privacy Act (CCPA) as amended by the California Privacy Rights Act (CPRA) grants you specific rights.

Categories of personal information collected

CategoryExamplesCollected?
IdentifiersEmail address, account IDYes
Financial informationBudget data, income, expense recordsPaid accounts only - encrypted unless you have turned encryption off, in which case it is stored in readable form. Free accounts: stored locally, never transmitted.
Internet / network activityBrowsing history, interaction dataNo
Geolocation dataPrecise locationNo
Biometric informationFingerprints, facial dataNo - passkeys use device-local biometrics; biometric data never leaves your device
Inferences / profilesConsumer profiles, preferencesNo
Sensitive personal informationFinancial account detailsPaid accounts only - encrypted before transmission and inaccessible to us, unless you have turned encryption off. Free accounts: never transmitted.

Sale or sharing of personal information

Ridgeline Budget does not sell personal information and does not share personal information with third parties for cross-context behavioral advertising purposes. We do not have actual knowledge that we sell or share the personal information of consumers under 16 years of age.

Your CCPA rights

  • Right to know: This policy and your in-app data export describe all personal information collected. Submit requests to the contact address below.
  • Right to delete: Delete your account in-app (Settings → Account → Delete Account) or submit a deletion request to us.
  • Right to correct: Update your data directly in the app or contact us for account-level corrections.
  • Right to opt out of sale/sharing: Not applicable - we do not sell or share personal information.
  • Right to limit use of sensitive personal information: Your financial data is encrypted and inaccessible to us. No further limitation is possible or necessary.
  • Right to non-discrimination: Exercising any of these rights will not affect your access to the service.

We will respond to verified consumer requests within 45 days. Requests may be submitted to the contact address below. We may need to verify your identity before fulfilling a request.

Other Privacy Regulations

🇨🇦 PIPEDA / Law 25 (Canada / Québec)

Canadian users have rights to access and correct personal information held about them. Québec's Law 25 additionally requires privacy impact assessments for new personal information technologies. Contact us to exercise these rights. Data may be processed on servers outside Canada (AWS via Supabase).

🇦🇺 Privacy Act (Australia)

Australian users have rights under the Australian Privacy Act 1988 and the Australian Privacy Principles. You may request access to or correction of your personal information by contacting us. The app does not collect sensitive information as defined under Australian law beyond encrypted financial data we cannot access.

🇧🇷 LGPD (Brazil)

Brazilian users have rights under the Lei Geral de Proteção de Dados. Legal basis for processing is contract performance and consent. You may exercise access, correction, deletion, portability, and objection rights by contacting us.

🇺🇸 Other US State Laws

Virginia (VCDPA), Colorado (CPA), Connecticut (CTDPA), Texas (TDPSA), and other US state privacy laws grant similar rights to access, correct, delete, and opt out of sale/profiling. We do not sell data or engage in targeted advertising. Exercise rights via the contact address below.

Across all jurisdictions, our core commitments are the same: we collect the minimum data necessary, we do not sell or share it, your financial data is either stored locally on your device (free accounts) or encrypted before reaching our server (paid accounts) - inaccessible to us either way, and you can delete everything at any time.

Children's Privacy

Ridgeline Budget is intended for use by adults managing household finances. The service is not directed to children under 13 years of age (or under 16 in the EEA and UK), and we do not knowingly collect personal information from children.

If you believe a child has provided personal information through this service, please contact us immediately and we will delete it. The COPPA (Children's Online Privacy Protection Act) safe harbor provisions do not apply to this service as it is not directed at children.

Changes to This Policy

We may update this policy from time to time. If changes are material - meaning they meaningfully expand the data we collect, change who we share it with, or reduce your rights - we will notify signed-in users by email and update the effective date at the top of this page.

Continued use of the service after the effective date of any changes constitutes acceptance of the updated policy. The previous version of this policy will always be available upon request.

Contact

For privacy-related questions, data requests, or to exercise any rights described in this policy, contact us at:

Ridgeline Budget

Ridgeline Budget LLC

For privacy inquiries: [email protected]

We aim to respond to all privacy inquiries within 14 days. For formal GDPR or CCPA requests, we will respond within the legally required timeframe (30 days for GDPR, 45 days for CCPA) and may ask you to verify your identity before fulfilling the request.