Privacy Policy

Summary. Finance Dashboard is a single-user personal finance app. The only person who uses it is its operator, Rolando Trevino Alanis, and the only financial data in it is his own. Data is aggregated from his own bank and brokerage accounts via Plaid and SimpleFIN Bridge, stored on Cloudflare, and used for nothing but showing him his own finances. It is not sold, not shared for marketing, and not analyzed by any advertising or analytics service.

1. Who operates this app

Finance Dashboard is operated by Rolando Trevino Alanis, an individual, as a personal, non-commercial project. There is no company, no staff, and no other operator. Contact: rolotrealanis@gmail.com.

2. Who can use this app

One person. Access is restricted by an email allowlist enforced in the application's authentication layer. After Google OAuth returns an email address, the app checks it against the ALLOWED_EMAILS configuration value. That value currently contains exactly one address, rolotrealanis@gmail.com. Any other account is refused with HTTP 403 and never receives a session cookie.

There is no registration, no invitation flow, and no way for a member of the public to obtain an account.

3. Data collected, and where it comes from

3.1 From Plaid

The operator links his own financial institutions through Plaid Link. The app requests the following Plaid products at link time:

Using the resulting access token, the app calls these Plaid endpoints:

Endpoint What it retrieves
/link/token/create, /item/public_token/exchange Link setup and token exchange
/accounts/get Account names, types, subtypes, masks (last 4 digits), balances
/transactions/sync Transactions — date, amount, merchant, description, category
/investments/holdings/get Investment holdings and security details
/investments/transactions/get Investment transactions (buys, sells, dividends)

Plaid also posts item, transaction, and holdings update notifications to a webhook on the app, authenticated by a shared token.

3.2 From SimpleFIN Bridge

The operator claims a SimpleFIN access URL for his own accounts. The app calls SimpleFIN's /accounts endpoint, which returns accounts, balances, and transactions (optionally including pending transactions).

3.3 From Google

Google OAuth is used only to sign the operator in. The scopes requested are openid and email — nothing else. The app does not request or receive access to Gmail, Drive, Calendar, Contacts, or any other Google data. The email address returned is used solely to check the allowlist and to identify the session.

3.4 From the operator directly

Receipt images and PDFs, uploaded by hand. Category names, budget amounts, transaction notes, and retirement-planning assumptions typed into the app.

3.5 Derived data

Categorizations, receipt line items, transaction-to-receipt matches, retirement projections, and an internal audit log of actions taken in the app (including automated ones, such as the nightly sync and the receipt purge).

4. Why this data is processed

Solely to display the operator's own financial position to him: balances, spending, budgets, holdings, and projections. There is no secondary use. The data is not used to build profiles for anyone, train models, or target advertising.

5. Where the data is stored

Store Contents
Cloudflare D1 (finance-db) Accounts, transactions, holdings, securities, investment transactions, categories, budgets, receipt metadata and line items, retirement assumptions and projection runs, sync state, provider access tokens, audit log
Cloudflare R2 (finance-docs) Receipt image and PDF files
Cloudflare Workers KV Session records and cached responses

The app runs on Cloudflare Workers. Cloudflare encrypts D1, R2, and KV data at rest and all traffic in transit is over HTTPS/TLS. Data may be processed in Cloudflare data centers outside the operator's own country, as is normal for a global edge network.

6. Automatic decisions the app makes

Receipt images are sent to a Google Generative Language API (Gemini) endpoint to read the text off the receipt and to suggest a spending category. Product barcodes read from receipts may be looked up against the public Open Food Facts API to resolve a product name. Both are described on the Sub-processors page.

These are convenience features on the operator's own receipts. No decision with a legal or similarly significant effect on any person is made by the app.

7. Who the data is shared with

No one, other than the service providers that are technically necessary to run the app. In full, those are: Plaid, SimpleFIN Bridge, Google, Cloudflare, and Open Food Facts. Each is listed with its own privacy policy on the Sub-processors page.

The data is not sold, not rented, not shared for advertising, and not disclosed to data brokers. It may be disclosed if legally compelled.

8. How long data is kept

9. Rights over this data

The only individual whose personal data is in the app is its operator, who can read, correct, export, or destroy any of it at any time by direct access to the underlying Cloudflare D1 database and R2 bucket.

If you believe your personal data is nonetheless present in this app — for example, because you appear as a counterparty on a transaction — email rolotrealanis@gmail.com and it will be investigated and, where applicable, deleted. See Data deletion.

This policy does not claim certification or formal compliance with SOC 2, ISO 27001, GDPR, CCPA, or any other regime. It describes what the app actually does.

10. Children

The app is not directed at children and has no users other than its adult operator.

11. Changes

Changes to this policy are published on this page. The "Last updated" date above is generated from the git commit history of this document's source file.

12. Contact

rolotrealanis@gmail.com