Your invoices, written by your git history.
Gitvoice reads the commits, pull requests and releases you already shipped, then writes an outcome-first invoice your client can actually understand. Flat fee or hourly. Delivered through a portal with no accounts to create — just one password.
- No manual line items
- Self-host on Cloudflare
- Your data, your account
$ gitvoice generate --client northwind --period 2026-07
→ 2 repos · 63 commits · 14 PRs · 2 releases
✓ summary written · invoice.pdf → R2
Northwind Labs
INV-2026-07 · issued Aug 1, 2026
Work overview
Checkout reliability was the focus this month. Payment retries were rebuilt around idempotency keys, closing the duplicate-charge failure mode, and failed billing webhooks now replay themselves instead of waiting on a human. The new onboarding flow shipped behind a flag and is live for internal accounts.
Highlights
- Payment retries rebuilt around idempotency keysnorthwind/api · 23 commits · PR #412
- Automatic replay for failed billing webhooksnorthwind/api · 9 commits · PR #418
- New onboarding flow shipped behind a flagnorthwind/web · 31 commits · v2.4.0
Total due
$4,800.00
Payable by e-transfer
- Period
- Jul 1 – Jul 31, 2026
- Billing model
- Flat fee
- Repositories
- northwind/api, /web
- Evidence
- 63 commits · 14 PRs
rendered to PDF · stored in R2
Built for developers who bill for real work
- Freelancers
- Design engineers
- Agencies
- Contract teams
- Solo devs
Features
Everything an invoice needs. None of the typing.
Gitvoice ships as a single Cloudflare Worker with a private admin workspace and a password-protected client portal. You run it; it runs your billing.
Commitsin.Invoiceout.
Point Gitvoice at one or more repositories and pick a week, a month, or any custom range. It pulls the commits, merged pull requests and releases, then builds the invoice around them.
AIthatwritesoutcomes,notdiffs.
The summary leads with what shipped, not what changed, and every sentence is grounded in verified GitHub evidence — no invented metrics, no filler.
Flatfeeandhourly,oneworkspace.
The billing model is set per client and the fee or rate lives on each invoice. Retainers, fixed-scope sprints and hourly work all bill from the same activity data.
Onepassword.Noaccounts.Ever.
Each client sees only their own invoices behind a seven-day signed link. No signup, no verification email, no more “can you resend that PDF?” threads.
ProductionPDFs,renderedandstored.
Invoices render through Cloudflare Browser Rendering and land in R2 as clean multi-page PDFs, carrying your business name, provider details and logo.
Billingthatrunsonacron.
Give a client a weekly or monthly cadence and Gitvoice drafts the invoice on schedule. You review and send — or let the schedule do the whole thing.
How it works
Four steps, and one of them is “get paid”.
- 01
Connect your repos
Add a client, list the repositories you work in, and drop in a GitHub token if any of them are private. That is the entire setup.
- 02
Pick the period and the price
Choose a week, a month, or a custom date range. Set the flat fee, or the hourly rate and hours for this invoice.
- 03
The AI writes the summary
Gitvoice ranks the work by outcome and drafts the overview, highlights, timeline and detailed activity log — strictly from commits, PRs and releases it can verify.
- 04
Your client sees it and pays
The invoice lands in their portal as a PDF with your preferred payment method printed on it. One password, a seven-day signed link, zero friction.
Open source & agent-ready
Open source. Self-host it. Audit it. Fork it.
Gitvoice is two public repositories and nothing else: one Cloudflare Worker that runs the admin workspace, the client portal, the AI summaries and the PDF pipeline — and the site you are reading right now. Clone it, read every line, deploy it to your own account, change whatever you disagree with.
One Worker, nothing hidden
The admin workspace, the client portal, the AI summaries and the PDF pipeline are one Cloudflare Worker in one public repository. There is no closed second half.
It runs in your account
Deploy it with Wrangler and the data lives in your D1, the PDFs in your R2. Nothing sits on infrastructure you do not control.
Read it before you trust it
See exactly how portal passwords are hashed, what the model is allowed to see, and how signed links expire — then fork it and disagree with any of it.
Product
idea-torx/gitvoice
The Worker: admin workspace, client portal, AI summaries, PDF pipeline — and the agent CLI.
This site
idea-torx/gitvoice-site
The marketing site is open too. Every pixel on this page, including the section you are reading.
Agent-ready
Any agent can run your billing.
Gitvoice ships a zero-dependency agent CLI: one Python file that speaks straight to your Worker’s HTTP API. Hand it to an agent and the entire product — clients, invoices, PDFs, settings, backups — becomes a set of commands it can run.
- One file. No SDK, no plugin, no server to keep running.
- Python 3 standard library only — nothing to pip install.
- Destructive actions refuse to run without an explicit --yes.
curl -fsSL https://invoicer-pro.ideatorx.workers.dev/agent-cli/gitvoice-agent.py -o gitvoice-agent.pyexport GITVOICE_ADMIN_TOKEN="your-admin-token"python3 gitvoice-agent.py --help✓ gitvoice-agent.py ready · 0 dependencies · talks to your Worker
usage: gitvoice-agent.py [--base URL] <command> [options]
commands:
auth clients client-add
client-update client-delete setup
settings settings-update preview
create get pdf
list invoice-delete backup
portal-clients portal-login portal-invoicesno install step · no dependencies · one python file
The admin token comes from your own deployment. Point --base at your Worker and the CLI never touches anyone else’s infrastructure.
Works with any agent
- Claude Code
- Codex
- OpenCode
- Hermes
- Your own terminal
The whole product, as commands.
each runs as python3 gitvoice-agent.py <command>
Create clients, with portal passwords
Adds the client, sets flat-fee or hourly billing, and sets the portal password they sign in with — PBKDF2-hashed, never stored in the clear.
client-add --name "Acme" --email … --portal-password "…"
Invoices from a plain description
Describe the work in one sentence. Gitvoice writes the summary and prices the period. Preview costs nothing; create only files it once you pass --yes.
preview --client ID --start … --end … --desc "…"
create --client ID --start … --end … --desc "…" --yes
Download the finished PDF
Pulls the rendered invoice out of R2 and writes it to disk — byte for byte the file your client opens in the portal.
pdf <invoice-id> --out july.pdf
Run a full backup
Writes the whole workspace to JSON and downloads every invoice PDF beside it, with a manifest of what saved and what did not.
backup --out ~/Backups/gitvoice
Onboard a new workspace
Sets the admin password and the provider profile on a fresh deployment, then hands back the one-time recovery code. Nobody has to open the web app first.
setup --admin-password "…" --business-name "…"
Manage settings
Read or rewrite the provider profile — business name, address, tax id, remittance instructions, logo — without leaving the terminal.
settings
settings-update --remittance "…"
Client portal
The portal your clients will actually open.
No accounts to create. No password resets at 11pm. Each client gets one password scoped to their own invoices — and nothing else.
- One password per client
- PBKDF2-hashed, set by you, shared once. That is the whole onboarding flow for your client.
- Strictly scoped access
- Seven-day signed, client-scoped tokens mean a client can only ever load their own invoices.
- Dispute-ready detail
- Every invoice carries its timeline and detailed activity log, so “what was this for?” answers itself.
Northwind Labs
client portal
- Due Aug 20$4,800.00
INV-2026-07
July 2026
- Paid$4,800.00
INV-2026-06
June 2026
- Paid$5,200.00
INV-2026-05
May 2026
- Paid$4,800.00
INV-2026-04
April 2026
signed link expires in 7 days · scoped to northwind labs
- grounded in verified git evidence
- 100%
- outcome highlights per invoice
- 3–8
- signed, client-scoped portal links
- 7 days
- billing models — flat fee & hourly
- 2
Pricing
Free to self-host on Cloudflare.
Gitvoice is open source. Deploy the Worker to your own account and the software costs nothing — you only ever pay Cloudflare for what your own usage consumes.
Self-hosted
Available nowFreeopen source, forever
Your Worker, your D1, your R2. Clone it, deploy it, brand it, change it.
- Unlimited clients and invoices
- Admin workspace + client portal
- Workers AI summaries with deterministic fallback
- Bring your own OpenAI key (optional)
- Scheduled generation via cron
- Your business name, provider details and logo
Workers AI, D1, R2 and Browser Rendering usage is billed by Cloudflare at their rates — not by us.
Managed
Coming soonTBA
The same Gitvoice, with the infrastructure handled for you — for people who would rather never open Wrangler.
- Hosted workspace and portal
- Managed updates and backups
- Everything in self-hosted
Not open yet — self-host in the meantime.
FAQ
The questions developers actually ask.
No. Gitvoice drafts the entire client-facing invoice from your GitHub activity — work overview, highlights, timeline and detailed activity log. You can edit anything before it goes out, but the default state is send-ready.
Gitvoice collects the commits, merged pull requests and releases for the period, ranks them by outcome, and has Workers AI write them up the way a senior delivery lead would. The model only ever sees verified GitHub evidence — if it did not happen in your git history, it does not reach the invoice. If AI is unavailable, a deterministic fallback summary is generated instead. You can also bring your own OpenAI key.
Yes. The billing model is set per client — flat fee or hourly — and the fee or rate is set per invoice. A monthly retainer client and an hourly client live happily in the same workspace, and each invoice prints that client's preferred payment method, whether that is e-transfer, wire or something else.
In your own Cloudflare account. Client profiles, invoices, pricing snapshots and activity snapshots are stored in D1; production PDFs are stored in R2. Self-host it and nothing sits on infrastructure you do not control. Portal passwords are PBKDF2-hashed, never stored in the clear.
Never. You set one password per client and share the link once. They see only their own invoices, authorized by seven-day signed, client-scoped access tokens. No signup, no email verification, no forgotten-password loop at 11pm.
Yes. Run the Worker locally with Wrangler against local D1 and R2 bindings, point it at a repository you actually work in, and look at a generated invoice before you deploy anything to production.
Stop writing invoices. Ship work instead.
Your git history already knows what you did this month. Let it write the invoice — while you are busy shipping the next one.
Get started on GitHubopen source · cloudflare workers · your data stays in your account