twentything Get in touch

Declared once · installed everywhere · versioned

Every CRM workspace, the same.

Twenty is an open-source CRM, and each customer gets a workspace of their own. Giving every one the same custom objects, fields and views means clicking them in again and again. twentything declares the workspace in a file and installs it over Twenty's API.

Act I

Clicking it together, per workspace.

An insurance broker's CRM needs to know about properties and vehicles. Twenty can model anything, one settings page at a time.

01 · An object

A custom object, by hand.

Settings, data model, new object, then each field with its type. That's a Property, in one workspace.

broker-aarhus.twenty.example/settings/objects/new
New object broker-aarhus · Data model
Name Property
Field address · Text
Field use · Select
Field built · Number
Save
Object "Property" created in broker-aarhus.

02 · The next workspace

Then again, in the next workspace.

Every broker has their own workspace, so the same object gets clicked in again. This time "built" became "year built".

broker-odense.twenty.example/settings/objects/new
New object broker-odense · Data model
Name Property
Field address · Text
Field year built · Number
Save
Object "Property" created in broker-odense, one field short.

03 · Or a plugin

Or inject code into the CRM.

The usual way to extend a CRM is a plugin running inside it: code to build, install per workspace and keep compatible with every upgrade.

~/crm-plugin
$ npm run build && npm run deploy -- --workspace broker-aarhus
deployed plugin v0.4.2 to broker-aarhus
$ npm run deploy -- --workspace broker-odense
error: plugin api v2 required, workspace runs v1

That was two workspaces of many.

clicks and fields
9
workspaces by hand
2
drift already
2
versions of the shape
0

Here's the same shape, with twentything.

Act II

The twentything way.

A server-driven installer: the shape lives in a file, and twentything makes each workspace match it through Twenty's GraphQL and REST APIs. Nothing is injected into the CRM.

01 · Declare

The workspace, in one file.

Objects, fields, relations and views, written once and kept in git, so the shape of every workspace has a history.

workspace.toml lines 1–16
# the shape every broker workspace should have. twentything makes it so.
[objects.property]
label = "Property"
fields = { address = "text", use = "select", built = "number", area_m2 = "number" }
[objects.vehicle]
label = "Vehicle"
fields = { plate = "text", kind = "select", first_registered = "date" }
[relations]
company_properties = { from = "company", to = "property", kind = "one-to-many" }
company_vehicles = { from = "company", to = "vehicle", kind = "one-to-many" }
[views.company]
show = ["name", "properties", "vehicles", "renewal_date"]

02 · Apply

Every workspace brought up to date.

twentything reads each workspace, compares it with the file, and creates only what's missing. The one that drifted gets its field back.

~/crm
$ twentything apply --all
broker-aarhus
+ object property (4 fields)
+ object vehicle (3 fields)
+ relation company → properties, company → vehicles
~ view company added properties, vehicles
broker-odense
~ field property.year_built → built
+ field property.area_m2
broker-kolding already declared
3 workspaces · 6 changes · 0 errors

03 · Again

And again changes nothing.

It's idempotent: run it twice, or after an interruption, and the workspaces end in the same state. A new workspace is the same command.

~/crm
$ twentything apply --all
broker-aarhus already declared
broker-odense already declared
broker-kolding already declared
3 workspaces · 0 changes

Act III

The bigger picture.

twentything is the other half of an idea: get Denmark's hard-to-reach business data into the CRM a broker already works in.

  1. 1

    Fetch

    fetchthing turns CVR, BBR and DMR into one clean API, so a company's buildings and vehicles arrive in plain words.

  2. 2

    Shape the CRM

    twentything gives every broker's workspace the objects and fields to hold that data, declared once and installed the same everywhere.

  3. 3

    Use it

    A broker opens a customer in Twenty and sees their properties and vehicles next to the renewal date.

Running more than one CRM workspace?

Tell me what they should have in common. Get in touch.

Get in touch