This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Durga Puja is a Hindu festival celebrating the goddess Durga. In Kolkata, it transforms the city: neighborhoods build elaborate, temporary shrines called pandals, and people spend several days visiting them, admiring the art, meeting friends, and celebrating together.
The magic can come with a less magical detail: getting stuck in a 9 pm crowd at College Square with no mobile signalāand a phone glowing in your face.
Kash phoolāthe white, feathery grass that flowers around this timeāis one of the signs that Pujo is near. A whole field turns white, and Kolkata remembers it has a body. Satyajit Ray put that grass in Pather Panchali. UNESCO added Kolkataās Durga Puja to its Intangible Cultural Heritage list in 2021. My mother still says ą¦ ą¦¾ą¦ą§ą¦° ą¦¦ą§ą¦ą¦¾ (thakur dekha): literally, āseeing the deity,ā but really, going to visit a pandal as if you were going to see a person.
I built Pandal Quest for that week.
You describe your evening the way you might tell a friend who knows your neighborhood, or para. For example: āIām taking my parents from Shyambazar on Saptami around 5. Short walks, no long queues, and they really want to see Kumartuli.ā Saptami is the seventh day of the festival.
A local copy of Gemma 4 turns that sentence into a structured request. A route planner that is not allowed to invent places then builds a walking route, treating queues as a real cost. After that, the app tries to disappear.
Pocket mode turns the screen black while keeping GPS active. A synthesized dhakāa traditional Bengali drumāplays when you arrive. A pandalās story unlocks only when youāre standing nearby. At the end, you get a Touch Grass receipt: time spent looking at the city compared with time spent looking at your screen.
Itās for the family that canāt manage College Square at 10 pm. For someone walking North Kolkata alone on Navamiāthe festivalās ninth dayābecause the lanes are the point. And for anyone who canāt be in the city but still wants to experience the shape of a Pujo night.
Iām Bengali. This is the week I want the phone to shut up.
Demo
Thereās no hosted demo, and thatās intentional: the language model runs on the computer serving the app. Nothing you type is sent to a remote AI service.
ollama serve
ollama pull gemma4:e2b
npm install
npm run dev
Then open http://127.0.0.1:4317.
The GIF shows a desk run. I tapped Parents, short walks, started the demo walk (itās clearly labelled, so its stamp stays honest), switched on Pocket mode, unlocked the first story, and finished on the receipt.
One Example Evening
Hereās a sample route starting at Shyambazar Metro at 5:00 pm on Saptami: four pandals, 3.0 km of walking, and an estimated 37 minutes of queue timeārather than aiming for the 9 pm crush. The planner estimates that this route avoids about 20 minutes of waiting.
Those crowd curves are heuristics, not live crowd data. The app says so because an estimate should never pretend to be a measurement.
The story doesnāt appear until you arrive. It was written ahead of time by the local model and saved in the app, so a dead mobile tower canāt take it away.
Read that receipt honestly: one pandal, 150 metres, 1 second looking at the city and 6 seconds looking at the phone. I was at a desk, and I ended the walk to take the screenshot. On the street, the phone goes in the pocket and those numbers should swap. The calculation doesnāt change. The receipt is there to make the screen time a little embarrassing.
I also got the trivia question wrong. I tapped Shiva. The card marked Durga in green and marked the stamp āmissed.ā Good. A Pujo app that lets you talk your way out of an answer isnāt much of a Pujo app.
One detail in the corner of every screenshot matters: Rules mode. Ollama wasnāt running when I took these. A small local parser understood āparents, Shyambazar, Saptami, 5 pm, no queues, Kumartuli,ā and the route solver built the plan in a few tens of milliseconds.
When Gemma is running, the label says Gemma 4 Ā· local, and the evening guide is written from the solverās numbers. If you have the model installed, retake the home-screen screenshot so the label matches your setupāand consider using it as the cover image.
Code
iambetaraybill
/
pandal-quest
Plan in thirty seconds. Walk all night. A Durga Puja companion for Kolkata, powered by local Gemma 4.
Pandal Quest
Plan in thirty seconds. Walk all night.
A Durga Puja pandal-hopping companion for Kolkata. You describe the evening the way youād tell a friend ā Saptami with my parents from Shyambazar, nothing with a long queue, Kumartuli is a must. A local copy of Gemma 4 turns that into a typed request. A deterministic planner then builds a walking route that treats queues as a first-class cost. Then the app tries to disappear.
Pocket mode keeps GPS alive on a black screen. A synthesised dhak drum plays when you arrive. Each pandalās story card unlocks only when youāre standing there. At the end you get a Touch Grass receipt: minutes looking at Durga versus minutes looking at glass.
Built for the DEV.to Hacktoberfest Open-Source AI Challenge, week 1 ā Touch Grass. The screen is the shortest part of the night.
Why this, and why open
Kashā¦
MIT. Node 20 or newer. Ollama is optional for the walk and required for the voice of the thing.
How I Built It
The model understands the request. Code computes the route.
Gemma 4 E2B runs through Ollama on the same machine that serves the app. Thereās no API key or usage meter. You can choose a different local model with PANDAL_QUEST_MODEL.
Gemma is good at understanding a request like, āWeāre a family, we hate queues, and we want to start at Shyambazar.ā Itās not the right tool for guaranteeing that a route fits within three hours or avoids the busiest part of the evening.
So the model returns structured JSON. Every pandal name is checked against a curated list of 38 stops. If a name isnāt on that list, itās dropped instead of being invented and placed on the map.
Then a route solver uses beam search to explore possible stop orders and 2-opt to improve the route. It considers walking time, estimated crowd levels, and the time available. Gemma can write a short guide, but only from the solverās resultsānot from facts it makes up.
The crowd estimate uses popularity, the type of puja, the time, and the day. Ashtami morning anjaliāprayers offered to the goddessāis handled as its own case. This is not a camera watching the streets. Iād rather admit the estimate may be wrong than pretend I have live crowd data.
Story cards are generated ahead of time with npm run stories (add --lang bn for the Bangla pack) and saved in the repository. If a card is missing, the app uses a curated fallback. Ask Dhaki is Gemma with tools: it can answer using crowd estimates, distances, and nearby metro stations. If the model isnāt running, Dhaki says so. Planning and walking still work.
The rest is deliberately ordinary: Next.js, React, TypeScript, Leaflet, and a service worker that keeps the app shell and previously viewed map tiles available offline. Change a preference chip and the route is recalculated in the browser. The cost to run is $0.
Two unglamorous bugs turned up while I was preparing the screenshots.
CARTOās keyless Voyager map tiles started returning an āAPI key requiredā message. The map was a red route line on top of a warning. I switched to Esriās World Street Map tiles and included their attribution in the corner. The pandal locations still come from OpenStreetMap.
Pocket mode also lost a fight with Leaflet. Leafletās map layers use high z-index values, while my black screen was set to 50, so the map showed through. I moved the black screen above those layers. Now the black screen winsāwhich is the whole point.
I used a coding agent for much of the build. That agent runs on someone elseās model, in a session that eventually ends. The Gemma that plans the evening runs on the laptop. Theyāre different machines, and I want the second one to be available on the street.
Why Does Open Innovation Matter?
Iāve stood at College Square with a full battery and no signal, watching people hold their phones above their heads as if a little extra height could find a network. Pujo crowds can overwhelm mobile service. A closed API is an expensive way to fail at exactly the moment you need it.
An open-weight model made this kind of walk possible:
- Your plans stay local. The sentence about your parents doesnāt have to leave your laptop. A night out shouldnāt become a prompt log.
- The walk can work offline. Stories are generated ahead of time and packed into the app, so the experience doesnāt disappear when the network does.
- The app still works without the model. A small rules-based parser and a plain-text guide can plan the route. The solver stays the same; the app simply offers less.
- You can change the model. One environment variable can point the app to another local model. You donāt have to rent access just to understand a sentence.
- Thereās no usage bill. A family can run it on a computer they already own. Thereās no meter on ą¦ ą¦¾ą¦ą§ą¦° ą¦¦ą§ą¦ą¦¾.
- The model has limits. It canāt invent a pandal and add it to the map. The curated list and route solver set that boundary.
A closed model might write a smoother paragraph. It canāt reliably sit in your pocket at 10 pm when the network failsāand it may charge you for every request. Kash phool doesnāt need an API key. The walk shouldnāt either.
My Agent Session
I donāt have a public DevRelay session to embed. The repository is the record: the 38 stops, the crowd clock, the Gemma layer, and the walking experience. If I save a session before the deadline, Iāll replace this paragraph with the embed.
Prize Category: Best Use of Gemma
Gemma is the language layer of the app. It turns a natural-language plan into a typed request, writes a guide from the solverās results, generates story cards ahead of time, and powers Ask Dhakiās tool-assisted answers about crowds, distances, and metro stations.
The route, geofence, dhak, and receipt are ordinary code by design. A language model should not be trusted to guess how long a queue will take.
Shashthi, the sixth day of Durga Puja, is only a few days away. If youāre in Kolkata, take this outside. If youāre not, the demo walk can still show you the shape of the night. Either way, look up.









Top comments (0)