EvolioHealth specifications
EvolioHealth is a private, self-hosted platform for recording, synchronizing, and visualizing personal health, activity, body-measurement, and progress-photo data.
The product has two deliverables:
- EvolioHealth Server: Go business API, bundled Flutter Web application, internal PocketBase persistence, encrypted private media, and a replaceable SQLite reference database.
- EvolioHealth Companion: Android Flutter application with offline storage, Health Connect integration, and direct Bluetooth Low Energy support for the Xiaomi Mi Body Composition Scale 2.
This package is the initial product and architecture source of truth for implementation by Codex. Start with the documentation index.
Fixed principles
- Privacy and strict user isolation are product requirements.
- PocketBase is never directly exposed.
- Deployment uses one
compose.yaml;APP_ENV=dev|prodselects runtime behavior. - Runtime containers are non-root, capability-free, and compatible with common Linux NAS/container hosts.
- Data ownership, export, correction, and deletion are first-class features.
- The initial mobile target is Android only.
Status
The repository foundation is now present. It contains minimal Go, Flutter Web, and Flutter Android entry points, container builds, a hardened Compose topology, and Gitea Actions workflows. Business functionality remains staged according to the development plan.
Repository layout
server/ Go API and bundled Flutter Web server
web/ Flutter Web application
companion/ Flutter Android Companion
deploy/pocketbase/ Private PocketBase container
.gitea/workflows/ Checks, container publishing, and development APK
compose.yaml Single supported deployment definition
docs/ Authoritative specifications and decisions
Development deployment
Copy .env.example to .env, set APP_URL, and start the stack with the
standard Docker Compose interface. Images default to:
git.zaynet.fr/tony/evoliohealth-server:dev
git.zaynet.fr/tony/evoliohealth-pocketbase:dev
PocketBase has no host port and is connected only to the internal backend
network. The public application listens on host port 8080 for local
development and is the only service a reverse proxy may target.
Automated builds
Gitea Actions requires an online runner carrying the ubuntu-latest label.
Container publication uses the repository secret REGISTRY_TOKEN, containing
a dedicated Gitea personal access token limited to write:package. A push to
main publishes multi-architecture development images for linux/amd64 and
linux/arm64. The Android workflow produces a debug APK retained as a
short-lived workflow artifact; release signing is not configured yet.