FinanceOS, always online.
Cloudflare Pages hosts the app. Supabase provides email login and private cloud records. Google Apps Script checks reminders in the cloud. Once connected, none of these need your laptop to stay on.
1. Connect the database
- Create a free Supabase project or connect an existing project. Do not enable a paid plan.
- Apply the migration in
supabase/001_financeos.sqlonce, using Supabase SQL Editor or the connected Supabase integration. - Put the project URL and its publishable key into
dist/config.js. Never use a secret or service-role key in browser code. - Set the Auth Site URL and allowed redirect URLs to the final HTTPS hosting address and its
/index.htmlpath. - Enable email authentication. For a private personal project, create/invite the owner account and disable new-user signup after it is established. Supabase’s default email service may restrict recipients and rate; check your project’s email settings and configure a compatible SMTP provider if needed.
2. Publish the app
- Create your free Cloudflare account.
- Open Workers & Pages → Create application → Pages → Direct Upload.
- Upload the contents of
dist/with index.html at the root. Name the project FinanceOS or another available name. - Deploy and use the returned HTTPS address in Supabase’s Auth settings.
- Open the link on your phone, sign in with the same email, and verify your records appear.
The app stays on a connection screen until Supabase is configured. Hosting the files alone does not configure the database or email.
3. Enable automatic reminder emails
- Once signed in, open Settings → Create / replace reminder connection. A private JSON connection file downloads.
- Create a project at Google Apps Script and paste the reminder script.
- In Project Settings → Script Properties, add the four values from that connection file: SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, REMINDER_TOKEN and RECIPIENT. Use your own recipient email.
- Run
setuponce. Review and approve Google’s requested permissions. - Create a reminder due today in FinanceOS and run
sendRemindersonce to verify delivery.
The trigger checks around 8 a.m. Pakistan time each day. It reads current incomplete reminders directly from Supabase and sends a single digest of newly due or overdue items. Marking an item complete in FinanceOS removes it from the feed. There is no sheet to refresh. Replacing or revoking the token stops the old connection. Email delivery remains subject to Google quotas and authorization.
The token grants read access only to due reminders, not transactions or write operations. Store it in Google Script Properties and delete the downloaded connection file after setup. Delivery is not exactly-once: a rare failure after sending may repeat an email. Very old unresolved reminders can repeat after deduplication records expire.
Backups and existing local data
Export a JSON backup from your original local app and import it into the online app. The importer asks before replacing your cloud ledger and downloads a copy of the previous cloud data. Different website addresses cannot read each other’s browser storage automatically.
What happens when two devices edit?
The app checks the cloud version before saving. If another device changed the ledger, it rejects the older save and reloads current records instead of overwriting them. Reapply your unsaved change after a conflict. Opening the app again refreshes records; Settings also has a Refresh button.
Cost and scope
No paid AI or WhatsApp API is required. Copy WhatsApp text into the chat assistant. Hosting, database and email are subject to their providers’ free-tier terms and availability. The current ledger limit is 2 MB and 10,000 records per list. Keep regular backups.
Documentation: Cloudflare Direct Upload · Supabase access controls