EsClinic Admin
Docker Database Dashboard
Cloud clinic subscriptions / اشتراكات العيادات السحابية
Grant or extend the clinic application period here. The same period is inherited by every enabled staff member. A paid period also carries the clinic's ESCAI Services (AI and WhatsApp) to the same end date. To stop Services for a paying clinic, pause them in the ESCAI Services tab.
Link this ClinicAPI server to one independent escai.cloud AI organization. Staff devices continue using this local server; installation credentials never appear in the browser.
A short-lived code will be shown here. The clinic owner signs in with MFA at escai.cloud and approves this server.
Run a connection test after pairing.
ESCAI Services
Turn AI and WhatsApp on or off for a clinic. Pick the clinic, choose how long, tick the services, then press Save.
| Clinic | Type | Services | Clinic server | |
|---|---|---|---|---|
| Open this tab to load clinics | ||||
| Database | Size (MB) | State | Recovery | Created |
|---|---|---|---|---|
| Loading... | ||||
| Name | Port | Access Code | Subscription Status | Days Left | Expires | Created | Actions |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
SIMPLE recovery with one verified full backup per interval. Changes are revisioned and are picked up by the central scheduler without restarting tenant APIs.
| File | Type | Size (MB) | Created | Actions |
|---|---|---|---|---|
| Loading... | ||||
| Table Name | Actions |
|---|---|
| Loading... | |
Measures real throughput between your browser and the API server. Tests use actual HTTP transfers.
| Time | Download | Upload | Latency | Rating |
|---|---|---|---|---|
| No tests run yet | ||||
The current packages for every platform, served from escai.cloud. The Docker package is the full ClinicAPI-Docker-Minimal.zip used to install a clinic server or update it by hand.
| Platform | File | Version | Size | Published | |
|---|---|---|---|---|---|
| Loading... | |||||
Every app install reads this from escai.cloud when it starts and when it comes back to the foreground, so changes reach clinics within minutes, without an App Store or Google Play release.
Builds below the minimum must update before they can be used. Builds below the recommended build are offered an update once per launch. 0 means none. Windows and the private Android APK keep using their own update manifest; the web app is always current.
| Platform | Minimum build | Recommended build | Store / download link (HTTPS) |
|---|---|---|---|
| Open this tab to load the current config. | |||
These clinics take new app versions (Windows, private Android APK) and on-prem server updates from the beta channel; everyone else stays on stable. Publish a release to beta, check it at these clinics, then publish it to stable for everyone. Cloud clinics' servers and the web app update together with escai.cloud, so for them use server flags instead. App builds up to 1.19.0+45 and older on-prem updaters always read stable.
Each on-prem server checks in every 30 minutes with its clinic name (Settings → Info) and build, so it can be picked by name. A name that keeps changing usually means two machines run copies of one database.
| Clinic | Server id | Build | Last seen | |
|---|---|---|---|---|
| Open this tab to load the servers. | ||||
A flag shows or hides a feature that is already in the installed app or server; the key must match the code.
Keys starting with server. are read by clinic servers only and never sent to apps.
Turn a flag on for your own clinic first, then for everyone. Clinics are tenant:<cloud name>,
server:<on-prem server id> or workspace:<ESCAI workspace id>.
App builds below the flag's minimum build always see it off.
One VPS credential. Short-lived access everywhere.
Flutter authenticates directly with this VPS. Cloud and on-prem ClinicAPI servers validate the temporary token online, so the administrator password is never stored at a clinic.
- At least 16 characters
- At least 3 of: lowercase, uppercase, number, symbol
- Both new-password fields match
- Stored as a salted one-way PBKDF2 hash
- Never returned by the API
- Internet validation required for Flutter access