BlueNet: Ocean Watch
Coup de Cœur prize · Build with GemmaRanks suspicious vessel activity in Mauritian waters with a score that lists its reasons, then has Gemma draft a case file in the browser.
- Repository: private team repository
- Press: Platform Africa (opens in a new tab)
- Press: NewsMoris (opens in a new tab)

What I did
- Marine protected area and zone data, credited in the app as “MPA / Zone Data”. The severity score checks every event against these zones.
- Worked on the testing and the documentation, shared with the rest of the team.
- Role
- Marine protected area and zone data, plus shared testing and documentation
- Team
- Team of four
- When
- July 2026, a 24-hour build at Middlesex University Mauritius
- Built for
- Build with Gemma: Blue Mauritius & Beyond
The problem
Mauritius is responsible for about 2.3 million km² of ocean across its exclusive economic zone (EEZ), the Chagos EEZ and a joint zone with Seychelles. A queue of vessel-tracking alerts isn’t actionable by itself. A small operations team needs to know which events to look at first, and why.
How it works
- 01
Tracking events become flags
Pulls pre-computed Global Fishing Watch events (tracking gaps, encounters, loitering, fishing) and turns them into three flags: a tracking gap, two vessels stopped together, and a trawling pattern.

Regional map with flagged events and protected areas. - 02
A severity score in plain code
Plain Python checks each event against marine protected areas and jurisdiction zones, matches nearby community tips, and computes a weighted severity score with its reasons.
- 03
Gemma runs in the browser
Selecting a vessel hands Gemma, Google’s open model, the vessel’s fixed facts and the reasons behind its score.

Why a vessel scored 12.0: every point in the score, listed (demo data). - 04
Four lookups, then a case file
Gemma calls four lookups in turn (owner, sanctions, port history, licence), all against seeded demo data, then drafts a case file.

A case file drafted on the device by Gemma (demo data). - 05
Tips from fishers, even offline
A mobile app lets fishers send photo tips with GPS, queued offline and synced later.
- 06
Kreol tips stay readable
Kreol tips are glossed in place by a fixed glossary, so an officer can still read the original words.
Design decisions
- Gemma never calculates severity, decides the ranking or makes an enforcement decision. The score stays in plain, inspectable code.
- The ranked queue keeps working if the model can’t load.
- Seeded demo data is labelled as demo data and never presented as a real allegation.
Results
More screenshots
Built with
- Python and FastAPI
- React, TypeScript, Vite
- Leaflet
- Gemma 4 on-device (WebGPU)
- React Native and Expo

