DILLO FLOWS Sign in

29Court · Dillo’s perfect companion tool

You define it in three files. Everything flows from that.

Dillo holds your backend still: your files, your database, your functions, armored. Dillo Flows is the companion that moves everything around it. Data flows to the places you name. Triggers start it. Relay hands it off and fans it out. And when a person has to decide, the flow stops, waits, and puts their answer on the record.

One account for everything 29Court · your flows live in your own space · provider keys are yours, sealed on paste, never shown again.

Fetch a postGET jsonplaceholder.typicode.com/posts/{the one you asked for}
Did it come back?The check: the lookup’s status is 200.
When it matchedPull the title, then say it.

Output, verbatim from the run: “Found the post: ‘sunt aut facere repellat provident occaecati excepturi optio reprehenderit’”

When it didn’t matchSay what actually happened.

Output, verbatim from the run: “No post came back — the lookup answered status 404.”

A real run, both ways. The flow fetched, checked what came back, and took the path the data chose. Both outputs are quoted from the run itself. This demo is waiting in your space when you sign in.

The companion

Dillo holds it still. Flows moves it.

Dillo’s promise is the definition: three files describe your whole backend, and everything stands on them. Flows keeps the same discipline for everything that moves. A flow is a definition too, and it is yours outright.

schema.tsWhat your data looks like, and who can touch it. Dillo enforces it on every request.
backend.tsWhat your app does. Your functions, validated going in and coming out, callable from your own UI.
armadillo.config.tsWhere it runs. Your infrastructure, under your control, and the box comes with you if you leave.
A flow is one file tooThe trigger that starts it, the steps that carry it, the rules checked on the way in and out of every step. Export it as one checksummed bundle and it runs anywhere the format runs. No platform required.

Dillo’s three files, named exactly as Dillo names them. The backend is at dillo.29court.com.

What it does

Four movements. Nothing decorative.

01 · Data flows to places

A flow fetches from any API on the web and carries what it finds onward: into the next step, out to your Dillo board, onto your event feed, or back to whoever called it. Your connections present their sealed secrets by name alone. A key is never pasted into a flow.

02 · Triggers start it

A webhook knocks and a run begins. An event lands and the flows watching for it consume it. You press run. Or the flow is published, and a call to its own endpoint is the trigger. Events are typed, deduplicated, and carry their provenance: what changed, where it came from, when. No flow step polls a mailbox or an API to see if anything changed. Change arrives as an event, or it does not arrive.

03 · Relay hands it off

One piece of work, handed onward. Relay fans a single message out to every channel at once, passes a result onward to your board, your feed, or the next person, and the record shows what each leg actually did. The relay demo below is pre-rendered in your space exactly as a fresh account sees it: one channel live, three iced.

The message“The 4pm moved to 5. Bring the deck.” Written once.
Email ● Live · provenSent by the house mailer. Proven by a real test send.
Voice call IcedBland AI calls and speaks it. Wakes when your Bland key validates.
Text IcedTelnyx texts it. Wakes when your Telnyx key validates.
Fax IcedSinch faxes it. Wakes when your Sinch keys validate. The live send is the one channel not yet proven end to end.
The recordEvery channel’s result (sent, failed, or iced) written into the run, where you can read it.

A dispatch over iced channels still runs the live ones and reports each iced channel by name. Ice is enforced on the server, in the engine. Never faked.

04 · People decide

Any step can stop and ask: an approval, a question, a task, a choice. A review gate can sit in front of any step at all, even a machine step. The run parks, durably, and a signed link carries the question to the person. Rejecting requires a comment, enforced by the server. The decision (who, when, what they said) resumes the run and stays in its audit trail.

Text-to-workflow

Say it. It’s drafted.

Describe the workflow in plain words. The house drafter builds a real flow: the same steps, the same engine, nothing drawn on. Every channel in the draft is born iced and wakes only when its key proves live.

The drafter is a pattern clerk, not a mind reader. It writes its assumptions on the draft, where you can read them before anything runs.

What actually runs

The catalog. Every entry executes.

No vapor. If it is listed here, it runs today. If it needs your key, it says so and stays iced until the key proves itself.

FetchCall any API. Your named connections present their sealed secrets by name; keys are never pasted into flows.
Choose a pathBranch on your data: is, contains, greater than, less than.
Ask a personApprovals, questions, tasks, choices, on a signed card. A rejection always takes a comment, enforced by the server.
Shape the textBuild messages from what earlier steps produced.
WaitPark a run and resume it on an answer or a tap. It does not wake itself yet, and it says so on its face.
EmailThrough the house mailer. A space’s email wakes by proof, not by key: a real test send.
Voice call · Text · FaxBland, Telnyx, Sinch. Your accounts, your keys, your bills. Iced until validated.
Use AISummarize, classify, extract. Simulated for now, labeled on every run, and metered.
Rule checkYour rules, checked on the way in and out of every step. Every verdict audited.
Dispatch and webhooksWrite to your Dillo board and your event feed. Anything on the web can knock and start a flow.
Publish as an APIA saved flow becomes an endpoint behind your own scoped key.

Labeled, not hidden

Not live yet. It says so on its face.

The gaps are printed here for the same reason they are printed inside the product: a claim you cannot check is worth nothing.

The app actions

Pieces for Google, Microsoft, Notion, Slack, and GitHub are drawn in the step catalog: read a calendar, search mail, draft a message. Not one of them is live. The connections behind them are mock until real sign-ins land, and a flow containing an app step is refused at the door, by name, before anything runs. Google Drive and Sheets are not even in the current Google grant.

AI steps

Simulated providers, labeled in every result and metered like the real thing. Wiring a real model is a host decision, not a format change. It has not been taken yet.

Who decided

A decision link needs no account: whoever holds the signed link can answer before it expires. Binding a decision to a verified, named person is not built yet, and this page will not pretend otherwise.

Waking itself

A parked run resumes when a person answers or taps resume. It does not wake itself on a schedule yet. When any of this lands, it lands real, and this section shrinks.

Bring your own keys

Your keys. Your accounts. Your bills.

Nothing master-keyed

Flows never holds a master key to your life. Each provider is your account, connected with your key, sealed the moment you paste it and never shown again. Steps ask for it by name alone.

A pasted string proves nothing

Pasting a key does not wake a channel. We call the provider, live, and the key has to answer. Iced, then validating, then live. Or failed, with the reason written on the step in plain words and what to do next.

Revocation destroys

Revoke a connection and its sealed secret is destroyed, not disabled. The name stays as a tombstone, and any step naming it fails by name.

One door

Here is your Dillo Flows.

Sign in with the 29Court account you already have. Your space is yours alone: your flows, your keys, your record, and the relay demo pre-rendered, waiting for its first key.