DEV Community

Cover image for Pawelle: a private pet companion for my friend's cat, powered by a local open model
PARTH BIDARI
PARTH BIDARI

Posted on

Pawelle: a private pet companion for my friend's cat, powered by a local open model

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

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

GitHub logo Parth-G27 / pawelle

Local-first pet wellbeing app: daily plans from an on-device open model

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_MODEL changes 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)

Collapse
 
parth_bidari profile image
PARTH BIDARI •

Share your thoughts/ feedback ❤️

Collapse
 
mandy_mor_e8a349d501010ea profile image
mandy mor •

Great app, I'll use it for my cat 😊

Collapse
 
koev3kcjausd profile image
koev3kcjausd •

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

Collapse
 
cubl9snp71hm profile image
cubl9snp71hm •

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:

  • Quantization trade-off: 4-bit GGUF thường đủ cho chat/intent classification, nhưng nếu cần structured output (JSON schema cho feeding schedule, vet reminders) thì 8-bit hoặc q5_k_m ổn định hơn, tránh hallucinate field missing.
  • Context window management: Lịch sử hội thoại con mèo không cần dài, nhưng system prompt nên nhét sẵn schema + few-shot examples để model không bị lệch format giữa các turn.
  • Tool calling vs regex parsing: Nếu chỉ cần extract entities (food type, time, symptom), regex + NER nhẹ (spaCy/gliner) chạy song song nhanh và deterministic hơn function calling trên model nhỏ.

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