Month-end invoicing
Showcase · Xero push simulatedPress one button at month end and the team's timesheets and your own hours are pulled together into draft invoices, job by job. You check and approve each one before anything goes out.
It is 1 October
Five timesheets in four layouts, plus Neil's own hours.
Three emails brought in two Excel sheets, an Excel grid and two Word documents; Neil exported his Hours Tracker. One button reads every row, turns it into time entries, checks them, prices them against the rate card and drafts the September invoices for Neil to review. Nothing goes to a client: drafts would land in Xero as DRAFT (mocked here) for a second approval there.
Press the button to watch each stage run.
How it would run for you
Neil's month end, start to finish
- 1
Neil, on his phone
Hours Tracker → Export → last month → CSV → Share → Mail → timesheets@ → Send. About six taps. On an iPhone a Shortcut can make it one tap.
- 2
The team
Keep emailing their Word or Excel timesheets as they do now, to the same timesheets@ address.
- 3
Neil, on the 1st
Opens the app and presses one button: Draft September invoices.
- 4
Neil, in the app
Clears the red flags, glances at the amber ones, adjusts a claim or an hour, and approves. Approval one.
- 5
Neil, in Xero
The invoices are waiting as DRAFT. He approves and sends them from Xero, as he would today. Approval two.
Nothing to install and no Claude Code to run: a web page, one email address and one button. Staff identities come from their email addresses; the AI never decides who worked, at what rate, or for which client.
What is real, assumed, mocked and next
No smoke and mirrors
- The Excel, Word, CSV and JSON readers, and the email parsing
- Claude normalisation when a key is set (otherwise a recorded real run replays)
- Every check, the pricing rules, GST at 15% per line, the totals
- The draft PDFs and the CSV in Xero's import layout
- The Xero request body, built to the Accounting API's shape
- Hours Tracker's export columns (assumed layout — confirm with one real export)
- That NJS uses Xero (MYOB is plan B), account 200 and tax type OUTPUT2
- Rates, stage splits, caps and retainers: invented sample figures
- Xero's current CSV import template
- The push to Xero: no connection, simulated response
- The inbox: three .eml files stand in for a live mailbox
- A Resend inbound address (timesheets@ on a subdomain; NJS's own email untouched)
- A standard Xero OAuth app with the accounting.invoices scope (plus contacts and settings read)
- A Neon database for settings, runs, Neil's fixes and an audit log
- Layout memory per sender, so most months parse with no AI at all
This server: no API key, recorded runs only.
Sample data only. No email, Xero or Microsoft 365 connection is made by this page.