Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions docs/developer/developer-getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,11 @@ You want to deploy and manage ODE in your infrastructure.
**Time to first deployment:** 1-2 hours

**Next Steps:**
1. [Understand system architecture](/docs/development/architecture)
2. [Learn server configuration](/docs/reference/configuration/server)
3. [Follow deployment guide](/docs/guides/deployment)
4. [Set up monitoring](/docs/development/setup#monitoring)
1. [Server Architecture for IT](/docs/guides/server-architecture-for-it)
2. [Understand system architecture](/docs/development/architecture)
3. [Learn server configuration](/docs/reference/configuration/server)
4. [Follow deployment guide](/docs/guides/deployment)
5. [Security reference](/docs/reference/security)

### Path 4: Integration & APIs

Expand Down Expand Up @@ -388,7 +389,7 @@ Choose your path and dive in:

1. **[Core Contributor Path](/docs/development/setup)** - Set up environment
2. **[Custom App Path](/docs/reference/rest-api/overview)** - Learn the APIs
3. **[Deployment Path](/docs/guides/deployment)** - Deploy ODE
3. **[Deployment Path](/docs/guides/server-architecture-for-it)** - IT overview, then [deployment guide](/docs/guides/deployment)
4. **[Integration Path](/docs/development/extending)** - Build integrations

### Read More
Expand Down
6 changes: 5 additions & 1 deletion docs/developer/developer-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ title: ⚙️ For Developers

Welcome to the **Developer** section! Whether you're contributing to ODE, building custom extensions, or deploying the platform, this guide covers development, architecture, and contribution workflows.

:::note Documentation paths
Persona pages live under `/docs/developer/`; technical guides under `/docs/development/`. Deploying for production? Start with [Server Architecture for IT](/docs/guides/server-architecture-for-it).
:::

## Who This Guide Is For

This section is designed for:
Expand Down Expand Up @@ -122,7 +126,7 @@ Set up your development environment in 20 minutes:
- [System Overview](/docs/development/architecture)
- [Component Architecture](/docs/development/architecture#components)
- [Data Flow & Sync Protocol](/docs/development/architecture#data-flow)
- [Authentication & Security](/docs/development/architecture#security)
- [Authentication & Security](/docs/reference/security)

### 🔧 Set Up Environment
- [macOS Setup](/docs/development/setup#macos)
Expand Down
39 changes: 16 additions & 23 deletions docs/development/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,16 @@ sidebar_position: 2

# Architecture

Complete architecture documentation for ODE, including system overview, components, data flow, and technical details.
Complete architecture documentation for ODE, including sync protocol, database design, and extension points.

:::tip Audience
**Hosting / IT?** See [Server Architecture for IT](/docs/guides/server-architecture-for-it).
**Product overview?** See [Architecture Overview](/docs/getting-started/architecture-overview).
:::

## System Overview

ODE follows a client-server architecture designed for offline-first data collection:

```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Formulus │◄───────►│ Synkronus │◄───────►│ Formulus │
│ (Mobile) │ Sync │ (Server) │ Sync │ (Mobile) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Formplayer │ │ Database │ │ Formplayer │
│ (WebView) │ │ (PostgreSQL) │ │ (WebView) │
└─────────────┘ └──────────────┘ └─────────────┘
```
ODE follows a client-server architecture designed for offline-first data collection. High-level component relationships are documented in [Architecture Overview](/docs/getting-started/architecture-overview). Server installation layout is in [Server Architecture for IT](/docs/guides/server-architecture-for-it).

## Components

Expand Down Expand Up @@ -171,7 +162,7 @@ Attachments are managed separately:
- **Separate Sync**: Uploaded/downloaded in separate phase
- **Manifest-based**: Server provides manifest of changes

See the [Synchronization guide](/using/synchronization) for more details.
See the [Synchronization guide](/docs/using/synchronization) for more details.

## Database Design

Expand Down Expand Up @@ -219,11 +210,13 @@ See the [Synchronization guide](/using/synchronization) for more details.

### Data Security

- **Transport**: HTTPS enforced in production
- **Storage**: Database encryption via PostgreSQL
- **Transport**: HTTPS enforced in production (TLS terminated at your reverse proxy)
- **Storage at rest**: Encryption is a **host platform** responsibility (volume/disk encryption, managed DB TDE)—not a separate Synkronus feature
- **Secrets**: Environment variables for sensitive data
- **Validation**: Input validation on all endpoints

See [Security reference](/docs/reference/security) for deployment checklist and mobile storage details.

## Performance Considerations

### Client-Side
Expand Down Expand Up @@ -273,7 +266,7 @@ Current extension points:

## Related Documentation

- [Synchronization Details](/using/synchronization)
- [Sync Protocol Technical Details](/development/architecture)
- [Database Schema](/development/architecture)
- [API Reference](/reference/api)
- [Synchronization Details](/docs/using/synchronization)
- [Server Architecture for IT](/docs/guides/server-architecture-for-it)
- [Security reference](/docs/reference/security)
- [API Reference](/docs/reference/api)
7 changes: 7 additions & 0 deletions docs/development/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ Guide to contributing to ODE, including contribution process, coding standards,

ODE is an open-source project and welcomes contributions from the community. We believe that diverse perspectives and varied skill sets make our project stronger.

## Documentation URL convention

- **`/docs/developer/*`** — Persona landing pages (overview, getting started paths)
- **`/docs/development/*`** — Substantive developer content (architecture, setup, component guides)

When adding links in docs, use the full path prefix `/docs/...`.

## Ways to Contribute

You can contribute to ODE in many ways:
Expand Down
4 changes: 2 additions & 2 deletions docs/development/installing-formulus-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ adb install app-debug.apk

```bash
# Download and install in one command
curl -L https://github.com/OpenDataEnsemble/ode/releases/download/v1.0.0/formulus.apk -o /tmp/formulus.apk
curl -L https://github.com/OpenDataEnsemble/ode/releases/download/v1.1.1/formulus.apk -o /tmp/formulus.apk
adb install /tmp/formulus.apk
```

Expand All @@ -170,7 +170,7 @@ adb install /tmp/formulus.apk

```powershell
# Download and install
Invoke-WebRequest -Uri "https://github.com/OpenDataEnsemble/ode/releases/download/v1.0.0/formulus.apk" -OutFile "$env:TEMP\formulus.apk"
Invoke-WebRequest -Uri "https://github.com/OpenDataEnsemble/ode/releases/download/v1.1.1/formulus.apk" -OutFile "$env:TEMP\formulus.apk"
adb install "$env:TEMP\formulus.apk"
```

Expand Down
22 changes: 18 additions & 4 deletions docs/getting-started/architecture-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ sidebar_position: 1

ODE (Open Data Ensemble) is a comprehensive platform for mobile data collection and synchronization. This guide explains the core architecture and components.

> **Current ODE release:** [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1)

## Core Components

ODE consists of these main components that work together to provide a complete data collection solution:
Expand Down Expand Up @@ -121,6 +123,14 @@ Custom App Structure:
- **Theme System**: Material Design 3 based theming
- **Build Process**: Optimized bundle creation for deployment

Study-specific apps (for example AnthroCollect) are **app bundles** uploaded to Synkronus—not separate backend services. IT hosts only Synkronus, PostgreSQL, and a TLS reverse proxy.

## Server deployment view

![Installation view: reverse proxy, Synkronus container, PostgreSQL, and volumes](/img/it-architecture-installation.svg)

For IT departments: see [Server Architecture for IT](/docs/guides/server-architecture-for-it) (full diagrams, security model, backups, sizing).

## Data Flow

### Form Submission Flow
Expand Down Expand Up @@ -156,9 +166,12 @@ Development -> Build -> ZIP Upload -> Server Storage -> Mobile Download
## Deployment Models

### Single Container Deployment
- **Synkronus**: Go server with embedded portal
- **Database**: PostgreSQL (separate container)
- **Mobile Apps**: Deployed via app stores or direct distribution
- **Synkronus**: Go server with embedded portal (`ghcr.io/opendataensemble/synkronus`)
- **Database**: PostgreSQL (container or managed service)
- **Reverse proxy**: TLS termination (Caddy in [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart); or your institutional proxy)
- **Mobile apps**: Formulus on field devices via Obtainium or F-Droid

See [Server Architecture for IT](/docs/guides/server-architecture-for-it) and [Deployment guide](/docs/guides/deployment).

### Development Setup
- **Local Development**: Docker Compose with hot reload
Expand All @@ -168,7 +181,8 @@ Development -> Build -> ZIP Upload -> Server Storage -> Mobile Download
## Security Considerations

- **Authentication**: JWT-based with configurable expiration
- **Data Encryption**: TLS for all communications
- **Data encryption in transit**: TLS at your reverse proxy (required in production)
- **Data encryption at rest**: Host platform responsibility (see [Security reference](/docs/reference/security))
- **Input Validation**: JSON Schema validation for all forms
- **Access Control**: Role-based permissions for API endpoints

Expand Down
6 changes: 4 additions & 2 deletions docs/getting-started/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ sidebar_position: 5

Common questions about ODE installation, usage, and development.

> **Current ODE release:** [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1) (Synkronus container, Formulus APK, Desktop, Portal)

## General Questions

### How do you pronounce ODE?
Expand Down Expand Up @@ -36,7 +38,7 @@ See the [Installation](/docs/getting-started/installation) page for detailed sys

### Can I run ODE in the cloud?

Yes, ODE can be deployed to cloud platforms such as AWS, Google Cloud, or Azure. See the [Deployment guide](/guides/deployment/production) for details.
Yes, ODE can be deployed to cloud platforms such as AWS, Google Cloud, or Azure. See the [Deployment guide](/docs/guides/deployment) and [Server Architecture for IT](/docs/guides/server-architecture-for-it).

### Do I need a database?

Expand All @@ -46,7 +48,7 @@ Yes, ODE requires PostgreSQL for data storage. The database schema is created au

### How do I create forms?

Forms are defined using JSON schema. See the [Form Design guide](/guides/forms/overview) for details.
Forms are defined using JSON schema. See the [Form Design guide](/docs/guides/form-design) for details.

### Can I customize the user interface?

Expand Down
4 changes: 4 additions & 0 deletions docs/getting-started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ To run ODE you need two things: a **server** (Synkronus) that stores and syncs d

Install the server first so that the client has something to connect to. Then install Formulus (or your client app) on each device and point it at your Synkronus server.

## For IT / infrastructure teams

Hosting Synkronus for a study? See **[Server Architecture for IT](/docs/guides/server-architecture-for-it)** for a one-page overview: container layout, TLS, backups, and how custom apps (app bundles) relate to the server. Current platform release: **v1.1.1**.

## Next steps

- **[Install Synkronus](installation/installing-synkronus)** — Set up the server on a Linux machine or VPS.
Expand Down
30 changes: 19 additions & 11 deletions docs/getting-started/installation/installing-formulus.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ Complete guide for installing the Formulus mobile application on Android devices

Formulus is available for Android devices through multiple installation methods. Choose the method that best fits your needs:

- **Obtainium** (Recommended) - App manager that installs Formulus directly from GitHub releases, including pre-release versions. Install Obtainium via F-Droid or direct download.
- **Direct APK** - Download and install the APK file directly from GitHub releases
- **Obtainium** (Recommended) - Installs Formulus from GitHub releases with automatic updates. Install Obtainium via F-Droid or direct download.
- **F-Droid** - Install Formulus directly from [F-Droid](https://f-droid.org/packages/org.opendataensemble.formulus/)
- **Direct APK** - Download and install the APK file directly from [GitHub releases](https://github.com/OpenDataEnsemble/ode/releases) (current: **v1.1.1**)
- **Development Build** - For developers who want to build from source

**Note**: F-Droid is used to install Obtainium, which then installs Formulus. F-Droid does not directly install Formulus.

## System Requirements

Before installing, ensure your device meets these requirements:
Expand Down Expand Up @@ -79,15 +78,15 @@ You have two options to install Obtainium:
3. **Enter the GitHub repository URL** in the "App source URL" field:
- The field should contain: `https://github.com/OpenDataEnsemble/ode`
- Ensure the full URL is entered correctly
4. **Configure GitHub options** (important for pre-release versions):
- **Enable "Include prereleases"** toggle - This is crucial for installing alpha/beta versions of Formulus
- **Enable "Fallback to older releases"** toggle - This allows Obtainium to use older releases if newer ones are unavailable
4. **Configure GitHub options** (for pre-release testing only):
- **Enable "Include prereleases"** if you need alpha/beta builds
- **Enable "Fallback to older releases"** if newer releases are unavailable
5. **Tap the "Add" button** to save the repository
6. **Wait for Obtainium to fetch** the repository information and available releases

![Obtainium Add App Screen](/img/installation/obtainium-add-app.png)

**Important**: Make sure "Include prereleases" is enabled (toggle switched to the right/purple) to see and install pre-release versions like `v1.0.0-alpha.12`.
**Stable release:** Install **v1.1.1** (or the latest [GitHub release](https://github.com/OpenDataEnsemble/ode/releases)). Pre-release toggles are only needed for alpha/beta testing.

#### Step 3: Install Formulus

Expand All @@ -98,7 +97,7 @@ You have two options to install Obtainium:
- App name: **ode**
- Developer: **OpenDataEnsemble**
- Package: `org.opendataensemble.formulus`
- Latest version: `v1.0.0-alpha.12` (or current version)
- Latest version: **v1.1.1** (or current [release](https://github.com/OpenDataEnsemble/ode/releases))
- Status: **Not installed**
5. **Tap the "Install" button** at the bottom of the screen
6. **Confirm installation** when prompted:
Expand Down Expand Up @@ -128,7 +127,16 @@ Obtainium will automatically check for updates:
5. **Confirm the update** when prompted
6. **App data is preserved** during update

### Method 2: Direct APK Installation
### Method 2: F-Droid

Install Formulus directly from F-Droid (no Obtainium required):

1. Install the [F-Droid](https://f-droid.org/) client if you do not already have it
2. Open F-Droid and search for **Formulus** (package `org.opendataensemble.formulus`)
3. Tap **Install** and wait for the download to complete
4. Updates are available through F-Droid when a new version is published

### Method 3: Direct APK Installation

If Obtainium is not available or you prefer direct installation:

Expand Down Expand Up @@ -157,7 +165,7 @@ If Obtainium is not available or you prefer direct installation:
6. **Wait for installation** to complete
7. **Tap "Open"** to launch the app

### Method 3: Development Build
### Method 4: Development Build

For developers who want to build and install from source, see the [Development Installation Guide](/docs/development/formulus-development).

Expand Down
2 changes: 2 additions & 0 deletions docs/getting-started/installation/installing-synkronus.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,8 @@ provisioning certificates, and your tunnel can handle HTTPS externally.

Your Synkronus server is now running.

For production planning (TLS, backups, sizing, security), see **[Server Architecture for IT](/docs/guides/server-architecture-for-it)**.

<p style={{textAlign: 'center'}}>
<img src="/img/girrnababy_small.png" alt="" style={{maxWidth: '120px', height: 'auto', width: '120px'}} />
</p>
22 changes: 14 additions & 8 deletions docs/guides/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,30 @@ sidebar_position: 3

# Deployment

Complete guide to deploying ODE in production environments using Docker and Docker Compose.
Complete guide to deploying ODE in production environments using containers (Docker or Podman).

> **Quick start?** For a fast 5-minute setup with Docker or Podman, see the [Synkronus Quickstart](../getting-started/synkronus-quickstart.md) guide. It includes an automated installer and is perfect for testing or starting a production deployment.
> **IT overview?** See [Server Architecture for IT](./server-architecture-for-it) for a one-page infrastructure summary.
> **Quick start?** For a fast setup with automated TLS, see the [Synkronus Quickstart](../getting-started/synkronus-quickstart.md) (Podman/Docker + Caddy + PostgreSQL 17).

## Overview

ODE can be deployed using Docker containers, which simplifies deployment and ensures consistency across environments. This guide covers production deployment with Docker Compose, including PostgreSQL, Nginx reverse proxy, and optional Cloudflared tunnel for secure external access.
ODE production deployments center on the **Synkronus container image** (`ghcr.io/opendataensemble/synkronus`). The reference stack is [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart): Synkronus, PostgreSQL, and **Caddy** for TLS. Your IT team may use any hardened reverse proxy (Nginx, Apache, cloud load balancer) instead of Caddy—the requirement is **TLS termination** forwarding to Synkronus on port 8080.

Pin the image tag in production (e.g. `ghcr.io/opendataensemble/synkronus:v1.1.1`), not `:latest`.

## Recommended Production Setup

For production deployment, we recommend:

- **Clean Linux server** (Ubuntu 22.04 LTS or Debian 12)
- **Docker & Docker Compose** installed
- **Cloudflared tunnel** for secure external access (no port forwarding needed)
- **PostgreSQL** database (dockerized via docker-compose)
- **Nginx** reverse proxy (included in docker-compose)
- **Persistent volumes** for data storage
- **Podman or Docker** with Compose
- **PostgreSQL** (container via quickstart, or managed service with `sslmode=require`)
- **TLS reverse proxy** (Caddy in quickstart; Nginx or institutional proxy equally valid)
- **Persistent volumes** for `pgdata` and Synkronus `appdata`
- **Backups** for database and `appdata` (see quickstart `utilities/`)
- **Security checklist** in [Security reference](/docs/reference/security)

Optional: **Cloudflared tunnel** or similar if you prefer zero-trust ingress without opening inbound ports (not required when using a standard reverse proxy).

## Quick Start

Expand Down
Loading
Loading