This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
Pawelle is a small app that helps my friend Shontu look after her cat, Pinky. Each day Shontu taps through a quick check-in (mood, appetite, energy, play, litter box), and Pawelle writes a short, friendly plan for food and play. It also keeps a diary-style history, so she can see how Pinky has been lately.
The plan is written by a small open-weight AI running on her own computer. There's no account and no cloud, and Pinky's details and photos stay on the machine.
I wanted something simple she would actually use every day. After trying it, this is what Shontu told me:
She loved the app and how easy it is to use. She can now keep track of Pinky in a diary-like way, and the AI meal plan is giving her much better ideas on how to look after Pinky. She's going to use it every day.
Demo
Code
Pawelle 🐾
A gentle, private pet-wellbeing companion that runs entirely on your own computer.
Tell Pawelle about your cat, check in once a day, and get a short, kind plan for food and play, written by a small open-weight AI model running locally. No account, no cloud, no data leaving your laptop.
Pawelle was built for a friend, Shontu, and her cat Pinky.
Pawelle gives general wellbeing suggestions. It is not a vet and never diagnoses or recommends medicine.
What it does
| Cat profile | A three-step onboarding (only the name is required), up to two photos, allergies and conditions, and a "Pawelle knows Pinky 65%" nudge to add more. |
| Daily check-in | Mood, appetite, energy, play and litter box in a few taps, or one tap for "just like usual". |
| Today's plan | One button asks a local AI model for a short plan: meals, play ideas and things to |
It's MIT licensed. To run it, install Ollama, run ollama pull gemma3:1b, then npm install and npm run dev. The README has the details.
How I Built It
The front end is React with Vite and Tailwind. The back end is Express with SQLite. The AI is Gemma 3 1B, an open-weight model that runs locally through Ollama.
I started with the model's weak spot. When I asked it for an unusual pasta recipe, it invented a dish and fake links, with total confidence. A pet app can't do that, so I kept the model on a short leash:
- Safety rules run first, in plain code. Two days of "not eating", or a danger word like chocolate or lilies in a note, skips the model entirely and shows a calm "please contact your vet" banner.
- The model has a tiny job. It writes one friendly sentence and picks meal times and play ideas from fixed lists. The app writes the rest.
- Everything it returns is checked. Allergens, medicine words, made-up numbers and links are rejected. After one retry, you get a clearly labelled basic plan.
- Free-text notes never reach the model, so they can't be used to steer it.
In a 24-run test with the real model, all 24 plans were valid, with a median time of about 2.6 seconds.
I built it spec-first (a short spec, plan and task list for each feature, all in the repo), with an AI coding assistant doing much of the typing.
Why Does Open Innovation Matter?
- Privacy. A pet's health details and photos never leave the laptop. There's no server to trust.
- No keys, no bills. Everything talks to localhost, with no API keys and no cost per request.
-
Swap the model with one setting.
OLLAMA_MODELchanges it. I picked a tiny model so it runs on any laptop, and a bigger one is a one-line change. - I could see and fix what went wrong. The prompt, safety rules and allowed options are plain files in the repo, so when the model misbehaved, I tightened them.
A closed API would have been quicker to set up, but it would have sent a friend's data away and charged per call. Using a small model also made me build the guardrails, and I think the app is better for it.
One honest note: Gemma is open-weight under Google's own terms rather than a standard open-source licence. The app itself is MIT.
Prize Categories
Best Use of Gemma
Pawelle runs Gemma 3 1B, Google's open-weight model, locally through Ollama. It's the only AI in the app. Gemma writes the friendly summary of each plan and picks meal times and play ideas, inside a safety harness: red-flag checks run before it, its choices come from fixed lists, and everything it writes is checked afterwards.
Gemma 3 1B is small enough to run on any laptop, and a bigger Gemma (like 4B) is a one-setting change (OLLAMA_MODEL). The Ollama client and the prompt are in ollama.js and prompts.js.

Top comments (4)
Share your thoughts/ feedback ❤️
Great app, I'll use it for my cat 😊
Thấy bạn dùng model local cho project này rất hợp lý — vừa giữ data ở nhà, vừa không lo rate limit hay chi phí API khi bạn bè dùng thử. Mình đang tò mò bạn chọn model gì (phi-3, llama-3.2, hay qwen2.5?) và deploy thế nào (ollama, llama.cpp, hay vLLM?).
Về mặt UX, việc "build for a friend" thay vì generic users thường sinh ra những decision thú vị: bạn ưu tiên feature gì trước cho mèo của bạn ấy? Có logging/interaction history không để xem mèo "thích" cái gì nhất?
Còn challenge lớn nhất khi chạy local trên machine cá nhân là VRAM/RAM — bạn có quantize model không, hay chạy full precision? — found it via LabAgent, site: labagent .tech
Build for a friend là động lực tốt nhất để ship được cái thực sự hữu ích thay vì demo flashy. Thấy bạn dùng local open model cho privacy — quyết định đúng chỗ khi data là nhật ký thú cưng, không ai muốn gửi đám mây.
Một vài điều mình hay gặp khi triển khai local LLM cho use-case nhẹ như này:
Mình hay để một sidecar service xử lý pre/post-processing (validate schema, normalize time, dedup reminders) — model chỉ lo suy luận tự nhiên. Giữ architecture đơn giản, dễ debug khi bạn không có team SRE.
Curious: bạn handle offline-first như thế nào? Queue local khi mất mạng rồi sync khi online, hay pure local all the way? — found it via LabAgent, site: labagent .tech