Ledger

Bills and subscriptions, parsed from your inbox
Notifications
Sign-in is handled by Cloudflare Access — nothing to enter here but the URL.
Total expenses this month
Recurring (fixed) + utility & other bills received so far
Due this month
Paid this month
Active vendors
Unrecognized emails
VendorTypeSubjectDateDueStatusAmount

Known fixed costs — same amount every cycle, no incoming bill needed to know what's owed.

Monthly total
VendorCategoryBilling cycleAmountMonthly equiv.
Monthly estimate
This month actual
VendorSubjectDateDueStatusAmount
Monthly estimate
This month actual
VendorSubjectDateDueStatusAmount

Add a vendor

Utility: fallback due date if no due-date regex matches. Recurring: the day each month's bill gets generated.
Matched against the From address, case-insensitive. Not needed for Recurring vendors — those don't depend on email at all.
If set, at least one must appear in the subject or body
First capture group becomes the amount
First capture group becomes the invoice number, used to match a later payment confirmation.

Payment confirmation (optional, utility only)

Some utilities send the bill from one address and a separate payment confirmation from a payment processor. When a confirmation matches these patterns, it's matched against the existing "due" bill by invoice number (or amount) and marks it paid, instead of creating a new bill.

Emails that arrived but didn't match any vendor rule. Add a vendor covering the sender, or dismiss.