DEV Community

Tanmay Patil
Tanmay Patil

Posted on

GrassQuest: AI That Invites You to Close the App

Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.

What I Built

GrassQuest turns a spare moment into a small outdoor adventure. Choose how much time you have, your mood, and your surroundings. Gemma then generates a personalized quest with a mission, a few objectives, and an optional bonus.

I wanted to build something that gives people a reason to step outside without making the activity feel like another productivity task. A neighborhood walk, a campus break, or a quiet moment in a park can be enough.

The key interaction is Touch-Grass Mode. Once a quest starts, the interface becomes a simple timer and reminder to pocket your phone. The active quest survives a refresh, so you can close the app and return later.

Afterwards, you can save a short reflection and an optional photo in your adventure journal. Guests can keep memories locally; signed-in users can access their completed entries across devices.

Demo

Try GrassQuest

You can generate a quest without creating an account. Sign in if you want a cloud journal.

GrassQuest homepage

A generated outdoor quest

Completed adventures in the journal

Taking it outside

I tested two quests in real use and found the experience worked well. I also checked generation, completion, and journal persistence. This was a small personal trial, rather than a study of whether the app changes people's habits.

The outdoor experience matters to the concept: the quest should be a short invitation, followed by time spent away from the interface.

Code

GitHub repository

The application source is MIT-licensed and includes local setup instructions, contribution guidelines, and tests.

How I Built It

The interface uses HTML, CSS, and JavaScript, with a Node.js backend deployed on Render.

Gemma 4, accessed through Google's hosted API, creates the quest content. The server sends the selected preferences and requests structured JSON. It validates the response before displaying the mission and objectives. The model is central to the product: it generates the personalized adventure, rather than serving as an extra chatbot.

MongoDB Atlas stores accounts, sessions, and completed journal entries. Passwords are salted and hashed with scrypt. Session cookies are HttpOnly, and journal queries are scoped to the signed-in user. Existing browser memories can be imported explicitly; retries use the same entry IDs to avoid duplicates.

I used Codex to assist with implementation and interface design. The hero landscape is AI-generated. I configured and tested the Google API, Atlas database, GitHub repository, and Render deployment.

All 15 automated tests passed during development. They cover model-response handling, authentication, session expiry, input validation, and account isolation using a database test double. I also verified the live application manually, including journal access from another browser session.

Why Does Open Innovation Matter?

Gemma's open weights make self-hosting and model adaptation possible beyond this hosted version. The application supports an alternative OpenAI-compatible model endpoint, which provides a path to experimenting with another Gemma deployment without redesigning the interface.

The current demo uses a hosted API. I have not tested offline inference or fine-tuning, and using open weights does not make this deployment automatically private or free to run.

For me, the value is having room to inspect, adapt, and eventually host the model behind the experience. The application code is also available for others to modify and contribute to.

Prize Categories

  • Best Use of Gemma: Gemma generates the personalized outdoor quests.
  • Best Use of MongoDB Atlas: Atlas provides persistent private journals and account/session storage behind the open-weight-model application.
  • Best Use of Render — for consideration: Render hosts the Node application, including the interface and server that calls Gemma. Model inference itself runs through Google's API.

What I Would Improve Next

I would add password recovery and email verification, improve rate limiting behind a reverse proxy, and test a local Gemma deployment. Active quest timers currently remain device-local, while completed account entries sync through Atlas.

GrassQuest's main idea is deliberately small: let AI help you choose a reason to go outside, then give the real world your attention.

Top comments (0)