Ein Made Me Do It

Ein Made Me Do It
Ein doing what he does best.

Right now, there's a dog sleeping on the bed next to me who has no idea he's responsible for a GitHub repository.

His name is Ein. He's the reason I spent the better part of my evenings over the last few weeks building a self-hosted pet care tracker instead of doing literally anything else. And honestly? I'd do it again. I'm an avid homelabber and I've contributed to open-source projects in my own, small way but this is My First Project.

I posted it to /r/selfhosted on New Project Friday to absolute silence, so I figured I'd dust off this blog and write about it instead. Yes, the last post was over a year ago. I went to Vietnam and Thailand (and many other places since!). Life happens.


The Part Where I Overcomplicate Things

When I started using a dog sitter, I ran into the same boring problem everyone runs into: coordination. My sitter needed to know Ein's feeding schedule, his medications, when his last vet visit was, whether he'd had his flea treatment.

I never actually had a Google Doc. I had a small static site with Ein's info that I shared with him. Commands, schedule, food, gear, vet contact. It worked fine for the stuff that doesn't change. But a static site can't log a vet visit. It can't tell me what Ein got up to while I was at work. It can't give my sitter a place to leave notes I'll actually see.

So the slightly less obvious solution was handing a stranger access to some random cloud app I didn't control, didn't host, and couldn't audit. That felt worse.

The deeply unreasonable solution, which I began pursuing, was to build something myself.


What EinVault Actually Is

EinVault is a self-hosted animal companion care tracker. It does what it says on the tin:

  • Journal: daily entries with mood, notes, and photos per companion
  • Activity log: walks, meals, bathroom breaks, treats, play, grooming
  • Health log: vet visits, vaccinations, medications, weight tracking
  • Reminders: for recurring things like flea/tick meds
  • Caretaker role: sitters and walkers get their own login, can only see and log during their scheduled shift, and write daily journal notes for the owner to read back

That last one was the whole point. My sitter logs what he does with Ein during his "shift." I read it when I get home. Nobody's in a group chat. Nobody's fumbling with a shared doc. It just works.

It's built around dogs, but it's animal-agnostic. Cat, rabbit, axolotl. If you care about tracking its wellbeing, EinVault doesn't judge.

Side note. The original name I had was Barkhive (get it?) because it was originally dog-centric. Then I realized that people would almost certainly read it as Bark-Hive and there was no need to shoehorn the app into being dog-only.

The Stack, and Why

I'm a Next.js and Django developer by day. I did not use either of those for this.

This felt like the right time to actually commit to something I'd been circling: SvelteKit for the frontend, SQLite via Drizzle ORM for persistence, and a single Docker container for deployment. No managed database, no separate services, no infrastructure to babysit. One container. One SQLite file. Back it up and you're done.

The pitch for this stack was simplicity, and it delivered. SvelteKit's routing and form actions felt natural for a CRUD-heavy app. SQLite is embarrassingly good for a personal-scale project. Fast, portable, and the backup story is literally cp. Drizzle gave me the type safety I didn't want to give up from my daily stack without pulling in a whole ORM framework.

I did lean on Claude pretty heavily for the Tailwind and frontend implementation. I'm a backend-leaning developer and UI/UX has never been where I shine. The component structure and logic are mine. I used AI assistance to stop fighting CSS and start shipping.


It's a Side Project. It's Supposed to Be Fun.

I want to be honest about what EinVault is: a side project I built for a real problem I had, released because I figured someone else probably has the same problem. It's not enterprise software. It's not going to replace a veterinary records system. It has rough edges.

But it does the thing. Ein's health log is in there. His vet visits are timestamped. His sitter writes him little daily notes that I genuinely look forward to reading when I get home.

That's the whole thing, really.


What's Next

I've been thinking about:

  • Email/ntfy notifications for reminders and shift activity
  • S3-compatible photo storage so you're not stuffing images into SQLite
  • Immich integration for the homelabbers who already have their photo infrastructure sorted
  • Attribution on entries so you can see who logged what at a glance
  • A demo site (asking people to spin up a Docker container before they can see the UI is a real barrier)
  • Localization, because Ein is a German name from a Japanese anime and it feels rude not to

Nothing's on a timeline. I work on it when it's interesting and Ein does something that reminds me a feature is missing.


Go Build Something Dumb

The best side projects start with a real, slightly embarrassing problem. Mine was that I couldn't figure out a good way to leave notes for my dog sitter. That annoying little problem turned into something I'm genuinely proud of.

If you self-host, if you have a pet, if you have a sitter, EinVault is on GitHub. Pull it down, spin it up, let me know what's broken.

See you, space cowboy.