Build a Salesforce Replacement
For revenue and ops teams tired of per-seat CRM pricing and a platform they can't leave.
Who this is for: revenue and ops leaders paying per-seat for a CRM you can't leave, and the engineers who'll build the replacement.
A CRM is not magic. It's a database of records, a workflow engine for lifecycles, an auth model for who-sees-what, and a UI. Salesforce charges you for a runtime that bundles those four things and locks the doors. On kilter the four are catalog services you own, and the application that sits on top is small enough that an agent can write most of it.
The recipe
- Scaffold.
kilter init crm— one project, one repo. - Declare the substrate in
kilter.yaml:postgres(accounts, contacts, deals),ory(identity + roles),temporal(lead → qualified → won, renewals, approvals),typesense(search across everything). - Model records with Row-Level Security. The database decides which reps
see which accounts — an RLS policy, not an
ifstatement in seventeen handlers. - Put every lifecycle in a Temporal workflow. A deal can't jump from "lead" to "won" because someone hit the wrong endpoint; the workflow is the only door, and it's audited.
- Run it whole, locally.
kilter upboots the same postgres, auth, and workflow images production runs — your green light means something. - Ship.
kilter deploy. You're live in production, Org Only: your sales and ops team sign in through OIDC, and nobody outside the org can reach it.
Need a customer or partner portal, a public web-to-lead form, or a report an outside auditor can see? Hit Promote — it kicks off the promotion workflow that opens external access (and any production data access) under approval, so exposure is a decision, not an accident.
That's a CRM your team owns: no per-seat tax, no bundle you can't escape, and
kilter eject hands you standard Kubernetes manifests the day you want to
leave.