This document summarizes how ODE functionality is divided across components, based on:
- user profiles
- responsibilities
- current implementation
- planned evolution
It serves as a companion to the roadmap, explaining why functionality lives where it does.
Synkronus is a data clearinghouse, not a data warehouse.
This leads to three key consequences:
- Data is expected to flow through, not remain centrally stored
- Users must be able to extract and retain local copies
- Functionality is distributed across multiple specialized clients
Central synchronization and coordination service.
- pull/push sync protocol
- authentication and user management
- app bundle hosting
- data export
- API for all clients
- No privileged clients — everything uses the same API
- Acts as hub, not final storage
- field workers
- data collectors
- render JSONForms
- run custom apps (webview)
- collect observations
- offline-first operation
- sync with Synkronus
Formulus is the runtime environment for data collection, not a general-purpose data tool.
- administrators
- junior developers
- operational staff
- user management
- app bundle upload
- data export
- system administration
- React app served as static assets
- uses same API as CLI
- no special backend access
Portal is the operational interface to Synkronus.
- power users
- senior developers
- automation / CI workflows
- sync operations
- deployment workflows
- scripting and automation
- admin tasks
CLI is the scriptable control surface of the platform.
Current system lacks a clear solution for:
- pulling data out of Synkronus in a structured way
- keeping a durable local copy
- modifying records safely
- pushing corrected data back
Without this:
- "clearinghouse" positioning is weak
- users risk relying on Synkronus as storage
- analysis workflows are fragmented
Local data stewardship and custody tool
- analysts
- data managers
- technical project leads
- pull data from Synkronus
- store locally (JSON-first)
- maintain durable dataset
- inspect records
- identify issues
- modify JSON documents
- track local changes ("dirty" state)
- prepare push payloads
- push corrected records back
- local-first
- JSON is canonical
- safe editing (avoid accidental writes)
- explicit sync state (clean vs dirty)
- CLI-based workflows
- JSON files as local store
- optional Python scripting
- structured local store (e.g. SQLite + JSON)
- dirty tracking
- query capabilities
- desktop UI (Tauri)
- browsing, editing, validation
Custodian is:
The place where data lives after leaving Synkronus
Development environment for custom apps and forms
- developers
- solution designers
- advanced implementers
- load custom app bundles
- run apps locally
- inject
formulusAPI - provide mock or real data
- validate app behavior
- debug interactions
- JSONForms editor
- FormPlayer runtime
- live preview workflows
Workshop is:
Where collection experiences are built and tested
| Function | Component |
|---|---|
| Data collection | Formulus |
| Sync + coordination | Synkronus |
| Administration | Portal / CLI |
| Automation | CLI |
| Local data custody | Custodian |
| Data cleaning & correction | Custodian |
| Custom app development | Workshop |
| User Type | Primary Tool |
|---|---|
| Field worker | Formulus |
| Admin / ops | Portal |
| Power user / DevOps | CLI |
| Analyst | Custodian |
| Developer | Workshop |
- all clients use the same Synkronus API
- no hidden or privileged pathways
- consistent data model (JSON observations)
Formulus → Synkronus → Custodian → Analysis tools
↑
(push corrections)