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:
transactionsinvestments
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
- Financial data (accounts, transactions, holdings, budgets) is kept for as long as the operator uses the app, because its purpose is historical: multi-year spending and net-worth history.
- Deleted receipts are soft-deleted first, then permanently removed. A scheduled job runs daily at 05:00 UTC and permanently deletes any receipt soft-deleted more than 30 days earlier — removing both the database row and the R2 object.
- Sessions expire on their own and are cleared on sign-out.
- Provider connections end when the operator disconnects an institution; Plaid consent additionally expires and must be renewed (for example, twelve-month consent refresh at some institutions).
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.