Inspiration

In 2024 the WHO recorded 282 million malaria cases and 610,000 deaths — three quarters of them children under five. The same fact sheet calls malaria preventable and curable.

So the knowledge isn't missing. The delivery is. WHO's vector control guidance is already species-specific — bed nets for night-biting Anopheles, container removal for daylight-biting Aedes. But what reaches an actual household is one flattened line: "remove standing water."

That line sends most people to the wrong place. Aedes breeds in clean water in small containers by the house. Culex breeds in dirty drains. Anopheles breeds in still natural water. Same instruction, three different searches — and only one of them finds anything.

Source: WHO Malaria Fact Sheet, December 2025

What it does

MosquiScan identifies a mosquito from a photo, or from a plain description if you never got a clear shot. It returns the danger level, the diseases that species actually transmits, and a breeding checklist built for that species — where to search, within what radius, which water sources matter. It also covers bite first aid, the symptom window to watch, and the warning signs that mean go to a doctor now.

How we built it

HTML, CSS, vanilla JavaScript, and Python (Flask). Photo identification runs on a Groq vision model; descriptions and guidance text use DeepSeek V3 via Featherless AI, with automatic Groq fallback.

The architecture rests on one decision: the AI only identifies the genus. Danger levels, disease associations, breeding sites, and symptom timelines all come from a curated epidemiology table in the code. The model receives those facts and writes them into readable actions — it cannot add a disease, downgrade a risk, or shorten a symptom window.

Challenges we ran into

We built photo identification first, then realised the premise was wrong. Mosquitoes are small and fast, and you usually notice one only after it has bitten you — by which point there's nothing left to photograph. The description path we added as a workaround became the primary way to use the app, and doubled as insurance against a vision API outage.

The stubbornest bug was our vision model's reasoning block, which defeated three successive JSON parsers: the response wasn't pure JSON, our regex kept matching braces quoted mid-reasoning, and the thinking ate enough tokens that the answer sometimes never arrived at all.

Accomplishments that we're proud of

The safety architecture. MosquiScan never recommends medication, not even a painkiller, because ibuprofen worsens bleeding in dengue — and that is not a mistake worth letting a language model make. The severe-malaria escalation triggers come verbatim from WHO's published symptom list rather than from generation. WHO notes untreated P. falciparum can kill within 24 hours, so recognising those signs on the right day is the entire point of the feature.

We're equally proud that the checklists genuinely diverge: an Aedes result and a Culex result give opposite advice, because the biology is opposite.

What we learned

The useful question wasn't "can AI do this" but "which parts of this should AI be allowed to decide." Keeping epidemiology in a curated table and letting the model handle only language produced something more trustworthy than a fully generative version would have — and it made the failure modes something we could reason about instead of hope about.

What's next for MosquiScan

Broader species coverage, fine-tuned on the CulicidaeLab dataset. Season and region awareness, since risk is strongly monsoon-linked. A community mode for sharing checklists with neighbours — Aedes flies under 50 metres, so source reduction only works at cluster level. Regional languages, and an offline PWA for low-connectivity areas.

Built With

Share this project:

Updates

Submission history