# Sealing the Sighting: Verifiable Bird Records from Nairobi, Powered by Gemma

> Source: <https://dev.to/papajams/sealing-the-sighting-verifiable-bird-records-from-nairobi-powered-by-gemma-464b>
> Published: 2026-10-11 19:55:37+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*

I'm from Kenya, where birdwatching is a beloved pastime. BirdLife International's [country profile](https://datazone.birdlife.org/country/kenya) counts about 1,059 bird species here, 49 of them globally threatened and 10 found nowhere else. Kenya also sits on the African-Eurasian flyway, so roughly 170 species arrive each year from Europe and Asia, according to [reporting on a UN migratory species report](https://peopledaily.digital/news/un-endangered-animal-species-risk-extinction/amp).

Thousands of people already watch these birds, and what they see is valuable: where a bird was, on what day, in what numbers. But most of it lives in notebooks, WhatsApp groups and memory. When a record does get shared, there's no easy way to know whether it was changed afterwards.

Vickrey is a field journal that makes sightings verifiable. You take a photo, an open-weight model suggests what the bird is, and **you** confirm or correct it, because the observer's judgment is the record. Then you seal the entry. If anyone edits it later, the seal cracks, and the journal refuses to sync until the original is restored.

The goal is crowdsourced insight you can trust: many ordinary birders contributing to a shared picture of how birds move, without needing to trust whoever holds the spreadsheet. Identifying a species and preserving what the observer actually recorded are different problems, and Vickrey is built around the second.

It's for birders, field naturalists and small survey groups. The screen should be the shortest part of the experience: look up, snap, confirm, seal, keep watching.

**Did it get me outside?** Yes. I took it to a park in Nairobi and used it to identify a robin. It was one bird, an easy and well-photographed one, so it says little about how the model handles harder Kenyan species. The suggestion ran on my own server and the ledger was simulated, as the video says. What I can say is that the loop worked in the field: photo, suggestion, confirmation, seal, with very little time spent looking at the phone.

What you're seeing, and what you're not:

**A sealed bid on what you saw.** Vickrey is an offline, open-source AI field
identifier with a tamper-evident ecological logbook — for
[Hacktoberfest 2026, Week 1: **Touch Grass**](https://hacktoberfest.com).

The name is the metaphor: **Vickrey** is named for William Vickrey's **sealed-bid
auction** — a mechanism that makes truth the winning strategy. We point the same
mechanism at the world: your phone **seals** what you saw, the network
countersigns it, and tampering **cracks the seal**. See
[`docs/BRAND.md`](https://github.com/sneldao/vickrey/docs/BRAND.md).

The vision: point your phone at a bird, a plant, or a fall tree with **no
signal**. An open-weight model running **on the device** names what you saw
Vickrey signs the
observation, chains it into a tamper-evident log, and — when you are back in
range — anchors the *commitment* to a shared ledger. The result is a field record
you can later prove nobody…

Disclosure under the new-project rules: the repo began on October 6. I reused the ledger and incident-evidence explorer from an earlier project, Veles. The older explorer is still running at [http://45.76.242.245/](http://45.76.242.245/) and is **not** the new field client. What's new this week is the field client, the human-review step, the persistent journal, and the outbox.

The path of one sighting:

`gemma3:4b`, an open-weight Gemma model on my own server, which proposes an identification.
The suite has 78 Node tests and 54 ledger tests. The test I trust most is the tamper test: edit an entry, watch it get refused, restore it, watch it pass.

**The bug that taught me the design.** With storage tight on my devices, I was running everything simulated on one server. After the first successful sync, the screen said **"VERIFIED, but 0 sealed."** The queue had emptied, and the observer's sighting had vanished from the UI. The sync had worked, and it looked like it had eaten the record.

The mistake was mine: the outbox was doing double duty as the journal. An outbox is meant to drain once its contents are delivered, so when it emptied, the observer's own record went with it. In a project about not losing what an observer recorded, that is exactly the wrong failure.

The fix was to split them. The journal is durable and signed, and it only grows. The outbox is disposable and drainable, a to-do list for sync rather than a place where records live. Syncing now empties the outbox and leaves the journal untouched. The reasoning is written at the top of [`journal.js`](https://github.com/sneldao/vickrey/blob/main/apps/field/journal.js).

For birdwatching in Kenya, openness isn't a nice-to-have.

There is a local organisation to build with, too: Nature Kenya is BirdLife's partner here and works on [69 Important Bird and Biodiversity Areas](https://datazone.birdlife.org/country/kenya), covering about 12% of Kenya's land. Verifiable community sightings from those sites are the kind of data conservation work can use.

For scale beyond Kenya, GBIF's [2025 guide to publishing survey data](https://docs.gbif.org/guide-publishing-survey-data/en/) describes more than 3 billion occurrence records from roughly 2,300 institutions. That's context for how big biodiversity data is, not a claim about Vickrey's market or about gaps in those records.

What I haven't done: run inference on the phone itself. Offline, on-device identification, which is what a trail with no signal needs, is the next step, not a result I'm claiming.
