Tour · 13 stops

Take the tour

Every screenshot below is from a fresh bash scripts/bootstrap.sh with the demo workspace seeded — nothing configured, no keys pasted. Light and dark follow this site's theme toggle; the app has both.

The sign-in page: an email field for a magic link, and four dev quick-login buttons for the demo owner, admin, member and global admin The sign-in page: an email field for a magic link, and four dev quick-login buttons for the demo owner, admin, member and global admin
Magic link, or a demo account while developing. Google and Microsoft appear once their keys are set.
Stop 1 of 13

Sign in with a link printed in your terminal

Sign in with a link printed in your terminal — or, locally, one click on a demo account. Nothing to configure: with no email service set up, the magic-link URL is logged where you started the app.

The demo accounts sign you in as an owner, an admin, a member or a global admin, so you can see every screen from each side.

Behind it → Authentication

The home page for Acme Logistics, signed in as the owner: quick links and the five most recent activity rows The home page for Acme Logistics, signed in as the owner: quick links and the five most recent activity rows
Home for the demo owner: quick links and recent activity.
Stop 2 of 13

Your organisation, your role, what happened last

One page tells you where you are: the organisation, your role in it, and the last few things that happened. Every screen from here on belongs to that organisation — the demo one is Acme Logistics.

A person can belong to several organisations and switch between them; a deployment that only ever needs one turns switching off with a setting, not a fork.

Behind it → Tenancy and access

The People tab: a members table of eight people with their roles, and a pending invitations panel below it The People tab: a members table of eight people with their roles, and a pending invitations panel below it
Members with roles; pending invitations below. Refreshes live in a second browser.
Stop 3 of 13

Invite someone, pick a role, change it later

Invite by email, assign owner, admin or member, and every change lands in the activity trail. The invitation email goes out from a queue, so the button answers the moment the row exists.

Open the page in a second browser and it refreshes live when the invitation is accepted — the database is the truth, the socket is only a nudge.

Behind it → Tenancy and accessBackground work and realtime

Settings → AI: chat readiness shows Cloudflare Workers AI, llama-3.3-70b-instruct-fp8-fast, platform default, and embeddings show bge-m3; no tenant providers yet Settings → AI: chat readiness shows Cloudflare Workers AI, llama-3.3-70b-instruct-fp8-fast, platform default, and embeddings show bge-m3; no tenant providers yet
Readiness with nothing configured: the zero-key floor for chat and for embeddings.
Stop 4 of 13

AI works on day one, with no key

Chat, agents and search are ready on a fresh workspace with nothing configured: Workers AI is the floor. The settings page shows exactly which model will answer and where that choice came from.

Add an Anthropic key, or let each organisation bring its own provider, and it ranks above the floor — test the connection before you save.

Behind it → The AI layer

The chat page: three conversations in the list, the thread “Late deliveries on the Rotterdam lane” open, with token counts under each turn The chat page: three conversations in the list, the thread “Late deliveries on the Rotterdam lane” open, with token counts under each turn
Streamed answers; threads and token counts persist.
Stop 5 of 13

Ask a question, watch the answer stream in

The reply streams in as it is written, the thread is saved, and each turn shows what it cost in tokens. Come back tomorrow and the conversation is still there.

Threads are private to the person who started them — an admin in the same organisation cannot open yours.

Behind it → The AI layer

A succeeded summarize-text run opened in a drawer over the runs list: the timeline with the “Submit summary” step expanded, and the summary with its key points A succeeded summarize-text run opened in a drawer over the runs list: the timeline with the “Submit summary” step expanded, and the summary with its key points
A summarize-text run: the timeline, the validated output, the key points.
Stop 6 of 13

An agent is a run you can watch

Start an agent and it becomes a row: queued, running, done, with every step on a timeline you can open. This one is summarize-text, the kit’s single-call example — its answer is checked against a schema before it is stored.

A run that stalls can be cancelled; a second request while one is already running for the organisation gets that run back instead of starting another.

Behind it → Background work and realtime

The Knowledge page: a table of six documents with one shown as Indexing, a download icon on an uploaded file, and the paste-text form below The Knowledge page: a table of six documents with one shown as Indexing, a download icon on an uploaded file, and the paste-text form below
Six documents, one still indexing; the original is one click away.
Stop 7 of 13

