This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
My younger brother raises broiler chickens. He buys chicks that are one day old, and he has 45 days, sometimes up to two months, to bring them to about 3 kg, the weight at which he can sell them.
It sounds simple, but those weeks are full of small jobs that cannot be missed. The chicks need heating for the first two weeks. They get three vaccine doses, one per week. They need vitamins, protein and boosters. And even when he does everything right, some birds die. He might buy 100 chicks and end up with 80 or 85. Each missing bird is money already spent on feed, heat and medicine, and when it happens he often cannot tell when the trouble started.
So I built KukuTrack ("kuku" means chicken in Swahili), a small app that follows one batch of chicks from day 1 to sale. It is designed for use on his Android phone.
- Reminders for heating and routine care, created automatically when he registers a batch. They can be rescheduled and marked as done. The initial template contains editable placeholder checks: the farmer must confirm dates, products and any doses with a veterinarian.
- Daily logs for deaths, feed and notes, plus separate weigh-ins with a sample size and an average weight.
- A dashboard with four stat cards (birds alive, mortality, total feed, latest weight), charts for weight against a target, deaths and feed per bird, configurable alerts, and a weekly summary. The summary is written by the local AI, with an automatic plain-text fallback when the model is not available.
- An assistant that understands plain language. He writes, or dictates with his phone keyboard, a sentence in French such as "this morning 2 chicks died, I gave 4 kg of feed". A local AI model turns it into a structured proposal and shows what it understood. The AI does not replace the farmer's judgment. It never saves anything on its own: the farmer reads the proposal, corrects it if needed, and only a press on Validate stores it. Anything the model was unsure about is highlighted.
What my brother said. I could not test KukuTrack on a real batch in the time of this challenge, and he has not used it on his own phone yet. He tried it on my laptop, next to me, with a demo batch.
My own remarks after this test:
- Reminder titles and categories cannot be edited from the interface yet, only rescheduled and marked as done.
- The assistant needs a few seconds to answer on my old 2015 laptop, because the model runs on the processor only.
- The schedules, alert thresholds and target weights are placeholders. They must be confirmed with a veterinarian before a real batch.
- A short test on a demo batch cannot show how the app behaves over 45 to 60 days. That is the next thing to test.
Demo
Code
KukuTrack
A local-first broiler batch tracker that lets a farmer record poultry data in French, with optional open-weight AI running on the same computer.
Why this exists
KukuTrack was built for one real person: a small broiler farmer who needs a quick way to track a batch while working with an Android phone. Internet access can be unreliable and expensive, so the core application keeps the data on the farmer's own computer and does not depend on a cloud AI service.
Features
- Create batches and generate editable reminder calendars from
config/default_schedule.json. - Record daily mortality, feed, notes, and weigh-ins from a phone.
- View birds alive, mortality, feed, weights against an editable target curve, and reminder status.
- Show configurable, rule-based alerts and a weekly summary with a deterministic fallback.
- Turn a French sentence into an editable proposal with a local Ollama model; nothing is saved until the farmer confirms it.
- Run…
How I Built It
After the local models are installed, the core app runs without a cloud service. I developed and tested it on one old laptop, a 2015 MacBook with 16 GB of RAM.
-
AI: the open-weight model
gemma3:4b, run locally with Ollama 0.12.3. I use Ollama's structured output, so the model must answer with JSON that follows a schema. Gemma turns French sentences into a proposed entry and writes the weekly summary. - Backend: Python with FastAPI and one SQLite file.
- Frontend: plain HTML, CSS and JavaScript, opened on a phone from the same Wi-Fi network and installable as a PWA.
-
Coding agent: most of the code was written with OpenAI Codex, guided by an
AGENTS.mdfile with strict project rules and a plan of small prompts. The flow of the assistant:
- He types or dictates a sentence.
- The local model proposes an entry: date, dead birds, feed in kg, average weight, note.
- The app shows "I understood: ..." with editable fields.
- Only when he presses Validate is anything saved, and the server checks the values again. Because a small model can be wrong, and because this is about living animals, I set hard rules:
- No diagnosis, no treatment advice. At most, an alert says mortality is higher than usual and suggests checking temperature, water and feed, and asking a vet if it continues.
- Medical values are not hard-coded. Schedules and target weights are placeholders in editable configuration.
- The summary is guarded. If the AI text contains a number that is not in the real data, it is discarded and the plain summary is shown instead.
- The app works when the model is off or too slow. Manual entry is always available. [[OPTIONAL, delete if you have no real measurement: On my 2015 MacBook, the model answers in about N seconds. I tested N sentences and it understood N correctly. It struggled with ...]]
Limits. My test was much shorter than a real batch, which lasts 45 to 60 days, so these are early observations, not results. Alert thresholds, schedules and target weights are placeholders until a vet confirms them. Reminder titles and categories cannot yet be edited from the interface.
AI disclosure: I built KukuTrack with significant assistance from OpenAI Codex. I defined the project constraints, reviewed the implementation, tested the application, and corrected the product decisions myself.
Why Does Open Innovation Matter?
Here the open model made the project possible, not just cheaper.
- It works without internet. [[Confirm or edit this sentence: Where I live, internet access is unreliable and expensive, so a tool that depends on a cloud API would fail exactly when he needs it.]] Once the model is downloaded, KukuTrack needs no connection.
- His data stays with him. The farm records are a file on his own computer, not on someone else's server.
- It has no AI subscription or per-request API cost. For a small farmer, that decides whether he would actually use it.
- I could shape it. With an open model I control the prompt, the JSON schema, the model size and the behavior, and I can swap in a better model later or adapt it to Swahili. A closed API would have been simpler to call. But it would have needed a stable connection, a bill, and trust in a remote server for data that belongs to him.
Prize Categories
- Best Use of Gemma: Gemma runs locally through Ollama to turn French sentences into a proposed JSON entry and to write the weekly summary, always with human confirmation before saving.





Top comments (0)