This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 1
What I Built
When this week's theme said get people off the screen, I knew who it was for: my Nana, my maternal grandfather.
Nana's doctor has advised him to walk at least 30 minutes a day. He is not frail. He cycles a few kilometres and walks to the market. But these days his evenings go to reels and serials on his phone. Nothing is wrong with his legs. What's missing is a reason to get up at five o'clock.
Chalo Nana (चलो नाना, "Let's go, Nana") gives him that reason, once a day, in a voice he likes:
- Someone in the family spends 30 seconds tapping how he is today: घुटने में दर्द है (knee pain), धूप तेज़ है (strong sun), आज बाज़ार हो आए हैं (already went to the market), and where he wants to go.
- A local Gemma model reads that Hindi, plain code decides how much walking is safe today and picks a loop through the places he likes, and Gemma writes it the way a granddaughter would say it.
- ElevenLabs turns it into a short Hindi voice note. Nana presses one big button on his phone, listens once, puts the phone in his pocket and goes.
The screen is the shortest part. Nana's whole interface is this:
Demo
90 seconds: the family page, the Hindi plan in the voice Nana hears (real place names removed), and the first walk.
The first real walk
On 11 October, the first evening of Navratri, the plan said: walk to the stadium, sit on its stairs for five minutes, go see the Durga Puja pandal next to it, come back past the stadium, home. My brother went with him.
- Out at 6:01 PM, back at 7:10 PM. About 2 km by the map.
- He heard the plan once and remembered it. My brother didn't have to lead.
- The phone stayed in his pocket the whole walk.
- He sat twice, both times at the stadium: five minutes as planned, and on the way back fifteen more, chatting with the children who are home from the city for the holidays.
- He came back tired, because he had already walked to the haat that afternoon.
What he said afterwards, in my words: he loved this year's pandal, "it looks like a real temple". He was happy because he met so many people and greeted them. And he was surprised that at the stadium, and even on the road, everyone was staring at their phones instead of looking at the evening and at each other.
That last line is the whole theme of this challenge, from a man whose evenings usually go to reels.

The pandal he loved: "it looks like a real temple".

