DEV Community

DHIRAJ BHAVIKATTI
DHIRAJ BHAVIKATTI

Posted on

TrailEar: Offline Birding Companion for Hacktoberfest Touch Grass Challenge

This is a submission for the** Hacktoberfest** Open-Source AI Challenge Week 1: Touch Grass

What I Built:
TrailEar is an offline birding companion that keeps your eyes on the trail. Most bird-ID apps need signal, hold your attention on a screen, and send your audio and location to a server. TrailEar listens through the mic, gives a quiet cue when it detects a bird, and saves the details for a summary after the walk.

It’s for beginner and casual birders who want to learn calls without staring at a phone.

Demo:
Run locally:
uvicorn trailear.backend.api:app --host 127.0.0.1 --port 8000

Code:
https://github.com/DhirajB05/HacktoberFest_C2.git

FastAPI backend, SQLite storage, and a static HTML/JS frontend with six views (Home, Setup, Live, Summary, History, About).

How I Built It
Detection: BirdNET-Analyzer on 3-second mic windows (sounddevice, 48 kHz mono), with a confidence threshold and a 60-second cooldown per species so cues stay rare.
Summaries: a small local LLM through Ollama or llama.cpp. It only summarizes the detection list plus a static species file, and is told not to add facts.
Live cues: server-sent events, so there is no extra infrastructure.
Privacy by design: the server binds to localhost, there is no telemetry, and there are no runtime network calls.

Why Does Open Innovation Matter?
Works with no signal. A cloud API fails exactly where trails are.
Your data stays yours. Audio and GPS history never leave the device.
Costs nothing to run. There are no per-call fees.
Swappable parts. The LLM or the detection model can be replaced without touching the rest.
Honest limits. Small local models are weaker than closed ones, which is why the LLM only does constrained summaries.

My Agent Session

Built with the opencode agent framework: backend scaffolding, audio capture, the frontend, and end-to-end testing.
Session link:https://opncd.ai/share/STkDsk70

Top comments (0)