Skip to content
Open source · Cloudflare Workers

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
northwind-labs / invoice-2026-07.pdfSample

$ 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

Flat fee

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

Sample Gitvoice invoice for a fictional client, showing the generated work overview, outcome highlights and total due.

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.

01 / 06

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

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

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

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

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

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.
install the agent CLI
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-invoices

no 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.gitvoice.app / invoices

Northwind Labs

client portal

Unlocked
  • INV-2026-07

    July 2026

    Due Aug 20$4,800.00
  • INV-2026-06

    June 2026

    Paid$4,800.00
  • INV-2026-05

    May 2026

    Paid$5,200.00
  • INV-2026-04

    April 2026

    Paid$4,800.00

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 now

Freeopen 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
Deploy it yourself

Workers AI, D1, R2 and Browser Rendering usage is billed by Cloudflare at their rates — not by us.

Managed

Coming soon

TBA

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 GitHub

open source · cloudflare workers · your data stays in your account