Skip to content

We run Avunu on what we build, from proposal to paycheck

Avunu's own ERPNext runs proposals, timesheets, billing, subscriptions, banking, payroll tax, and a client portal with live hour budgets.

Professional services (Avunu)ERPNext · NixOS
Industry

Professional services (Avunu)

Platform

ERPNext · NixOS

Stack

ERPNext, Frappe, HRMS, Python, TypeScript, Vue, frappe-ui, GoCardless, and 3 more

Status
In production

The challenge

A consulting firm runs on the same chain as any service business: win the work, plan it, track the time, bill it, get paid, pay people, and file the taxes. We had the same problem our clients bring us. Separate tools for proposals, time, invoicing, subscriptions, banking, and payroll meant re-keying and gaps, and clients couldn't easily see where their budget stood.

We also had a credibility question. If we tell clients one connected system on open-source ERP is the better way to run a business, we should run ours that way. So Avunu's own ERP, at erp.avunu.net, is the place where we try things first. TODO: verify this "before" story with the founder.

What we built

Proposals

A proposal record captures stakeholder requirements, components, phases, tasks, benefits, and flat-rate services, with a low and a high estimate of hours and cost. That's our transparent billing value in practice: best and worst case, up front. Clients review the proposal on the web and sign it with eSign. Signing updates its status and notifies us, and the proposal links to the project that delivers it.

Project portal

erpnext_taskview gives our team a project and task tree with timers and hour budgets, and gives clients a portal at /projects. There they see each project's budget by phase, browse tasks as a list or kanban board, comment, attach files, and add tasks of their own. Budget meters turn amber at 80% and red when over, so nobody is surprised.

Timesheets to invoices

Timers log straight to draft timesheets. A timesheet review report checks the work, and a sales invoice generator turns approved time into invoices. Overdue invoices trigger an interest notice automatically.

Subscriptions

Recurring services bill on ERPNext subscriptions. automated_subscriptions raises a payment request for each subscription invoice, and GoCardless collects it against the client's existing direct-debit mandate.

Banking

mercury_integration connects ERPNext to Mercury for bank transaction sync and reconciliation, chart-of-accounts mapping, client invoicing, and ACH payouts to employees and vendors. TODO: verify which Mercury features are live on erp.avunu.net.

Payroll tax

Payroll tax rates sync from a rate service into ERPNext, with tax authorities, tax forms, and reports for quarterly payroll tax payments, estimated tax payments, and year-end filings.

Look and feel

carbon_frappe restyles the desk, portal, login, and email in IBM's Carbon Design System.

Results

In production

One system now holds the life of a client engagement: proposal, signature, project, tasks, time, invoice, payment, and the payroll and taxes behind it. Clients can check their own hour budgets any time instead of waiting for a status email. Our team logs time where the work is, against budgets everyone can see.

  • Proposals carry best- and worst-case hour and cost ranges, and clients sign them online
  • Clients follow their projects and live hour budgets in the portal at erp.avunu.net/projects
  • Logged time becomes invoices through one generator, with a review report first
  • Subscription invoices collect by direct debit automatically
  • Email sends and arrives through Cloudflare, with no SMTP or IMAP server to manage
  • The reusable parts are published as open-source Frappe apps

It's also a proving ground for our open-source work. Every public project linked on this page is part of how our own ERP runs, and each is published so clients and other firms can use it too. When a client asks whether a module is ready for production, the honest answer is that we run our own business on it.

TODO: confirm whether to publish the proof point that 3,000+ hours of client work over two years were logged, budgeted, and invoiced in this system (re-run the timesheet report first).

Under the hood

  • ERPNext
  • Frappe
  • HRMS
  • Python
  • TypeScript
  • Vue
  • frappe-ui
  • GoCardless
  • Mercury
  • Cloudflare Email
  • NixOS

ERPNext and HRMS on Frappe v16, with Avunu-specific logic in one private app and low-level overrides in jailbreak.

Portal engineering

The client portal is a frappe-ui (Vue) app. Every portal endpoint checks access first, server code uses the Frappe ORM and query builder only, and logged hours include running timers live.

Banking integration

A Frappe-free, typed Mercury API client with retries, cursor pagination, and idempotency keys. Inbound events arrive by signed webhook or by a 15-minute poller, and handlers re-fetch authoritative state, so duplicate or out-of-order events converge.

Email without SMTP

Outbound mail goes to Cloudflare's sending API from Frappe's email hook. Inbound mail arrives from a Cloudflare Worker over a signed webhook and enters Frappe's normal inbound path, so threading and auto-replies behave as they do for a mailbox.

Declarative platform

frappe-nix declares the bench and its services. TODO: confirm erp.avunu.net runs on Avunu's NixOS hosting platform before stating it.

Open source it's built on

All open-source projects
Frappe

ERPNext TaskView

A project and task workspace for ERPNext, with timers and hour budgets for staff and a portal where customers follow and work on their projects.

Frappe

Mercury Integration

Connects ERPNext to Mercury bank for client billing, payroll and vendor ACH, bank sync, reconciliation, and GL-coded journal entries.

Frappe

Cloudflare Email Delivery

Send and receive Frappe and ERPNext email through Cloudflare, with no SMTP or IMAP provider in the loop.

General

Cloudflare Email Relay

A multi-tenant Cloudflare Email Routing Worker that stores every inbound message and pushes it to the right Odoo or Frappe instance with durable retries.

Frappe

Automated Subscriptions

Automatic billing for ERPNext Subscriptions, with payment requests, billing anchors, proration, consolidated invoices, and credit notes.

Frappe

eSign

Collect electronic signatures on any Frappe or ERPNext document through web forms, with signed PDFs and a full audit trail.

Frappe

Carbon Frappe

A complete IBM Carbon Design System theme for Frappe and ERPNext, covering the desk, website, login, email, charts, and tables.

Frappe

Jailbreak

Power-user tools for Frappe and ERPNext admins, including bulk merge, item-to-variant conversion, and version restore, each gated behind a setting.

NixOS

frappe-nix

Reproducible Nix infrastructure for Frappe and ERPNext, from the development shell to OCI containers and a multi-site NixOS module.

“[PLACEHOLDER: client quote, pending approval]”
[PLACEHOLDER: name][PLACEHOLDER: role], Professional services (Avunu)

Have a challenge like this one?

Tell us how your work flows today and where it hurts. We'll tell you honestly whether ERPNext, Odoo, or something custom fits, and what a first phase could look like.