Inspiration

Most rice farms in Cambodia are rain fed, with no irrigation to fall back on, and the people responsible for catching crop stress early, extension officers and cooperative managers, still do it with a paper notebook and a motorbike. One of our own family fields showed dying vegetation concentrated in the center weeks before anyone noticed it standing there in person. That gap, between what a satellite already knows and what actually reaches the person who could act on it, is what Ceres was built to close.

What it does

Ceres turns free satellite imagery into a digital workplace tool for rice field monitoring. It calculates multiple vegetation and water indices (NDVI, NDWI, LSWI, SAVI, EVI, GNDVI) from Sentinel 2 imagery, with a Sentinel 1 radar fallback for cloudy periods, and grades each reading against a six stage rice growth model instead of a single fixed threshold. Extension officers and cooperative staff get one dashboard showing every field under their care, ranked by urgency, instead of guessing which fields to visit. When a field needs attention, a plain language alert in Khmer or English is sent automatically to the farmer's phone through Telegram, and the farmer can reply with a photo that becomes a permanent record tied to that field. An AI assistant, Consult AI, explains what the data means in plain language so no remote sensing background is required to use it.

How we built it

The frontend is Vue 3 and Vite. All satellite processing runs through Google Earth Engine, called only from Supabase Edge Functions using a service account, never from the browser, which keeps compute costs and credentials centralized. Field data, authentication, and caching live in Supabase Postgres. Alerts run on a fully serverless schedule: a pg_cron job triggers a SQL function, which calls a Deno Edge Function that checks each field's expected next satellite pass, generates a plain language advisory through a Gemini, DeepSeek, and Qwen fallback chain, and sends it through the Telegram bot API. A two layer caching system, an in memory session cache plus a persistent Supabase table keyed by field and date range, keeps repeat Earth Engine calls from re running compute that has not actually changed.

Challenges we ran into

The biggest challenge was making cloud cover honest instead of invisible. Cambodia's rainy season blocks optical satellite imagery for weeks at a time, and it was tempting to just silently swap in a radar reading whenever optical data was missing. We decided against that: Ceres never substitutes radar for an optical index without telling the user, and radar readings are kept out of the main stress score entirely until they can be validated against real field visits the same way NDVI and NDWI already have been. On the performance side, we traced a real slowdown to loading a single field firing around ten separate backend calls at once, each paying its own cold start cost, and had to consolidate that into a single bundled request. We also migrated the entire Earth Engine integration from client side to server side mid project after repeatedly hitting authentication errors in the browser, which meant rebuilding how the frontend talked to satellite data from the ground up.

Accomplishments that we're proud of

Ceres is not a concept, it is a working product. NDVI and NDWI readings have been validated against a real field visit, where a family member physically confirmed both the absence of standing water and the exact stress pattern the app had already flagged. The full pipeline, satellite data, backend, automated Telegram alerts, and the AI advisory layer, runs end to end today.

What we learned

We learned that the hardest part of a technical tool like this is not the data science, it is being honest about the limits of the data. Choosing to show "no data" instead of a confident looking wrong answer during cloud cover, and keeping an unvalidated index out of the main score, mattered more to real trust than any single feature we added.

What's next for Ceres

We want to bring this workplace reframing, a task list for extension officers instead of just alerts for farmers, in front of real cooperative and extension office staff, validate the radar fallback against ground truth the same way we did for NDVI and NDWI, and refine institutional pricing based on what people who actually approve that kind of purchase tell us they need.

Built With

  • deepseek
  • earthengine
  • gemini
  • qwen
  • supabase
  • vue
Share this project:

Updates

Submission history