Applications, the components inside them, their interfaces, and what is
deployed where. Pipelines write in what shipped. Every record shows who
changed it and when. Impact questions get answered from the graph, not
the hallway.
Spreadsheets, wiki diagrams and fact sheets all share one flaw: a person
has to remember to update them. Nobody does, so the map stops being
trusted, and every impact question goes back to asking around.
Before
The diagram in Confluence says v2.11 is in production.
It was, in March. Three releases later nobody opened the page.
With Vordai
The pipeline recorded v2.13.4 → prod at 09:41 yesterday.
Artifacts and Deployments are written by the build, not by a
person. Current version per environment and the full history are
both one query.
Before
"If the ledger goes down, what else breaks?"
Answered by a Slack thread, two architects, and a guess.
With Vordai
Every interface a component produces or consumes is an edge.
Impact is a traversal from one bound node. Traffic seen in traces
but not yet confirmed shows up as Discovered, never as fact.
Before
Someone changed the owner field. Nobody knows who.
The tool has an audit log. It is a CSV export you request from the vendor.
With Vordai
Every record page shows who changed it, when, and what.
The change history is append-only and lives beside the record.
A deleted record leaves a tombstone at its address, not a 404.
How it works
People model. Machines record. The graph answers.
The inventory stays true because the parts that change daily are written
by the things that change them. Architects decide what exists; pipelines
say what shipped.
1
Model the estate
Applications, the Components inside them, the Interfaces between
them, the Capabilities they support. Each is one record with one
owner of its edges. A Component can belong to more than one
Application, because shared databases exist.
A build records its Artifact. A deploy records the Deployment: which
component, which environment, which version, when, by whom. A
promotion into a gated environment waits for an approver.
# from the deploy jobPOST /vordai/deployments
{ "component": "payments-api",
"environment": "prod",
"artifactVersion": "v2.13.4" }
→ 201 · recorded by pipeline · 09:41
3
Ask the graph
Every relationship is an edge in a graph store, so the questions
that used to take a meeting are a traversal. The answers are computed
when you ask, never stored to go stale.
What consumes anything the ledger produces?
Which components run a release past end-of-life?
Which capabilities does one deprecated application still carry?
What is in UAT right now, and what was there in June?
Capabilities
Built for the questions you actually get asked.
Not a feature list. Six jobs an architect has to do this quarter, and the
part of Vordai that does them.
Job: know what an application is made of
Components inside Applications
An Application is what the business names. A Component is what you
deploy: the service, the web front end, the database. Vordai models
both, and the edge between them is many-to-many, so a database two
applications share is one record, not two lies.
ComponentTypeLifecycle
payments-apiServiceActive
payments-webWEBActive
payments-db · sharedDBActive
Job: say what is in production, and prove it
Deployments as a history log
Each deployment is a row: component, environment, version, timestamp,
who. Current version per environment and the full history are both
one question. Nothing is overwritten.
pipeline payments-api v2.13.4 → prod
pipeline payments-api v2.13.3 → prod
pipeline payments-api v2.12.9 → prod
Job: gate what ships
Promotion approvals per environment
Mark an environment as gated and a promotion into it waits for an
approver. Approving is a separate authority from administering, so
the person who can delete an application is not automatically the
person who can ship to production.
v2.14.0 → prodAwaiting approval
v5.2.1 → uatApproved
Job: answer "who changed this?"
A name on every change
The change history is append-only and shown on the record itself,
relationship changes included on both ends. A deleted record leaves
a tombstone at its address saying what it was and who removed it.
m.okafor health Degraded → Healthy
r.lindqvist confirmed interface
m.okafor added environment sit
Job: retire the risky package before it retires you
Release end-of-life, computed
A component depends on a versioned release of a package. Ask which
releases expire in the next ninety days and the answer is computed
against today's clock, never stored to go stale.
spring-boot 2.7EOL in 31 days
node 18EOL in 74 days
Job: see the whole estate, then the one thing
Inventory at estate scale
Every list pages, searches, sorts and filters on governed
vocabularies, with facets counted server-side. Lifecycle and health
stay two separate badges everywhere, because a deprecated application
can be perfectly healthy, and a live one can be down.
ApplicationLifecycleHealthEnvs
Legacy Card SwitchDeprecatedHealthyprod
Customer LedgerActiveDegradeddev uat prod
Fraud ScoringIn developmentUnknowndev
Job: know what you own, not only what you run
An asset register beside the graph
Cameras, gateways, racks: the things the organisation has. Typed,
imported in bulk, filtered at scale, and linked to the environments
and deployments that run on them.
41,902 assetsfirmware < 4.2site: Leeds DC
What we can stand behind
No logos yet. Specifics instead.
Vordai is pre-release and has no customers to quote. What follows is how
the product behaves, measured where a number is given, and one case
labelled as the illustration it is.
Architecture
1authority for state
One domain service owns every rule. The browser hides buttons; it
never decides. If a validation is not enforced there, it does not
exist.
Security
0tokens in the browser
Sign-in is OIDC against your identity provider, terminated
server-side. The session is an opaque httpOnly cookie. The domain
service is never internet-facing.
Scale, measured
267ms page turn at 40,000 nodes
A keyset page of Applications over a 40,000-node label, on a
developer laptop against the graph store. Pre-release figure; we will
publish the method.
Illustrative case, not a customer
A bank with 1,200 applications and one shared ledger database.
The ledger database is a Component contained by four Applications.
Any tool that assumes one application per component either
duplicates it or picks a winner. Vordai holds one record with
four containing edges, and when a pipeline asks where to deploy,
the four are consulted and a disagreement is an honest "no
answer" rather than a guess.
When the card switch is finally retired, its record stays as a
tombstone, its successor edge points at the gateway that replaced
it, and the capabilities it carried roll up to the new one the
same afternoon.
Built with Rust, PostgreSQL, a standalone graph store, and a Lit front end.
Self-hosted in your network.
Early access
Free while we build it with you.
$0during early access · self-hosted
You run it in your own network. We help you stand it up.
We ask for an hour a month of honest feedback.
Pricing will be set with early-access teams, in the open, before anyone is charged.
Your data stays yours: PostgreSQL and a graph store you can back up and read.
Not open yet. We are building Vordai with a small
number of teams first, and there is nothing to sign up to while that
is true. The terms above are what early access will be when it opens.
Fair questions
The objections a careful buyer has.
We already have LeanIX. Why would we move?
Three things LeanIX does not do: model the Components inside an
Application, let a pipeline record Artifacts and Deployments
directly, and show an append-only change history on every record.
If your pain is that the inventory is never current, those are the
three that fix it.
Migration tooling is not built yet. Today the path is the API and
CSV import for assets. We will say so plainly rather than sell you
a connector that does not exist.
Will architects actually keep it updated?
They will not, and the design does not depend on it. What changes
daily, what is built and what is deployed, is written by the
pipeline. What changes quarterly, what exists and what it supports,
is what people model. Discovered interfaces from traces show up
for review rather than being silently added.
Where does our data live? Can we self-host?
Self-hosted only, today. Identity, roles, workflow and the change
history live in PostgreSQL. The architecture graph lives in a
standalone graph server. Both are yours to back up and query. The
domain service is never exposed to the internet; only the small
front-end service is.
Does it do cost, ownership, surveys and reporting?
Not yet. Ownership, cost, risk and surveys are designed and not
built. The reports that exist are the ones the graph answers
directly: impact, capability rollups, expiring releases, an asset
map. We would rather tell you that than have you find out.
How does sign-in work with our identity provider?
Standard OIDC with PKCE against any issuer that supports discovery.
Auth0 is what it is developed against; pointing it elsewhere is a
configuration change. Tokens are held server-side. The browser
only ever sees an opaque session cookie.
How big an estate can it hold?
Every inventory list pages server-side and has been measured
against a label of 40,000 nodes. Asset registers of the same order
are the reason assets sit in PostgreSQL rather than the graph. It is
pre-release software; if your estate is larger than that, we would
like to test against it with you.
Know before you are asked.
Bring one application and its pipeline. In an afternoon you will have a record
that is still true next quarter.