Documentation menu

Clients & interfaces

Telegram Bot, Web Dashboard and Mobile App

Telegram bot UI, React dashboard behind a Rust Axum gateway, Flutter client and a REST/gRPC control plane — all enforced against the same contract fixtures.

Verified against the checkout built for v2.2.4 · updated 20 Oct 2026

On this page

InterfacesNew in v2.0

A contract gate compares the shared fixtures, so web and mobile cannot quietly drift apart.

What each surface is for

Client responsibilities
ClientBest forAuth
Telegram botQuick edits from a phone: toggle a task, add a keyword, check stats, switch language.Telegram identity, numeric user id authorization
Web dashboardFull configuration: tasks, policies, AI prompts, logs, topology, backups.Bearer JWT, plus Telegram Mini App validation
Flutter mobile appThe same system surface as the dashboard, with encrypted local storage of the token.Dashboard token over the REST API
REST / gRPCAutomation, CI and your own tooling.Bearer JWT with tenant scoping

The contract gate

Shared fixtures — the setup verdict, the environment contract and the service health payload — are checked against both clients. A field that exists on one surface but not the other fails the gate instead of shipping as a subtle inconsistency.

This is the mechanism that keeps the phrase "the same system surface" honest: it is verified, not asserted.

  • Setup and readiness screens answer three questions identically everywhere: is it configured, is it reachable, what is missing.
  • Environment reporting returns booleans and fix hints only — no secret value is ever echoed back to a client.
  • Health and topology views share one payload shape across web, mobile and the API.

Onboarding that does not lie

  • An unlinked user sees the linking flow, not a dashboard full of empty panels or a link to an app they cannot use yet.
  • Mobile probes server reachability and protocol compatibility before asking for a credential.
  • The setup verdict distinguishes "not configured" from "configured but down", and each state carries an actionable hint.

Drive it from CI

Readiness from a script
curl -s https://your-host/api/system/setup?probe=0 | jq '{ready, version}'
curl -s https://your-host/api/health/services | jq '.services[] | {name, reachable, latencyMs}'
atf system services --json | jq '{healthy, total, failing}'

Frequently asked

Do the mobile app and the dashboard have the same features?

They expose the same system surface, and a shared contract fixture set is checked in CI so a divergence fails the build rather than reaching users.

Can I use the REST API without the dashboard?

Yes. The API is independently authenticated with Bearer JWT and is the same control plane the dashboard and CLI use.

Is there a Telegram Mini App?

Mini App authentication is supported alongside JWT, so a WebApp can hand off a validated Telegram identity to the control plane.

Keep reading