CADENCE — Running the Business on ERPNext (business-ops.md)

Operational playbook for running CADENCE — a productized upgrade-advisory consultancy whose revenue is a subscription to a signed advisory feed — as a solo company on ERPNext. This is a plan, not a record of transactions: no real customers, invoices, or money exist yet. Every factual claim about ERPNext/Frappe is cited; where a number could not be verified from a primary source it is flagged as such rather than invented. Prices are as listed at the time of writing (June 2026) and will drift — re-check before committing budget.

Executive summary

Hosting recommendation: self-host ERPNext on the founder’s existing Proxmox, in a dedicated LXC or VM running the official frappe_docker containers, for roughly the cost of ~4 GB RAM / 2 vCPU / 20—​40 GB disk plus the founder’s time — versus Frappe Cloud’s ~$10—​25/mo entry tiers (Frappe Cloud pricing). The founder already runs Proxmox + Docker, so the marginal infra cost is near-zero and the irony is on-brand: ERPNext is itself a self-hosted app CADENCE will later advise on (dogfood customer #0). The honest caveat is that self-hosting trades dollars for founder time on backups and the bench upgrade treadmill — so keep Frappe Cloud as a one-click fallback if that time ever costs more than the fee.

How CADENCE is modeled, in one line: each feed-module tier is an Item → wrapped in a Subscription Plan → attached to a Subscription per customer, which auto-generates a recurring Sales Invoice every billing cycle (Subscription docs); leads flow Lead → Opportunity → Quotation → Sales Order → Sales Invoice through CRM/Selling (Selling flow). The pure-software SKUs need no BOM; a BOM/Manufacturing only appears if a hardware appliance is ever shipped.


1. Hosting ERPNext — options, costs, recommendation

Option A — Frappe Cloud (managed)

Frappe Cloud is the first-party managed host, run by Frappe (the makers of ERPNext). It offers a 14-day free trial and two product shapes (Frappe Cloud pricing):

  • Site plans (shared). A single site on shared infrastructure, billed on a CPU-hours/day quota rather than actual usage — you pay for the quota you reserve, charged daily as monthly_price ÷ 30 (Demystifying Frappe Cloud Pricing). Published shared-plan tiers:

    Monthly (USD) CPU hours/day

    $10

    1 hr

    $25

    2 hrs

    $50

    4 hrs

    $100

    8 hrs

    $200

    16 hrs

    $500

    32 hrs

    $1000

    64 hrs

    (Demystifying Frappe Cloud Pricing). The official pricing page states site plans "start around $5/mo" (₹410) with a smaller entry allocation of ~0.5 CPU-hr/day, 0.2 GB database, 2 GB storage (Frappe Cloud pricing). Note / could not verify: Frappe does not publish a clean RAM/disk-per-tier table on the pages reviewed — the shared tiers are expressed primarily as CPU-hour quotas, so treat RAM/disk as "shared, not guaranteed."

  • Private bench. Lets you deploy custom apps on a dedicated bench; starts around $25/mo (secondary: Dexciss hosting-cost analysis).

  • Server / dedicated plans. A whole virtual machine hosting unlimited sites and benches, with server snapshots, resource alerts, and an optional priority-SLA warranty; starts $20/mo on the official page (Frappe Cloud pricing). A commonly-cited dedicated configuration is ~$200/mo for 2 vCPU / 4 GB RAM / 25 GB storage, scaling to ~$400/mo (secondary: Dexciss).

Included on all plans: managed backups (offsite), one-click updates/restores, SSL, monitoring, custom domain, and a "product warranty" (support) (Frappe Cloud pricing). Marketplace-app cost model: paid marketplace apps are billed on top of the hosting plan as their own per-site subscription. CADENCE needs none of these for v1 (stock Accounting/CRM/Selling/ Subscription/Projects suffice), so this line item is effectively €0 — flagging that I could not locate an authoritative per-app price list; verify if a paid app is ever added.

Option B — Self-host on the founder’s Proxmox / Docker

Two viable paths:

  1. Official frappe_docker containers in a Proxmox VM or LXC. This is the Frappe-maintained deployment and the path with the most upstream support. There is no official Proxmox VE Helper-Script for ERPNext — a community request (#12480, March 2026) exists but sits unanswered with no script yet (ProxmoxVE Helper-Scripts discussion #12480). So expect a manual frappe_docker compose bring-up, not a one-liner.

  2. Manual bench install in an LXC (Python + Node + MariaDB + Redis + bench + supervisor + nginx). Doable but, by the community’s own description, "notoriously difficult" to coordinate (discussion #12480) — prefer the Docker path.

Rough resource needs. A single-tenant ERPNext for a solo founder is comfortable at roughly 4 GB RAM / 2 vCPU / 20—​40 GB disk (mirrors the entry dedicated Frappe Cloud shape of 2 vCPU / 4 GB / 25 GB cited above). 2 GB RAM is the bare floor and will swap under any real load; budget 4 GB. Flagging: Frappe does not publish a single authoritative minimum-spec number for self-hosting in the sources reviewed — 4 GB/2 vCPU is a defensible engineering estimate, not a quoted requirement; size up if you run Frappe HR or heavy reports.

Real ongoing cost: essentially the founder’s time plus electricity on already-running Proxmox hardware. The cash cost is marginal; the true cost is operational labour (below).

Recommendation — self-host on Proxmox via frappe_docker

For a solo founder who already operates Proxmox + Docker, self-host. Rationale:

  • Marginal cost ≈ €0. The hardware, hypervisor, and ops muscle already exist; Frappe Cloud’s $10—​25/mo (and the $200/mo dedicated tier you’d realistically want for isolation) is pure avoidable spend pre-revenue (Frappe Cloud pricing).

  • Dogfood. ERPNext becomes CADENCE customer #0 — a real self-hosted Proxmox/Docker app whose upgrades CADENCE will eventually advise on. That is product research disguised as ops.

  • Data control. Customer/financial data stays on infra the founder already secures — congruent with CADENCE’s whole "your data stays local" thesis.

The honest trade-off: self-hosting moves predictable dollars onto unpredictable founder-hours for backups, monitoring, and upgrades. The escape hatch is real and cheap: Frappe Cloud will import a self-hosted site, so if ops time ever exceeds the fee, migrate. Decision rule: start self-hosted; revisit if backup/upgrade toil exceeds ~2 hrs/month.

Backup + upgrade story

  • Backups (defense in depth):

    1. Frappe-native: bench backup --with-files (DB + public/private files) on a cron, plus bench site backups; ship the dumps off the node.

    2. Proxmox-native: Proxmox Backup Server / vzdump snapshots of the whole LXC/VM to a separate datastore. Belt and braces — the VM snapshot is the disaster-recovery floor, the bench backup is the granular restore.

    3. Test a restore quarterly. An untested backup is a hope, not a backup.

  • Upgrades: ERPNext upgrades run through bench (e.g. bench update, bench migrate), or by bumping image tags with frappe_docker. Always VM-snapshot immediately before so a failed migration is a one-click rollback. Pin a known-good version and upgrade on your cadence — which is, pointedly, exactly the judgment CADENCE sells. (Self-evident dogfood: author a CADENCE advisory for "ERPNext vX.Y — wait for the .1 patch" once the ERPNext module exists.)


2. Modeling CADENCE in ERPNext

Subscriptions = the revenue engine

ERPNext’s Subscription feature is purpose-built for recurring billing and is the spine of CADENCE’s revenue. Three doctypes interlock (Subscription docs):

  • Item — one per sellable thing. Create non-stock service Items: CADENCE Pro — Proxmox/Ceph, CADENCE Pro — Nextcloud, CADENCE MSP — per managed estate, CADENCE Compliance. Mark them as service items (not maintained in stock, no warehouse).

  • Subscription Plan — each plan links to one Item and carries its price + billing interval; you may keep multiple plans per Item (e.g. monthly vs annual) (Subscription docs).

  • Subscription — one per customer; references the customer and one or more Subscription Plans (all plans in a single Subscription must share the same billing cycle). It owns the recurring behaviour (Subscription docs).

How recurring invoicing actually runs: a background scheduler processes all Subscriptions on a recurring interval (the docs describe periodic processing roughly hourly), advances each Subscription’s status, and auto-creates a Sales Invoice when a new period is due. Invoices are submitted automatically by default ("Submit Invoice Automatically"), or left as drafts if you disable that. Relevant controls: Generate Invoice At Beginning Of Period, Generate New Invoices Past Due Date, Days Until Due (payment deadline), Follow Calendar Months (align to month boundaries even when the start date is mid-month), and Cancel At End Of Period (stop billing after the current cycle) (Subscription docs). Cancellation stops future invoice generation immediately (Subscription docs). Flagging: the exact scheduler cadence is described as "every ~hour" in the docs reviewed but the precise cron is not pinned — treat invoice timing as "within the hour," not to-the-second.

This maps cleanly to CADENCE’s decided tiers:

Tier Price (decided) ERPNext shape

Community

€0

Not a Subscription. Track as a Lead/Contact; no billing doc (see below).

Pro

€9—​19 / estate / mo

Item → Subscription Plan (monthly) → Subscription per customer

MSP / Business

€49—​149 / managed estate / mo

Item priced per-estate; quantity = #estates on the plan/Subscription

Compliance

€100—​500+ / mo custom

Quotation → negotiated Subscription Plan price → Subscription

Lead → cash flow (CRM + Selling)

ERPNext splits presales (CRM) from active selling (Selling) (Selling flow). The pipeline:

Lead → Opportunity → Quotation → Sales Order → Sales Invoice (Lead-to-quotation flow).

  • Lead — an inbound prospect (from a forum post, r/selfhosted DM, landing-page signup). From a Lead you can spawn an Opportunity, Customer, or Quotation with fields copied over (Lead docs).

  • Opportunity — a qualified Lead worth pursuing (Opportunity docs).

  • Quotation — the offer (essential for Compliance/custom and MSP deals); on acceptance it converts to a Sales Order, which feeds a Sales Invoice; the Lead status flips to Converted once a Sales Order exists against its Quotation (Selling flow).

For self-serve Pro, you can skip the Quotation/Sales-Order ceremony entirely: create the Customer and stand up a Subscription directly — the Subscription emits the Sales Invoices on its own, no per-cycle manual document.

Free Community tier and trials

  • Community (€0): do not create a Subscription (a €0 recurring invoice is noise). Keep Community users as Leads or Contacts, tagged community, so they live in the CRM funnel as upgrade targets without polluting AR or MRR. The product gates Community (single module, slow feed) — ERPNext just tracks the relationship.

  • Trials: two clean patterns — 

    1. Set the Subscription’s trial start/end dates so the first invoice only generates after the trial window (Subscriptions support a trial period), or

    2. Run the trial as a tagged Lead and convert to a paid Subscription when it closes. Pattern (2) keeps pre-paid prospects out of AR; prefer it for hand-sold deals.

Dunning (the SaaS "you didn’t pay" loop)

ERPNext has a first-class Dunning doctype: select a customer, Fetch Overdue Payments to pull all overdue Sales Invoices, attach a Dunning Type (e.g. First Notice = no fee; Second Notice = fee + interest), and send the reminder. A Dunning is unresolved on submit and flips to resolved once payment (incl. interest/fees) is recorded via a Payment Entry (Dunning docs). For a low-touch SaaS, define two or three Dunning Types and run them on a light schedule; combine with the Subscription’s Generate New Invoices Past Due Date flag to decide whether billing continues during arrears.

Tax / VAT (EU, B2B reverse-charge)

ERPNext supports EU VAT including reverse-charge for B2B via Tax Categories (per customer/ supplier region: EU / domestic / Rest-of-World) and Item Tax Templates mapping the right rate to the right account; reverse-charge is configured by applying the rate to a purchase-VAT account and a negative percentage to a sales-VAT account, and the invoice must carry the legally-required reverse-charge note (secondary, ERPNext config: GitHub/community guidance). Honest scope note: the capability exists and is widely used, but correct EU VAT/MOSS-OSS treatment for cross-border digital services is genuinely fiddly (place-of-supply, B2B vs B2C, reverse-charge wording) — set up the Tax Templates, but get an accountant to validate the configuration before invoicing real EU customers. Do not treat this doc as tax advice.


3. BOMs & product management

Software SKUs: no BOM — full stop

CADENCE’s products are non-stock service subscriptions (a signed feed). They are Items + Subscription Plans, nothing more. No Bill of Materials, no Manufacturing, no warehouses, no Work Orders. Anyone reaching for the Manufacturing module to model a feed subscription is over-engineering it. Skip it.

IF a hardware appliance is ever shipped

The optional future SKU — the CADENCE client preloaded on hardware, paired with a Nitrokey 3C for feed-signing/identity — is the only thing that justifies Manufacturing:

  • Model the appliance as an Item with a BOM. A Bill of Materials lists the components (mini-PC / SBC, storage, the Nitrokey unit, pre-loaded OS image) and is the master for building a Work Order (BOM docs).

  • If multiple hardware configs ship (e.g. "Appliance — Small" vs "Appliance — Rack"), use Item Variants: a template Item with Has Variants + attributes, and a BOM Template so Work Orders pick the specific variant and pull the right sub-components (Item Variants).

  • The Nitrokey is just another BOM line-item (a purchased component) — no special handling.

Product management = Item master + Projects (not BOM)

Roadmap and the advisory-authoring cadence live in Projects, not Manufacturing:

  • Roadmap → a Project ("CADENCE v1 launch") with Tasks (feed schema, modules, adapters, UI, notifications), tracked to milestones.

  • Advisory-authoring cadence (the recurring "review Proxmox/Ceph/Nextcloud releases and publish verdicts" work — which is the product and the main operating expense) → either a recurring Project/Task, or, more naturally, a Maintenance Schedule: pick a periodicity (Weekly / Monthly / Quarterly), and ERPNext generates a Maintenance Visit record per cycle as the proof-of-work that the feed was reviewed and shipped on time (Maintenance Schedule docs). Each Maintenance Visit then doubles as an auditable "advisory was reviewed on date X" record — which is itself a compliance selling point for CADENCE.

What lives where:

  • Item master — every sellable SKU (software subscriptions; hardware variants if/when).

  • Subscription Plan / Subscription — recurring billing for the software SKUs.

  • BOM / Manufacturing — only the hardware appliance, if it ever exists.

  • Projects + Tasks — roadmap and one-off product work.

  • Maintenance Schedule / Visit — the recurring advisory-authoring cadence + its audit trail.


4. CEO / founder operating loop

Minimal module set (solo)

Run lean. Enable only:

  1. Accounting — Sales Invoices (incl. the auto-generated subscription invoices), Payment Entries, Tax Templates, P&L / Balance Sheet / Cash Flow (financial reports overview).

  2. CRM + Selling — Lead → Opportunity → Quotation → Sales Order pipeline (Selling flow).

  3. Subscriptions — the recurring-revenue engine (§2).

  4. Projects — roadmap + advisory-authoring cadence (§3).

Defer until hiring: HR/Payroll, Stock/Inventory, Manufacturing (until/unless hardware), Support/Helpdesk (until ticket volume justifies it). Turning these off keeps the workspace uncluttered for one person.

Day-to-day / weekly operating loop

  • Daily (5 min): glance at Accounts Receivable for newly-overdue invoices; trigger a Dunning if anything crosses the line (§2). Triage inbound Leads from forums/landing page.

  • Weekly: advance the CRM pipeline (Opportunities → Quotations); review the Subscription list for upcoming renewals, cancellations, and any failed/missed invoice generation.

  • On the advisory cadence (the core operating ritual): work the Maintenance Schedule — review upstream Proxmox/Ceph/Nextcloud releases, author + sign verdicts, ship the feed, and close the period’s Maintenance Visit. This cadence is CADENCE; protect it. Falling behind here is the real churn risk, not infra.

  • Monthly: close the books (reconcile payments), read the P&L, recompute MRR/churn/runway, and re-prioritise the roadmap Project.

Reports / dashboards the CEO watches

ERPNext Dashboards assemble Dashboard Charts + number cards; a chart can be a simple Count/Sum/Average/Group-By over a doctype, or be backed by a saved Report (Dashboard docs). Reports come in four flavours, from no-code Report Builder (single doctype) up to Query/Script Reports for multi-doctype SQL/Python (Making custom reports). Map the founder KPIs:

KPI ERPNext source Build effort

AR / overdue invoices

Built-in Accounts Receivable report

None — stock report

P&L / profit / runway inputs

Built-in Profit and Loss statement

None — stock report

Active subscriptions / renewals

Subscription list view (filter by status)

None — list view

Cash position

Cash Flow statement

None — stock report

MRR (monthly recurring revenue)

Custom report summing active Subscription Plan amounts

Custom — Query/Script Report, then surface as a Dashboard Chart

Churn rate

Custom report over cancelled Subscriptions per period

Custom — Query/Script Report

Advisory-authoring backlog

Maintenance Schedule (overdue Visits) and/or open Tasks

None — list view / filter

Honest gap: ERPNext ships excellent stock financial reports (AR, P&L, Cash Flow) and a usable dashboard builder, but it has no native "MRR" or "churn" SaaS-metric report — those require a custom Query/Script Report aggregating the Subscription/Subscription-Plan data, then pinned to a Dashboard Chart (Dashboard docs; Making custom reports). Budget a small one-time effort to write those two reports; everything else the CEO watches is out-of-the-box. Until those custom reports exist, MRR can be eyeballed from the Subscription list × plan price — adequate at low customer counts.


Open items / things I could not fully verify

  • Frappe Cloud RAM/disk per shared tier — published primarily as CPU-hours/day; no clean RAM/disk-per-tier table found. Verify on the live pricing page before sizing.

  • Frappe Cloud marketplace per-app prices — confirmed they bill on top of hosting, but no authoritative price list located. CADENCE needs none for v1, so low risk.

  • Self-hosting minimum spec — 4 GB RAM / 2 vCPU / 20—​40 GB disk is an engineering estimate anchored to Frappe Cloud’s entry dedicated shape, not a Frappe-quoted minimum.

  • Subscription scheduler exact cadence — docs say ~hourly; precise cron not pinned.

  • EU VAT digital-services correctness — ERPNext can model it (Tax Categories + Item Tax Templates), but place-of-supply/OSS for cross-border digital services needs accountant sign-off. This document is not tax advice.


Sources