Client orders in, supplier payments out, profit split by order type — one book for the traffic business.
| Date paid | Site | Client / order | Client paid | Type | Note | |
|---|---|---|---|---|---|---|
| Total | — | |||||
| Date paid | Site | Client / order | Supplier cost | Type | Note | |
|---|---|---|---|---|---|---|
| Total | — | |||||
| Month | In | Out | Profit | My share |
|---|
| Site | Orders | In | Out | Profit | Margin |
|---|
Everything is computed from the two sheets above — there is nothing to reconcile by hand.
Personal — your own client. The whole profit on that order is yours.
Work — a job you split. You keep the share set in My cut on work orders (50% by default); the rest is the partner's.
Profit = client paid − supplier cost, computed separately for each type.
My share = personal profit + work profit × my cut. A negative number means the supplier cost more than the client paid.
Rows are matched by type, not one-to-one, so a supplier payment made on a later date still lands in the same books. Use the same Site and Client / order text on both sheets and the By site panel will line them up. A site with income and no cost yet is tagged cost pending.
Every edit goes straight into your own D1 database on Cloudflare — the same data on every device that opens this link. Edits made with no connection are queued in the browser and sent as soon as it is back; the chip at the top shows exactly where things stand.
The tiles, both sheets and By site all follow the selected period. By month always shows every month — click a row to jump to it. Rows always sit in date order; a new row slides into place once you set its date.
Export CSV gives one flat file (both sheets, with a Kind column) for Excel or Google Sheets. Backup JSON is the exact contents of this book — Restore loads it back. A full SQL dump is one command away: npm run db:dump.