The fifteen extra minutes: a selfie the children took with Nana at the stadium, the pandal behind them.
Both pictures are our own photos from the walk, cartoonized with AI so that nobody's real face or exact place ends up online.
The family page
Step 1 is grouped pills, plus a box for anything else. The places come from his own map:
Step 2 is the walk: the reason, the limits, the route, and the Hindi plan to listen to and send:
Screenshots use a made-up example village that ships with the repo. Nana's real map never leaves the laptop.
Code
Rahullkumr / chalo-nana
Hacktoberfest Week 1 DEV Challenge - Touch Grass
Chalo Nana · चलो नाना
A daily walk for my grandfather: planned on a laptop, spoken to him once in Hindi, and then the phone goes in his pocket.
My Nana's doctor has advised him to walk at least 30 minutes a day. His legs are fine. What he lacks is a reason to put the reels down at five in the evening.
Chalo Nana ("Let's go, Nana") gives him one. Every day a family member spends 30 seconds tapping how he is. A local Gemma model and some plain code turn that into a walk sized for him, through the places he likes, opening with what's happening there today. He hears it once, in a warm Hindi voice, and goes.
Built for DEV's Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass.
Screenshots use the made-up example village in …
Node 22, Fastify, plain HTML/CSS/JS with no build step, Ollama, ElevenLabs. One runtime dependency.
How I Built It
Plan A: OpenStreetMap. It knew one road, and it was the wrong one
My plan was to download his neighbourhood from OpenStreetMap once, build a graph of walkable streets, and search it for a loop. I wrote the downloader and pointed it at his village.
It came back with ten road segments. Nine were the highway, the one road I never want Nana walking along. The rest was one other road and fourteen ponds. No lanes, no temple, no stadium.
Villages don't give directions by street name anyway. People say "mandir se dam paanch minute". So the family made the map that way: places, and the minutes between them at his pace. We timed it on a real walk that morning. Each place says whether he can sit there and on what (the temple bench, a rock by the dam, the stadium stairs), and when it's lively: the haat on Thursday and Sunday, the stadium in the evening, the pandal for Navratri. Any link that goes along the highway is marked, and the planner never uses it.
The timings also gave his real pace: the dam is 1.5 km away and takes him 35 minutes, so 0.71 m/s.
So the app doesn't use OpenStreetMap at all. The map it plans on is the family's own file. For his village, the gap in OSM is now on my list to fix the right way: by adding his lanes to it.
Gemma understands, code decides
My first version let Gemma choose the minutes. I told it "knee pain, strong sun, walked too much yesterday". It kept the full 40 minutes, turned shade off and wrote "आज आप ठीक लग रहे हैं" ("you seem fine today").
So I split the job. Gemma now only reads the Hindi and fills a JSON schema: knee none | mild | strong, breathless, tired, already walked today, sun, rain, anything serious, places he wants. Fixed rules in code turn that into minutes, rests and whether uphill is allowed, clamped to the limits the family set. The same test line then came out right: knee pain plus sun gave 31 minutes, slow, no uphill, shade.
The planner is ordinary code. It enumerates every loop from home back to home over the place map, scores each one for fitting today's minutes, a seat every N minutes, places he likes, places that are lively right now, and places the family asked for. Then it picks the best. If nothing fits, it says so and offers a short walk to the nearest bench.
What the first walk broke, and what I changed
- The app said 30 minutes. Nana said pandal. He had already done the haat that afternoon, so the rules cut his walk to 30 minutes. That rules out the pandal, which is about 44 minutes there and back. He wanted to go anyway. The family can edit the minutes, so we set 45 and he went. Then I found a real bug: even with the pandal asked for, the planner preferred a shorter walk. A place the family asks for today now scores far above a few extra minutes.
- Gemma confused "went" with "wants to go". "दोपहर में हाट गए थे" ("went to the haat this afternoon") came back as wants: market, and an 80-minute round trip, uphill one way, came back as a "mild" outing. Two prompt lines fixed it.
- The stadium is 22 minutes, not 20. Updated in his map.
- A chat is not a walk. He was out 69 minutes, but 20 of those were sitting on the stadium stairs. Tomorrow's "he came back tired, go shorter" rule now counts only walking minutes, so it plans about 42 minutes of walking, not 59.
- His phone counted 1,957 steps. For about 2 km, that would mean a metre per step, which is not my grandfather. Phone pedometers undercount slow walkers. So the post uses the distance from the map, and the log keeps both numbers.
- "A local voice would be more comfortable." He liked the voice, but it was George, a British voice speaking Hindi. I switched to a young woman's Indian-accent Hindi voice from the ElevenLabs library. That's one line in
.env, plus one in his profile, because Hindi verbs follow the speaker's gender. In that voice, "मैं आपको बताता हूँ" (masculine "let me tell you") sounds wrong, so Gemma now writes as a granddaughter: "बताती हूँ". It also speaks to him ("आप चलिए", "you walk") instead of "हम चलेंगे" ("we'll walk"), because nobody from the phone is walking with him. - He doesn't need to be told how to walk. This was the honest one. He needs a reason, and he needs people. So the plan now opens with what's happening at the places on today's route: "नवरात्रि शुरू हो गई है और दुर्गा पूजा पंडाल सज गया है" ("Navratri has begun and the Durga Puja pandal is ready"), or "आज हाट का दिन है, जान-पहचान वाले सब मिलेंगे" ("it's haat day, you'll meet everyone you know"). Only then does it give the minutes.
Architecture
How I used Gemma
- Model:
gemma4:e4bin Ollama, on an i7 laptop with no GPU. It's 6.6 GB on disk. - Two jobs, both with a JSON-schema
format:- Read the family's Hindi or Hinglish into signals (about 9 seconds).
- Write the plan as a warm, spoken, Devanagari-only Hindi paragraph from structured steps (about 25 seconds).
- It never picks a number and never picks a place. The code does both, and then checks Gemma's paragraph against the route. If it mentions a temple, a tree or a shop that isn't on today's route, the paragraph is thrown away: one retry, then a plainer plan written by code. In testing it caught invented places on purpose-made bad text and passed every real plan.
- What it does well: it understands "कल ज़्यादा चल लिए थे" ("walked too much yesterday") and "saans thodi phool rahi hai" (Hinglish for "a bit short of breath") equally well. And it writes Hindi that sounds like family, not like a government form.
How I used ElevenLabs
- Only the plan text goes to ElevenLabs: no coordinates, no place map, no walk log.
- It's made once per day with
eleven_multilingual_v2at speed 0.9 and saved on the laptop. Nana can replay it as often as he likes for no extra credits, and it still plays if the internet drops. - The accent is Nana's choice. After the first walk he asked for a more local voice, so it's now a young woman's Indian-accent Hindi voice from the ElevenLabs library, a granddaughter talking to him. Swapping it is one line in
.env. - If ElevenLabs can't be reached, the phone's own Hindi voice reads the same text.
The voice matters more than anything on the screen. It's what turns "an app" into someone telling him to go, and Nana listens to voices, not screens.
Why Does Open Innovation Matter?
- His life stays home. His map, his profile and his walk log never leave my laptop, and the model runs there too. No location is sent anywhere: the map is a file the family wrote, not a GPS track.
- The map is open, so I can fix it. OSM didn't know his lanes. With a closed map I would just wait. With OSM I can add them, and the next family in his village gets them too.
- The model is swappable. One line,
OLLAMA_MODEL, changes it. The obvious next step: Gemma is open-weight, so it can be fine-tuned on Nagpuri, the dialect of his area, using sentences Nana himself dictates. With a closed model, his dialect would have to wait until a company decided it mattered. - It costs almost nothing to run every day. Gemma on a laptop is free. The only paid part is ElevenLabs, for one short voice note a day.
- It's for any Nana. There's no account and no server. Another family copies two JSON files, their places and their elder's limits, and it's theirs. Lots of Indian homes have an elder whose doctor said "walk 30 minutes a day", a family that's busy, and a phone full of reels. This is for them.
My Agent Session
The whole build, from the first question to the last bug, with Claude Code as my pair. It's curated: off-topic turns are removed, and real place names and personal details are replaced. You can see the moments the plan changed: OSM coming back empty, Gemma choosing the wrong minutes, and the walk numbers coming in.









