A manufacturer's next dollar is rarely a new logo — it's the machine you already shipped. The service contract that lapsed, the warranty about to expire, the line running at capacity that wants a second unit. But a vanilla CRM models deals, not deployed assets, so that revenue is invisible: no one can answer "which customers own a press but have no service contract, and whose warranty expires this quarter?" This post makes that question a one-line query.

The problem — and the money

A channel + equipment business sells through dealers and earns for a decade after the sale. The buyer here is the RevOps or service lead who needs the install base and the dealer network inside the CRM, so renewal, upsell, and territory coverage are queries — not spreadsheets stitched to a separate field-service system. The payoff is concrete: surface the $25,000 EU line whose warranty ends 2026-05-01 as an upsell today, and rank the dealer who actually covers that territory above the one who doesn't. That's why this overlay exists — it points the CRM at the install base instead of at net-new firmographics.

This is the CRM suite + the manufacturing overlay. The seven base skills — core, quote/CPQ, account-360, campaign-to-lead and the rest — are unchanged. The overlay only adds: two tables, two columns, a weighted edge kind, and one changed gate. Same bucket, one copy of the rows.

What manufacturing adds

A small, additive diff on top of the suite (skill: crm/manufacturing → the crm/overlays/manufacturing contract):

  • Two tablesdealers (key dealer_id: the channel — who sells and services in which territory) and install_base (key asset_id: deployed equipment with a value and a warranty_end — the service/upsell surface).
  • Two columns on the crm/core accounts master — channel_type (direct | dealer | distributor) and territory — added with ALTER TABLE … ADD COLUMN over the pg wire. A column-add, never a second copy.
  • One weighted edge kindserves_territory (dealer account → customer account) inserted into the suite's crm_edge, weight = 0.9 same-territory, 0.3 cross-territory — a ranked edge read in SQL.
  • One gate change — account-360's next-best-action prompt targets install-base service + upsell (owns product A but no service contract; warranty near) instead of net-new logos. Same JSON contract.
  • One preset — quote/CPQ gains an ordered status and a lead_time_days on quote lines (the quote-to-order leg).

Apply the diff — an ALTER, two new tables, and seed the channel plus two assets:

You

In the crm bucket, apply the manufacturing overlay: ALTER accounts ADD channel_type + territory; create dealers (key dealer_id) and install_base (key asset_id, incl. value double + warranty_end); add Initech as an NA dealer, tag Acme EU's territory, and register a $40,000 NA press (warranty 2027) and a $25,000 EU line (warranty_end 2026-05-01).

DODIL MCP tools called
data_pgdata_table_createdata_table_upsert
Agent

Added channel_type + territory to accounts (ALTER over pg — the master, not a copy). Created dealers + install_base. Seeded Initech (dealer, NA), tagged acme.eu (EU), and two assets: asset-na-1 $40,000 (warranty 2027-06-01) and asset-eu-1 $25,000 (warranty_end 2026-05-01 — the upsell target).

Now the payoff read — the territory install-base rollup and the weighted dealer ranking:

You

In crm, roll up install-base value by territory with a count of warranties expiring soon, then rank the serves_territory dealer edges by weight.

DODIL MCP tools called
data_sqldata_pg
Agent

NA = 1 asset $40,000, 0 expiring. EU = 1 asset $25,000, 1 expiring (warranty_end 2026-05-01 — the service/upsell target). The serves_territory edges rank Initech (NA, 0.9) above Acme (EU, 0.3): the dealer who actually covers the territory wins.

The next-best-action gate (account-360) then reads this surface directly: whose warranty is near, who owns a machine but no service contract — the whitespace source is install_base, not a lookalike list. The gate mechanism is unchanged from the base skill; only the prompt shifts.

Scaffold it — the one-shot

With the DODIL MCP connected, one prompt composes the suite and this overlay:

Scaffold a CRM for my manufacturing company — the CRM suite plus the manufacturing overlay.
 
Base: the full crm/core suite (accounts, contacts, leads, opportunities, activities; the
account-hierarchy graph; the quote/CPQ + account-360 + campaign-to-lead workflows).
 
Then apply the manufacturing overlay on the SAME bucket:
1. ALTER accounts ADD channel_type + territory (pg wire — the master, not a copy).
2. Create dealers (key dealer_id) and install_base (key asset_id, value double + warranty_end).
3. Insert serves_territory edges into crm_edge (weight 0.9 same-territory, 0.3 cross), then
   (re-)CREATE crm_graph so the new edges are snapshotted.
4. Point account-360's next-best-action prompt at install-base service/upsell (owns the machine,
   lacks the service contract; warranty near) — same JSON contract.
5. Add an `ordered` status + quote_lines.lead_time_days for the quote-to-order leg.
Seed the demo above and show the territory rollup + the dealer-edge ranking.

Verify

Every number below was live-validated on 2026-09-02 (org IHDIASH, throwaway bucket, torn down after):

# columns land + partial-merge sets them
dodil data pg  -b "$BUCKET" "ALTER TABLE accounts ADD COLUMN channel_type VARCHAR"   # + territory
# territory rollup: NA = $40,000 (0 expiring), EU = $25,000 (1 expiring, warranty_end 2026-05-01)
dodil data sql -b "$BUCKET" "SELECT a.territory, sum(i.value) FROM install_base i
  JOIN accounts a ON a.org_domain = i.account_domain GROUP BY a.territory"
# weighted dealer graph: Bolt MATCH (d)-[:serves_territory]->(a) WHERE id(d)=3 -> 2 account neighbors;
# the SQL edge-rank puts Initech (NA, 0.9) above Acme (EU, 0.3)
dodil data bolt -b "$BUCKET" -g crm_graph "MATCH (d)-[:serves_territory]->(a) WHERE id(d)=3 RETURN a"

The ALTER-add mechanism, the two tables, the $40k/$25k territory rollup, and the weighted dealer ranking are proven live. The quote-to-order ordered status and the install-base NBA prompt reuse mechanisms already proven in the base quote/CPQ and account-360 skills.

Connect your tools

Everything the overlay wrote lives in the one DataK3 bucket, reachable by your own stack — a field-service dashboard reads install_base over the Postgres wire; a BI tool charts the territory rollup; a Bolt/Neo4j driver walks the dealer graph. data connect crm prints the endpoints. Full, live-validated walkthrough: Connect your tools.

Composes

This page is not a fork of the CRM — it is a composition:

  • Base: the seven CRM suite skills (crm/core, crm/quote-cpq, crm/account-360, crm/campaign-to-lead, …) — the system of record, unchanged.
  • Overlay: crm/overlays/manufacturing — the additive diff above (two tables, two columns, the weighted serves_territory edge, the install-base NBA gate).

Read the base to learn the mechanics; this overlay is the small, industry-specific diff on top.