DEV Community

Anirudha Basu Thakur
Anirudha Basu Thakur

Posted on AI-assisted

IRL Quest — AI That Gives You a Reason to Put Your Phone Down 🌿

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

IRL Quest 🌿

AI that gives you a reason to put your phone down.

Built for the Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass.

What I Built

Most modern consumer applications are designed to maximize digital engagement: longer sessions, deeper scroll depth, and habitual screen time. Conversational AI can fall into the same pattern, encouraging endless back-and-forth interactions.

IRL Quest turns that paradigm upside down.

The successful user spends less time using the application, not more.

Traditional AI Apps:
User → Prompt → Endless Chat & Scroll → More Screen Time

IRL Quest:
User → Preferences → Local AI Generation
      → Put Phone Down → Explore the Real World
      → Return → Brief Reflection
Enter fullscreen mode Exit fullscreen mode

The Inverted Engagement Loop

  1. Choose Preferences: Select a category (Nature, Exploration, Observation, Mindfulness, or Surprise), a duration (5, 10, 20, or 30 minutes), and a difficulty level.
  2. Local AI Generation: An open-weight instruct model running through LM Studio generates a real-world mission.
  3. Deterministic Safety Filtering: A programmatic regex-based filter checks generated quest content for known hazards, including trespassing, traffic, poisonous plants, dangerous climbing, and unsafe encounters.
  4. Touch Grass Mode: The interface switches to a distraction-free screen with a countdown timer and one message: PUT YOUR PHONE AWAY. GO EXPLORE.
  5. Real-World Discovery: The user puts the phone away and engages with their surroundings.
  6. Procedural Meditation Bell: A harmonic chime synthesized using the Web Audio API signals the end of the quest.
  7. Private Journaling: The user returns, writes a short reflection, and saves it to a browser-based journal with JSON export.

The goal is simple: use AI to facilitate real-world experiences rather than keeping people glued to a screen.

Demo

Application walkthrough

Cover banner

IRL Quest Cover Banner

1. Quest Configurator (/)

Configure quest preferences and check the local model connection.

Quest Configurator

2. Touch Grass Mode (/active)

A distraction-free interface with a countdown and the instruction to put the phone away.

Touch Grass Mode

3. Completion & Reflection (/complete)

Capture sensory observations and reflect on the experience.

Completion and Reflection

4. Local Journal & Statistics (/journal)

Review completed quests, track time spent outdoors, and export journal data.

Local Journal

Real-world field testing

The project includes documentation of outdoor tests in docs/FIELD_TESTS.md, covering an urban sidewalk, a public park, and a domestic balcony.

Note: Screenshots and test documentation supplement a demo; if you have a working deployed demo or video walkthrough, add its direct link here.

Code

  • GitHub repository: https://github.com/Ani0811/irl-quest
  • License: MIT
  • Technology: Next.js, React, TypeScript, Tailwind CSS, LM Studio, and open-weight language models.
  • Local inference: Compatible models include google/gemma-3-4b and Meta-Llama-3.1-8B-Instruct, subject to availability in your LM Studio setup.

The source code and project documentation are available in the repository.

How I Built It

IRL Quest is designed as a local-first web application, emphasizing user control, minimal distractions, and reduced dependence on cloud services.

Architecture

flowchart TD
    User["User"] --> UI["Next.js / React Frontend"]
    UI --> Setup["Quest Setup"]
    Setup --> API["Next.js API Route"]
    API --> Schema["Zod Validation"]
    Schema --> Safety["Deterministic Safety Filter"]
    Safety --> Provider["AI Provider Abstraction"]
    Provider --> LM["LM Studio Local Server"]
    LM --> Model["Open-Weight Language Model"]
    Model --> Safety
    Safety --> Active["Touch Grass Mode"]
    Active --> Complete["Reflection"]
    Complete --> Journal["Local Journal"]
    Journal --> Storage[("Browser Storage")]

Technical highlights

  1. Next.js App Router and TypeScript: Modular routes separate the interface from quest-generation logic.
  2. Model-agnostic AI provider: A standardized AIProvider interface communicates with LM Studio through its local OpenAI-compatible API.
  3. Deterministic safety filtering: Regex and keyword checks inspect generated quest fields for known risk categories, including trespassing, traffic, hazardous plants, wildlife contact, dangerous heights, and unsafe encounters. This is a risk-reduction measure, not a guarantee of safety.
  4. Epoch-based countdown: The remaining duration is calculated using Math.max(0, targetEndTimestamp - Date.now()), helping the timer recover from backgrounding and screen-lock interruptions.
  5. Procedural Web Audio: The completion chime is synthesized using harmonic sine waves and an exponential decay envelope instead of a bundled audio file.
  6. Automated tests: The project includes a Vitest suite for safety filters, JSON sanitization, schema validation, offline catalogs, and journal statistics.

Running locally

git clone https://github.com/Ani0811/irl-quest.git
cd irl-quest
npm install
Enter fullscreen mode Exit fullscreen mode

Start LM Studio, load a supported model, and enable its local server on port 1234. Then run:

npm run dev
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:3000 and configure a quest.

Exact setup requirements may depend on your local environment and the model you choose.

Why Does Open Innovation Matter?

Open innovation makes it possible to experiment with AI in ways that prioritize user autonomy rather than maximizing engagement.

1. Privacy and user control

Real-world habits and personal reflections can be sensitive. A local-first design can keep journal data in browser storage and use local inference, reducing the need to transmit that information to third-party services.

2. Offline independence

Cloud-based AI requires network connectivity. Running inference locally can make quest generation available without an internet connection, provided the application, model, and required assets are already available on the device.

3. Accessibility for independent developers

Open-weight models give developers more control over experimentation and deployment. Local inference can also avoid per-request API charges, although hardware, electricity, and setup still have costs.

4. Model flexibility

A model-agnostic provider abstraction makes it easier to experiment with different compatible models without redesigning the entire application.

5. A different definition of success

IRL Quest challenges the assumption that successful technology must maximize time spent inside an app. Here, success means helping someone leave the interface and engage with the world around them.

Open innovation makes this kind of experimentation more accessible to independent developers and the wider community.

My Agent Session

This project was developed with AI-assisted programming support using Google's Antigravity, including assistance with implementation, testing, and debugging.

Prize Categories

Best Use of Gemma

IRL Quest supports Google's open-weight Gemma model through LM Studio for locally generating real-world quests. This allows users to generate personalized offline activities using local inference rather than relying on a cloud-hosted AI API.

The project combines open-weight AI with a local-first architecture to encourage real-world exploration while reducing dependence on external AI services.

Thank you to DEV, MLH, Google, and the Hacktoberfest 2026 team for championing open AI innovation!

Top comments (0)