Documentation menu
Getting started
New in v2.0
Feature deep dives
Reference
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
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 | Best for | Auth |
|---|---|---|
| Telegram bot | Quick edits from a phone: toggle a task, add a keyword, check stats, switch language. | Telegram identity, numeric user id authorization |
| Web dashboard | Full configuration: tasks, policies, AI prompts, logs, topology, backups. | Bearer JWT, plus Telegram Mini App validation |
| Flutter mobile app | The same system surface as the dashboard, with encrypted local storage of the token. | Dashboard token over the REST API |
| REST / gRPC | Automation, 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
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.