This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
🌱 TouchGrass — Let AI Get You Outside
What I Built
Honestly this is my first time participating, In fact I was only aware of the whole thing a week ago (I guess someone from the dev community could say I have been comfortably living under a rock :P) and my biggest challenge was to overcome the fear of being a beginner. Anyways I thought why not? Everybody has to start somewhere so here's to my beginning (Hopefully I stay consistent and become a better developer, Wish me luck guys)
How it works
- 📍 Find your location: Enter a location manually or optionally use browser geolocation.
- 🌤️ Get real-world context: Open-Meteo provides weather and local time information.
- 🌳 Discover nearby places: OpenStreetMap data, retrieved through Overpass API, provides nearby outdoor locations.
- 📏 Calculate distances: Python calculates straight-line distances using the Haversine formula and filters places according to the user's distance limit.
- 🤖 Generate a plan: A locally running Llama 3.2 model turns the available context and user preferences into an outdoor activity plan.
The goal is simple: less time deciding what to do, more time actually doing it.
Demo
Code
GitHub: https://github.com/harshuita/touch-grassai
Built with Python and Streamlit, with Ollama running the open-weight Llama 3.2 3B model locally.
How I Built It
I built TouchGrass using Python and Streamlit, keeping the MVP lightweight and running inference locally instead of relying on a paid LLM API.
The main components are:
- Llama 3.2 3B via Ollama: Generates personalized activity plans using the available context.
- Open-Meteo: Provides geocoding, current weather, and local time information.
- OpenStreetMap + Overpass API: Retrieves real-world outdoor locations.
- Python: Calculates distances, applies distance limits, and prepares verified place data before passing it to the model.
- Streamlit: Provides the interactive user interface.
- Browser Geolocation API: Allows users to optionally share their current coordinates.
One important design decision was to separate factual data retrieval from AI-generated recommendations.
The language model should not invent nearby parks or calculate distances. Python retrieves and filters the available locations, calculates their distances, and supplies that information to the model. The prompt also specifies a consistent output format and instructs the model not to invent locations or unsupported weather information.
External services can fail or return no suitable places, so the application also handles unavailable weather data and missing nearby-place results.
This is an MVP, and there are still limitations. OpenStreetMap coverage varies by area, straight-line distance is not the same as walking distance, and the model's output is not guaranteed to be accurate simply because the prompt includes constraints. These are areas I would continue improving.
Why Does Open Innovation Matter?
For this project, open innovation made it possible to build an AI-powered experience without making a paid, closed LLM API the foundation of the application.
Running Llama 3.2 locally through Ollama meant I could experiment with prompts, test model behavior, and iterate on the application without paying for every inference request.
It also encouraged me to think more carefully about what the model should and should not be responsible for. Instead of expecting the LLM to know everything about a user's surroundings, I combined an open-weight model with real-world data sources and deterministic Python logic.
The result is a small example of how open AI can be combined with open geographic data to create something practical.
I also like that the model can run locally, although the application still depends on external services for geocoding, weather, and nearby-place data.



Top comments (0)