RiceTrack

An offline-first app for rice field trials, and the first crop protocol on AgroData, MADDev's Drupal platform for agricultural trials.

 

## The project

RiceTrack is an offline-first data app for rice field trials. Field technicians record measurements, GPS positions and photographs from a plot with no signal, and the data syncs once a connection returns.

It is the first crop protocol built on AgroData, MADDev's Drupal platform for agricultural field trials, which records trial protocols, plots, observations and results and exposes them through BrAPI, the Breeding API standard, so the data interoperates with the wider plant-breeding tooling ecosystem.

RiceTrack is being developed together with an agronomy student at the University of Antsiranana, Madagascar, for organisations such as NGOs running rice field trials, with field technicians, supervisors and researchers as distinct roles on each organisation's own scoped view of its data.



 

 





 

## At a glance

PlatformDrupal 11Part ofAgroData, MADDev's Drupal platform for agricultural field trialsStatusIn development. A working demo is running; the public site is not yet live.Data exchangeBrAPI v2, the Breeding API standardCrop protocolThe AfricaRice standard rice protocol: 23 variables and 10 growth stagesUsersField technicians, supervisors and researchers, each organisation scoped to its own trials

 

 





 

## What we built

- An offline-first PWA for field technicians, built in React: capture, trial browsing and offline maps all work with no signal, and queued data syncs automatically once a connection returns, never duplicating a record on a resend
- A Drupal public and admin site: a supervisor dashboard, a trial browser, growth charts, CSV exports and printable reports
- A BrAPI v2 server exposing trials, studies, observation units, observations, locations and variables, with bearer-token access for external systems
- Automatic descriptive statistics for every variable and every variety, plus a data-quality audit for empty values, duplicates and outliers
- Keyless enrichment from external agronomic data: daily weather history from NASA POWER, soil properties from SoilGrids, and a rice trait dictionary from the Crop Ontology (`CO_320`)
- A multi-tenant organisation model, so each organisation sees only its own trials, with field technicians, supervisors and researchers as distinct roles
- A protocol architecture that lets AgroData add further crops beside rice, each with its own variables, growth stages, calculations and reports



 

 





 

## The offline-first design

A field technician often has no signal at all. RiceTrack treats that as the normal case, not an edge case: every measurement, GPS position, photograph, event and note is written to the phone's `IndexedDB` storage first, and that store, not the server, is the source of truth while the technician is out on a plot.

Once a connection returns, the queued captures sync automatically: through the browser's Background Sync on Chromium and Android, and through a fallback triggered by the browser's online event on iOS, which does not support Background Sync. Every upload carries a reference id generated on the phone, so if the same capture is sent twice, for instance because a connection drops mid-upload, the server updates the existing record instead of creating a duplicate.



 

 





 

## Automatic statistics and data quality

Every variable, and every combination of variety and variable, gets its descriptive statistics computed automatically: count, mean, minimum, maximum, median, sample standard deviation and coefficient of variation. A data-quality audit runs alongside it, flagging empty values, duplicate records and statistical outliers, the last found with a modified z-score rather than a simple threshold.

Because the statistics and the audit run as the data arrives, a supervisor sees them on the trial dashboard without waiting for anyone to compile a spreadsheet by hand.



 

 





## Start a project.

Tell us about your crop and the field-trial data you need to capture.



[Get in touch →](/contact)