This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
For most people, "touch grass" is a joke. For millions of smallholder farmers in Nigeria, the grass is the job, and getting it wrong costs a season.
The question every farmer asks at this time of year is simple: "Rain don start. Make I plant maize now?" Plant too early, on a false start, and the seedlings die in the dry spell that follows. Wait too long and you miss the window. The answer depends on how much rain actually fell in your village, what's coming this week, and what the season allows for your crop. That information exists, but it lives in English-language weather apps and extension PDFs, not in the languages farmers speak.
Ugbo (Igbo for "farm") is a voice-first weekly field plan. A farmer picks their town and crops, asks a question in Nigerian Pidgin, Hausa, YorΓΉbΓ‘, Igbo or English, and Ugbo:
- Checks the real rain at their village for the last 14 days and the next 7
- Works out what the season allows for each crop in their zone (South, Middle Belt, North)
- Speaks back a short plan in a Nigerian voice, ending with the one job to do in the field today
The screen is the shortest part of the experience. Ask, listen, go to the farm.
A real answer for Suleja (Niger State), maize and yam, this week:
See your week for Suleja. Rain wey fall for the last 14 days: 85 mm. Rain wey go fall for the next 7 days: 17 mm. The soil don wet well well. How sure: I sure. For your maize, na time to harvest. For your yam, na time to harvest... The main work for today: Waka round your farm, check for weed and insect.
Demo
Live app: https://cipoklean-ugbo.hf.space/
Hugging Face Space: https://huggingface.co/spaces/Cipoklean/ugbo
Try it: set your town, tick your crops, pick a language, type or say "Make I plant maize now?" and tap Get my week plan. The plan plays aloud automatically.
Code
| title | Ugbo |
|---|---|
| emoji | π± |
| colorFrom | green |
| colorTo | yellow |
| sdk | gradio |
| sdk_version | 6.30.0 |
| python_version | 3.12 |
| app_file | app.py |
| pinned | false |
| license | mit |
π± Ugbo β talk to your farm
Ugbo means "farm" in Igbo.
Ugbo is a voice-first weekly field plan for smallholder farmers in Nigeria A farmer taps one button and asks, in Pidgin, Hausa, YorΓΉbΓ‘, Igbo or English, something like "Rain don start, make I plant maize now?" Ugbo checks the real rain at their village, works out what the season allows for their crops, and speaks back a short plan that ends with the one job to do in the field today.
The screen is the shortest part of the experience. Ask, listen, go to the farm.
Try it: huggingface.co/spaces/Cipoklean/ugbo
How it works
π€ voice βββΊ NaijaVox-2.0 (open ASR) βββΊ question text
β
town βββΊ Open-Meteo / MET Norway / NASA POWER βββΊ rain facts (14 days back, 7β¦How I Built It
voice βββΊ NaijaVox-2.0 (open ASR) βββΊ question text
town βββΊ Open-Meteo / MET Norway / NASA POWER βββΊ rain facts
crops βββΊ plain-rule Nigerian crop calendar βββΊ this week's signals
Gemma 3 12B (open weights) βββΊ plan in the farmer's language
fact check βββΊ templated plan if Gemma drifts
Nigerian neural voice βββΊ spoken plan
Listening: NaijaVox-2.0. An Apache-2.0 Whisper-large-v3 fine-tune for Nigerian languages. Ugbo echoes back "You asked: ..." so a farmer can catch a mishearing before acting on the answer.
Thinking: rules decide the facts, Gemma decides the words. This was the most important design choice. A language model should never invent a planting date for someone whose harvest depends on it. So the facts come from transparent rules in season.py: planting and harvest windows per crop and zone, heavy-rain warnings (don't spray or fertilize before 25 mm+), dry-spell checks, and a soil-moisture estimate from rain minus evapotranspiration.
Gemma 3 12B, running in-process on Hugging Face ZeroGPU, only explains those facts in the farmer's language. Then Ugbo checks Gemma's work: every number in its answer must appear in the facts it was given. If Gemma invents a rainfall figure or a fertilizer rate, its answer is thrown away and a templated plan built from the rules is used instead.
Catching false starts. Early rain followed by a dry spell is the classic way to lose a season. Ugbo only treats the rains as established after 3+ rainy days in the last week, 20 mm+ in two weeks, and no 4-day dry spell in the forecast. Until then it says "wait", and every plan says how sure it is: sure, fairly sure, or not sure.
Always answering. Free GPU quota runs out, and a farmer shouldn't get an error. When Gemma is unavailable, Ugbo answers from the rules: a hand-written Pidgin template, machine-translated Hausa, YorΓΉbΓ‘ and Igbo, or English.
Speaking. I first used the phone's built-in Web Speech voice, then found it didn't play on my own Android phone. The web app now uses a Nigerian English neural voice for English and Pidgin and a Hausa voice for Hausa, delivered as a small MP3 that plays in any browser. The CLI can still speak with open voices (Naija TTS and Meta's MMS-TTS), which I'd like to bring back to the web app once I can afford the GPU time.
Free to run. Every weather source is free and keyless. The whole thing runs on a free Hugging Face Space, and the Gemma backend is swappable: ollama for fully local, or hosted Gemma when you don't have the hardware.
Why Does Open Innovation Matter?
Because the people Ugbo is for are the people closed AI forgets.
Nigerian languages exist in open models because Nigerians built them. NaijaVox, Naija TTS and MMS exist because researchers fine-tuned and released open weights for Pidgin, Hausa, YorΓΉbΓ‘ and Igbo. No closed speech API I looked at understood a Pidgin farm question as well, and I couldn't have fine-tuned one if it didn't.
I can make the model behave. With open weights I control the whole pipeline: the prompt, the fact check, the fallback. I can guarantee Ugbo never states a number the rules didn't produce. That matters more than eloquence when the advice is about someone's harvest.
It costs nothing to run. A farmer in Suleja shouldn't need a credit card, and neither should the developer serving them. Open weights on free compute, free open weather data, and an MIT license mean any extension office, co-op or student can fork it and run it for their own state.
It can go where farmers are. Gemma runs on ollama on a laptop. The next step is a WhatsApp voice-note or phone-call front end served from a cheap local machine, so farmers without smartphones or steady data can ask too. A closed API would make every one of those calls a bill.
What's not done yet. I haven't measured speech accuracy on real farm questions (Igbo is weaker), and the crop calendar still needs checking row by row against IITA and state ADP calendars. If you speak one of these languages or work in agricultural extension, that's the most useful contribution you could make. CONTRIBUTING.md has the details.
Prize Categories
- Best Use of Gemma: Gemma 3 12B writes every plan, constrained by a rules engine and a number-level fact check so it explains real data instead of inventing it.
Ugbo is a rule of thumb, not a replacement for your local extension officer. Rain data comes from weather models, not a gauge on your farm.
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.