Inspiration: IUU fishing is a $23 billion criminal enterprise destroying ocean ecosystems, and the evidence to catch perpetrators already exists, just scattered across dozens of disconnected databases no single agency can monitor alone.
What it does: DarkFleet fuses seven data sources (satellite AIS tracking, Marine Protected Area boundaries, RFMO authorisation lists, IUU blacklists, port inspection records, vessel ownership registries, and sanctions databases) into a single scored risk dashboard. Vessels are algorithmically ranked by suspicion, with an AI analyst powered by Claude generating per-vessel intelligence briefs and answering investigator questions in real time.
How we built it: Python/FastAPI backend with PostgreSQL + PostGIS for spatial queries, SQLAlchemy async ORM, and a single-page Mapbox GL frontend. Scoring runs weighted signals through PostGIS geometry operations (ST_DWithin, ST_Within) to detect AIS gaps near protected areas and loitering inside them. Claude powers the intelligence layer, synthesising all signals into narrative briefs and supporting streaming conversational analysis via Server-Sent Events.
Challenges we ran into: Most authoritative maritime databases have no public API. GISIS requires session-based HTML scraping, IUU blacklists are published as PDFs and Excel files, and RFMO authorisation lists vary wildly in format. Getting PostGIS spatial scoring to run efficiently across hundreds of vessels without N+1 query explosion required significant query design work.
Accomplishments that we're proud of: The AI analyst genuinely adds value beyond just surfacing numbers. It explains why a behavioural pattern is suspicious, what it suggests about intent, and what an investigator should do next, while being explicit about uncertainty. The geographic scoring is also something we're proud of: a dark gap in open ocean is meaningless; the same gap 40km from a Marine Protected Area is a serious red flag.
What we learned: "No data" must never be treated as evidence of guilt. Empty reference tables should contribute zero points, not penalties. Fusing imperfect, inconsistent data sources requires building for graceful degradation at every layer.
What's next for DarkFleet: Live RFMO authorisation data, Paris MOU detention record integration, peer-comparison anomaly scoring (flagging vessels whose gap frequency is a statistical outlier versus their fleet cohort), and pushing alerts directly to enforcement agencies via webhook when a vessel crosses into red tier.
Built With
- anthropic-claude-api
- docker
- fastapi
- global-fishing-watch-api
- httpx
- mapbox-gl-js
- marine-regions-wfs
- opensanctions
- postgis
- postgresql
- python
- sqlalchemy
- wdpa-(world-database-on-protected-areas)
- weasyprint
Log in or sign up for Devpost to join the conversation.