Month-end invoicing

Showcase · Xero push simulated

Press 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.

3 emails · 5 attachments
Hours Tracker export (CSV)
or upload your own sample files

Press the button to watch each stage run.

Loading the sample inbox…

How it would run for you

Neil's month end, start to finish

  1. 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. 2

    The team

    Keep emailing their Word or Excel timesheets as they do now, to the same timesheets@ address.

  3. 3

    Neil, on the 1st

    Opens the app and presses one button: Draft September invoices.

  4. 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. 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

Real
  • 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
Assumed
  • 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
Mocked
  • The push to Xero: no connection, simulated response
  • The inbox: three .eml files stand in for a live mailbox
Next
  • 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.