What if AI could help us spend less time on our screens instead of giving us another reason to stare at them?
That question inspired me to build TouchGrass AI, a local-first AI application that turns your interests, available time, and energy level into personalized outdoor missions.
I built this project for the Hacktoberfest Open-Source AI Challenge — Week 1, themed Touch Grass.
🚀 What I Built
TouchGrass AI helps users discover simple outdoor activities instead of spending more time scrolling.
Users can explore activities such as:
- 🚶 Walking and exploring nearby places
- 🌱 Gardening and connecting with nature
- 🐦 Birdwatching and observing wildlife
- 📸 Outdoor photography
- 🧘 Mindfulness and relaxing outdoors
Users choose their preferences, and the app generates a personalized mission with practical steps to follow.
The goal is straightforward: make getting outside easier, more engaging, and accessible to more people.
🎬 Demo
Watch the project demonstration on YouTube:
The demo shows the interface, activity selection, personalized mission generation, and local AI functionality.
💻 Source Code
GitHub repository: github.com/harishhardik/TouchGrassAi
The project is open source under the MIT License.
🛠️ Tech Stack
- Frontend: React, TypeScript, and Vite
- Backend: Python and FastAPI
- AI runtime: Ollama
- Model: Qwen2.5 1.5B
- Web experience: Progressive Web App (PWA)
- Testing: Pytest
I chose this stack to keep the application lightweight, understandable, and capable of running AI inference locally.
🧠 How I Built It
1. A simple, preference-based experience
The frontend lets users select their interests and available time. These preferences are sent to the FastAPI backend, which prepares the request for the local language model.
2. Local AI inference
Instead of relying on a hosted AI API for every request, TouchGrass AI uses Ollama with Qwen2.5 1.5B to generate outdoor missions on the user's machine.
The model receives the user's preferences and generates a relevant activity with actionable instructions.
3. Fallback handling
AI output isn't always predictable. The backend validates the generated response and falls back to predefined missions if the model returns invalid output or the request fails.
This helps prevent a model error from breaking the entire experience.
4. Testing and offline verification
I added automated backend tests covering health checks, request validation, successful local AI responses, invalid model output, and connection failures.
The backend test suite passed all six tests, and the frontend production build completed successfully.
I also verified local mission generation with the internet disconnected after downloading the model.
Important distinction: the AI model must be downloaded first, and the web app must be loaded or installed beforehand. The local inference workflow can then operate without an internet connection.
🌍 Why Open Innovation Matters
For this project, open innovation isn't just about using an open model. It's about having greater control over how the application works.
Privacy: With local inference, mission-generation requests can stay on the user's machine rather than needing to be sent to a hosted AI inference provider.
Accessibility: Once the model and app are available locally, users can generate missions without requiring a continuous internet connection.
Transparency: Developers can inspect the backend, modify prompts, improve fallback behavior, and experiment with different models.
Flexibility: The project can evolve as new models and local inference tools become available.
These benefits come with trade-offs. Local models require disk space and computing resources, and their speed and output quality depend on the device.
For this project, I wanted to explore how local AI could support a useful everyday experience without making a remote AI service a runtime dependency.
🔬 What I Learned
Building TouchGrass AI helped me explore more than connecting a frontend to a language model.
I worked on integrating local inference with a web application, handling unpredictable model output, testing failure scenarios, and checking how the experience behaves offline.
It also reinforced an idea I want to explore further: AI doesn't always need to keep users engaged with technology. Sometimes, it can help them step away from it.
🔮 What's Next?
Some improvements I'd like to explore include:
- More personalized missions based on weather and location
- Mission history and progress tracking
- Additional local models and configurable inference settings
- Better offline support and accessibility
- Feedback that helps improve the quality of generated missions
🤝 Try It and Contribute
Check out the repository, explore the implementation, and share suggestions or improvements.
🌱 GitHub: https://github.com/harishhardik/TouchGrassAi
🎥 Demo: https://youtu.be/i8BnZB_kX8o
For me, TouchGrass AI is an experiment in using open-source AI to encourage a healthier relationship with technology.
Less scrolling. More growing. More time outside. 🌿
🏆 Challenge Details
Built for the Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass.
Prize categories: No partner-specific category is claimed in this submission.
Agent session: No DevRelay session link included.


Top comments (0)