This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.
What I Built
I built OFFSCREEN, a local-first activity planner that turns personal goals, available time, and current energy into a small, achievable offline session.
Most productivity apps are designed to keep us inside the app: more dashboards, notifications, streaks, and metrics. OFFSCREEN takes the opposite approach. The screen should be the shortest part of the experience.
A user tells OFFSCREEN:
- What matters to them, such as reading, gardening, sketching, exercising, or learning
- How much time they have
- How much energy they have right now
Gemma then creates a practical offline plan grounded in those goals.
For example, instead of saying “read more,” OFFSCREEN might suggest:
Read Atomic Habits for 20 minutes. Stop when the timer ends and mark where you want to continue next time.
After returning, the user can record whether they completed or skipped the session, how difficult it felt, and anything they noticed. Gemma analyzes that feedback so future sessions can become more realistic without using guilt, streak pressure, or generic motivational hype.
Demo
🔗 Live demo: https://youtu.be/Qu5YVQ0f4fw
🎥 Video demo: https://youtu.be/Qu5YVQ0f4fw
The main flow is:
- Add an offline goal
- Choose the time and energy you have available
- Generate a session with Gemma
- Leave the screen and complete the activity
- Return for a short reflection
- Use that feedback to make the next plan more realistic
Gemma runs locally through Ollama, so the complete AI experience can work without sending personal goals or reflections to a hosted model provider.
Code
💻 GitHub repository: https://github.com/teahsea/OFFSCREEN
The project is divided into three main applications:
React frontend
↓
NestJS API
↓
FastAPI AI service
↓
Ollama + Gemma 3 4B
PostgreSQL stores goals, planned sessions, activities, and feedback.
How I Built It
The AI core of OFFSCREEN is Gemma 3 4B, running locally through Ollama.
I chose a small local model because OFFSCREEN does not need unlimited general-purpose generation. It needs focused, structured decisions based on a compact set of user data.
The planning request contains:
- The requested number of minutes
- The user's energy level
- Their active goals
- Up to five recent feedback records
Gemma must return structured JSON containing:
- A session title
- A motivational message
- One or more activities
- Instructions for each activity
- The duration of each activity
- The goal associated with each activity
Why Does Open Innovation Matter?
OFFSCREEN handles unusually personal information: unfinished goals, energy levels, skipped activities, difficulty, and reflections about what did or did not work.
Running an open-weight model locally means that information does not have to leave the user's machine.
With Gemma and Ollama, the model becomes a replaceable component that runs inside the user's environment—not a remote authority that owns the experience.
What I Learned
The most important lesson was that structured output is only the first layer of reliability.
A response can be valid JSON and still be wrong for the application. Model output therefore needs to be treated like any other untrusted input: validate it, constrain it, retry carefully, and maintain a safe fallback.
I also learned that a smaller local model works well when the surrounding application gives it a narrow responsibility. Gemma does not own users, sessions, or database state. It receives a focused planning problem and returns a typed proposal. Ordinary application code remains in control.
That boundary made the system easier to test and much safer to evolve.
Prize Categories
- Best Use of Gemma
Gemma 3 4B is the core planning and feedback model in OFFSCREEN. It runs locally through Ollama and produces schema-constrained plans that are validated, corrected when necessary, and persisted through the application backend.
Top comments (0)