GlobalCanadaEuropeAsia-Pacific
Sign in

We publish what we build, and send the fixes back.

District AI runs on open-source software, and two of the things we built along the way are open source too: a monitor for the pipelines that ship this site, and the scheduling engine behind every booking.

Fri 18 Sep 21:49
distronode-comGitLab CIDeployed, with a failure
Push to main7fb2b33e4 minutes ago
  • trigger:websitedeploy:origins succeeded on four originsDeployed
  • trigger:sentrysentry:apply failedFailed
  • trigger:reporting_toolsthree jobsPassed

Scheduled pipeline, 25 minutes ago, failed on purpose after correcting drift. Not counted: this watch follows pushes.

district-schedulerGitHub ActionsDeployed
Push to district63addd457 hours ago
  • Docker publishimage pushed to the registryDeployed
  • CItwo jobsPassed
  • Auditthree jobsPassed

Three workflow runs from one push, shown as one row.

bridgewatch

A tray monitor for GitLab CI and GitHub Actions, for macOS and Linux. We wrote it because every monitor we tried read the newest pipeline on the branch, which on our project is the hourly schedule, and none could say what a push as a whole had done.

It sees the whole push

On GitLab it reads each child pipeline behind a trigger job. On GitHub, where one push starts several workflow runs that know nothing of each other, it folds them back into one row. Either way it can name the part that broke, and it notices a workflow that should have run and never started.

It knows a schedule from a push

A reconciler that fails on purpose should not turn your tray red all day. Each watch follows the sources you choose.

It answers "did it deploy?"

You name the jobs that mean shipped. The icon reports on those, and says so when something failed around them.

Watches
GitLab CI and GitHub Actions
Licence
Apache-2.0
Built with
Rust, Tauri 2, Svelte 5
Ships as
A signed macOS app, a .deb and an AppImage. The command-line tool builds from source.

bridgewatch on GitHub

Why we publish

A telecommunications company built on frontier AI asks customers to trust where their calls are handled. That should be easy to check. Both repositories are the ones we deploy from, with their issues, changelogs and security policies in the open.

There is a plainer reason too. A fork with private patches has to be maintained by the one company that holds them. Sending a fix back means the next upstream release already has it, for us and for everyone else.

How a fix travels

CalnodeUpstream scheduling engineApache-2.0, Calnode/calnode
Fork, kept publicFixes sent back
District SchedulerOur fork, run in productionApache-2.0, distronode-corporation

What the fork adds

Multi-tenant modeMany isolated workspaces in one PostgreSQL-backed process, with row-level security as the isolation.Switched off, it behaves as upstream Calnode, byte for byte.

District Scheduler

Our fork of Calnode, the scheduling engine behind District AI's bookings, meetings and notetaker. One Go binary that serves its own booking pages and admin console.

Fixes go upstream

A fix to Calnode goes to Calnode, rather than living on as a private patch.

The fork stays honest

Our addition sits behind one switch. With it off, you are running upstream Calnode.

Licence
Apache-2.0
Built with
Go, PostgreSQL
Upstream
Calnode/calnode

District Scheduler on GitHub

What District AI runs on

Ten projects that do visible work on every call or every page, each run by us under the licence shown.

Open-source software District AI runs on
SoftwareWhat it does hereLicence
LiveKitMedia server, SIP bridge and the agents framework the voice attendant is built on, on our own nodes in every regionApache-2.0
PostgreSQL 17Every workspace's database, one instance per regionPostgreSQL Licence
k3sThe Kubernetes distribution each of the four origins runs on, as a single nodeApache-2.0
CaddyTLS termination and routing in front of each originApache-2.0
Next.js and ReactThis website, the customer portal and the dashboardMIT
PrismaThe database layer under the portal and dashboardApache-2.0
Tailwind CSSThe dashboard's stylingMIT
Grafana AlloyShips metrics, logs and cluster events from all four clusters to our monitoringApache-2.0
Silero VADDecides when a caller has started and stopped speakingMIT
CalnodeThe scheduling engine District Scheduler is forked fromApache-2.0

Licences as each project publishes them. Redis is absent on purpose: we use it, and its current licence is not an open-source licence.

Where to find us

Issues and pull requests are welcome on either repository. Security reports go to the address in each repository's security policy, not to a public issue.