DEV Community

Cover image for LifeBuddy - a local-first AI copilot for an overloaded student
yash pawar
yash pawar

Posted on

LifeBuddy - a local-first AI copilot for an overloaded student

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

LifeBuddy — a local-first AI daily companion built for my busy student friend who always says "I don't know where to start" when the week fills up with essays, problem sets, emails, errands, and a group project. The problem isn't a lack of tasks — it's that the list feels bigger than the day, and every planner app they've tried feels cold or overwhelming.
LifeBuddy solves it in one friendly flow:

  • Brain-dump mode: type everything on your plate in plain language, and it becomes structured tasks with deadlines, durations, and priorities.
  • AI daily planner: tell it how many hours you have and your energy level, and it builds a realistic schedule — with explanations for why tasks are ordered that way, built-in breaks, and warnings when the work exceeds the available time.
  • Break it down: an overwhelming task becomes a checklist of small, specific steps you can actually tick off.
  • Replanning: "I only have 1 hour now", "I'm exhausted", "a new task came up" — it adjusts without deleting completed work.
  • End-of-day reflection: a kind, honest summary of what got done. No guilt, no hype.

Demo

  • Live demo (Vercel): https://lifebuddy-chi.vercel.app
  • Live demo (GitHub Pages): https://yashspidey.github.io/lifebuddy/
  • Run locally with live AI: npm install npm run dev ollama pull gemma3:4b
  • The hosted demos run in clearly-labeled Demo mode; live AI works on localhost, where prompts go only to your own Ollama server — never to a third-party cloud. Code https://github.com/yashspidey/lifebuddy src/ lib/ai/ # Ollama live client + clearly-labeled demo fallback + validation lib/planner.ts # deterministic scheduling, ordering, overflow detection lib/validate.ts# parse, validate, coerce every model response components/ # Dashboard, Tasks, Planner, Breakdown, Progress, Settings

Code

https://github.com/yashspidey/lifebuddy

How I Built It

The core is an open-weight Gemma model (gemma3:4b) served locally via Ollama, called through its HTTP API (/api/generate with format: json). It powers task-dump parsing, daily planning, task breakdown, replanning, and the day summary. The model name and base URL are configurable via environment variables.
I deliberately didn't let the model do the bookkeeping: deadline ordering, start times, hour totals, and overflow detection are deterministic TypeScript. The model proposes a plan; the app validates every field, recomputes the schedule, and shows a friendly error (never silent bad state) on malformed JSON. If Ollama isn't running, the app falls back to an explicitly-labeled Demo mode — Live AI is never faked.
Frontend: React 19, TypeScript (strict), Vite, Tailwind CSS 4, Lucide icons. Persistence is local-first via localStorage — no accounts, no cloud DB. Tests: Vitest + React Testing Library (23 tests passing). Deployed on Vercel and GitHub Pages via CI-ready configs (vercel.json, gh-pages).

Why Does Open Innovation Matter?

A planning companion is deeply personal. A closed API would mean my friend's assignments, deadlines, and stress flowing through someone else's servers forever. With open-weight Gemma running locally, their task dump stays on their laptop — the only "network call" is a private handshake with their own Ollama server. Open innovation made the privacy story true, not a line in a ToS.
It also means zero cost, no rate limits, and any open-weight model (Gemma, Llama, Phi) by changing one env variable. A closed API gives you a monthly bill and a deprecated model. Open innovation gives you a tool that stays yours.
My Agent Session
Built collaboratively with an AI coding agent (OpenCode). The session covered scaffolding, the AI abstraction layer, Ollama integration, validation logic, the full UI, tests, screenshots, and both deployment targets. Saved session: PASTE-YOUR-SESSION-LINK
Prize Categories

  • Best Use of Gemma — core planning/parsing/breakdown features run on a local Gemma model via Ollama.
  • Best Use of Render — placeholder, only if you actually deploy on Render (we used Vercel + GitHub Pages instead, so remove this).

My Agent Session

Built with an AI agent (OpenCode). Full transcript — prompts, reasoning, tool calls, and code changes — saved on DEV:

LifeBuddy — DevRelay session export + Render deploy for hackathon submission
You

Challenge submission checklist: (1) PASTE-YOUR-SESSION-LINK — export via DevRelay if I want the optional section. (2) Delete the 'Best Use of Render' bullet unless I actually add a Render deploy. How do I get the DevRelay session link (short answer), and can you add a Render deploy?

Agent

Investigated the LifeBuddy project: React 19 + TypeScript + Vite, local-first AI daily companion (Ollama with open-weight models like Gemma, localStorage persistence, graceful demo-mode fallback). Found a render.yaml blueprint already in the repo (static site: npm run build -> dist/). Explained the DevRelay session export flow (submit_agent_session -> dev.to session, embeddable with the {% agent_session %} Liquid tag) and the Render deploy path (GitHub repo -> Render dashboard -> New Static Site -> auto-detects render.yaml -> Deploy).

You

Decision: deploy to Render for real (so the 'Best Use of Render' bullet is legitimate) and export this session to DevRelay to get the link.

Agent

Agreed plan: (1) verify npm run build passes and the GitHub remote is correct; (2) submit this session to DEV via DevRelay and return the session link; (3) once the user deploys via the Render dashboard and pastes the live URL, add it to the README next to the GitHub Pages and Vercel demos. Outcome: 'Best Use of Render' bullet legitimately kept.

You

Now fill in the submission template: the 'My Agent Session' section (embed the DevRelay session) and the 'Prize Categories' section.

Agent

Build passes and the repo is connected to GitHub. Submitting this transcript to DevRelay to obtain the session link for the submission. Prize categories to list: Best Use of Gemma (core AI features run on local Gemma via Ollama) and Best Use of Render (real static deploy via render.yaml).

You

Render deploy log: cloned from github.com/yashspidey/lifebuddy, Node 24, npm install clean (0 vulnerabilities), npm run build succeeded (1913 modules, built in 326ms), build uploaded — 'Your site is live'.

Direct link: https://dev.to/agent_sessions/lifebuddy-devrelay-session-export-render-deploy-for-hackathon-submission-ocx2vp

Prize Categories

  • Best Use of Gemma — the core AI features (task parsing, daily planning, task breakdown, replanning, end-of-day summaries) run on a local Gemma model via Ollama.
  • Best Use of Render — deployed as a static site via the repo's render.yaml blueprint (Demo mode on Render; live AI needs a local Ollama server). Live: https://lifebuddy.onrender.com/

participated solo. no team.

Top comments (0)