Drop in a PDF and watch it go Indexing → Indexed

Upload PDFs, Word and Excel files, HTML, Markdown or plain text — or paste text — and each row goes Indexing → Indexed within seconds. The original is kept and downloadable.

Behind the row, the text is split into passages and embedded, so search and every agent can find it. Documents belong to the organisation that uploaded them and to nobody else.

Behind it → The AI layerEmail and file storage

A succeeded research-topic run: the Markdown answer, and under Sources the citation “Customs paperwork: EU shipments” A succeeded research-topic run: the Markdown answer, and under Sources the citation “Customs paperwork: EU shipments”
research-topic: the answer and its citation to the document it read.
Stop 9 of 13

An agent that reads your documents and cites them

Ask research-topic a question and it searches the knowledge base itself, reads what it needs and answers in Markdown with sources. This is the agentic example: a tool loop over the same search you just used.

Citations are checked against the documents the tools actually returned, so an invented one is dropped rather than shown.

Behind it → The AI layer

The Organisation Overview dashboard: a KPI strip of members, owners, admins and active users, a sign-ups-over-time line and a members-by-role bar The Organisation Overview dashboard: a KPI strip of members, owners, admins and active users, a sign-ups-over-time line and a members-by-role bar
Organisation Overview, the default dashboard: KPIs, sign-ups, roles.
Explore: a query with the measure ActivityEvents.count broken down by ActivityEvents.type, rendered as a bar chart Explore: a query with the measure ActivityEvents.count broken down by ActivityEvents.type, rendered as a bar chart
Explore: one measure, one breakdown, a chart.
Stop 10 of 13

A dashboard every organisation gets on its first visit

The seeded Organisation Overview shows members, sign-ups over time, roles and daily activity — copied from a template in the repo the first time an organisation opens the page.

Explore is for your own questions: pick a measure and a breakdown and get a chart. Every number is computed inside one organisation; no organisation can see another’s.

Behind it → Analytics and dashboards

Settings → Usage: 40 AI calls in the last 30 days, 134,788 tokens in and 10,112 out, $0.1498 estimated, with nine priced rows across Anthropic and Workers AI Settings → Usage: 40 AI calls in the last 30 days, 134,788 tokens in and 10,112 out, $0.1498 estimated, with nine priced rows across Anthropic and Workers AI
Forty calls, two providers, fifteen cents — with the estimate labelled as one.
Stop 11 of 13

Every AI call, priced

Every model call is a row: which feature, which provider and model, how many tokens in and out, what it cost. The last thirty days add up at the top.

Prices live in one table in the repo and are frozen onto each row when it is written; a model the table does not know is counted as unpriced, never guessed.

Behind it → The AI layer

Stop 12 of 13

Every organisation from one place

A global admin sees every organisation from one screen — the demo has three: Acme Logistics, Northwind Freight and Bluebird Clinics — plus the access requests waiting for a decision.

To help a customer, “enter” their organisation: that creates a real support membership, visible to them by design, and everything you do there is logged like any other member’s actions.

Behind it → Tenancy and access

Stop 13 of 13

The same app from a terminal

The CLI logs in through your browser and ends up with an API key scoped to one organisation; from then on it calls the same routes the UI does and parses the same schemas.

--json prints only the response, so any command pipes into jq — and the key is revocable from the same settings page as every other.

zsh — myapp
pnpm cli login --server http://localhost:3001Opening the browser… signed in, key stored in ~/.rocketflare/config.jsonpnpm cli whoamiuser   owner@example.testtenant Acme Logisticskey    rocketflare_…pnpm cli members list --json | jq '.items[].email'"owner@example.test""admin@example.test""member@example.test"

Behind it → The CLI

Also

It works on a phone too

The same app at 390 pixels: home and a chat thread. Nothing here is a second front end — one UI, one set of routes.

Home on a phone: the organisation, quick links and recent activity stacked in one column Home on a phone: the organisation, quick links and recent activity stacked in one column
A chat thread on a phone, scrolled to the last assistant turn A chat thread on a phone, scrolled to the last assistant turn

Now run it yourself

One command on a laptop with Docker gets you to the first stop, signed in. The concept pages explain the decisions behind each one.