The Quiet Work Between Releases

· Pavel · release

releasehabitsreliabilitymedia

The blog went quiet for a while.

The app did not.

Since the last update here, Meo Mai Moi moved through a long chain of releases. Some of them were visible and friendly: better habit tracking, nicer pet photos, smoother weight history. Some were the kind of release where the best user experience is that nobody notices anything at all: safer update prompts, auth recovery, deployment hardening, dependency refreshes, scheduler safety.

This is not a full changelog. Changelogs are useful, but they are not always good stories.

The story is that the app spent the last few months becoming less fragile.

Habits Became More Like Real Life

Habit tracking started as a powerful prototype. It could already track daily routines, show history, and help with the quiet repeated parts of care: grooming, playtime, medication, training, cleaning, all the little things that do not look dramatic until you stop doing them.

But real routines are messy.

So habits got more flexible. You can edit which pets belong to a habit. Inactive pets are no longer pulled into active tracking, while their historical entries remain visible. Day summaries became more nuanced, with different modes for scored pets and totals. Habit detail pages became calmer. Heatmaps got more responsive. Dialogs learned how to behave on small screens.

And then time zones arrived.

That sounds like an engineering footnote until you remember that a “day” is not an abstract thing for a caretaker. If someone travels, moves, or cares for animals across different local rhythms, the routine should follow the actual day boundary that makes sense for that habit.

Good care software should not argue with the sun.

Weight Tracking Got Sharper

Weight tracking is one of those features that looks simple from far away.

Add number. Draw chart. Done.

Of course it is not done.

Long-term weight history needs filtering so the useful signal does not get buried. Mobile layouts need to keep charts and history readable. Updates should appear immediately after a tare weight changes. And yes, the app now has a suspiciously serious hidden owner tare-weight history for people using the classic “weigh myself, then weigh myself holding the cat” method.

It is a tiny feature with a very specific kind of honesty.

Not everyone has a smart pet scale. Not everyone has a clinic nearby. Sometimes the available tool is a bathroom scale, a patient human, and a cat who has strong opinions about being lifted.

Meo Mai Moi should support that reality too.

Photos Stopped Feeling Like an Afterthought

Animals are not rows in a database. Their photos matter.

Over the recent releases, the media workflow got a serious pass: drag and paste uploads, upload progress, validation, reusable upload handling, image cropping, rotated crop fixes, thumbnails, lazy loading, better caching, and more consistent rendering across pet profiles, helper profiles, messages, and health records.

This is partly polish. It is also trust.

If someone uploads a medical photo, a pet profile picture, or a helper profile image, the app should not make that feel fragile. The image should appear where expected, cache properly, and not quietly turn sideways because reality entered through a phone camera.

The pet profile header also got a redesign around a stronger side-by-side avatar layout. Small visual changes like that matter because people read a pet profile emotionally before they read it technically.

Updates Became Less Rude

A web app that updates itself can be helpful.

A web app that updates itself while you are filling in a form is rude.

So we made update prompts more patient. Version mismatch and PWA update prompts now avoid interrupting blocking dialogs and dirty forms. The reload path got more reliable, with fallbacks when service-worker handoff stalls. Standalone PWA startup got better at recovering existing authenticated sessions instead of briefly flashing the login screen.

There was also a lot of authentication hardening around transient startup states, cached identity, in-app browser weirdness, and recovery flows after deploys.

This is the boring edge of care software: do not scare the user into thinking their session vanished, do not reload while they are editing something important, and do not turn a deploy into a tiny crisis.

The Invisible Infrastructure Work

Some releases were mostly about deployment and security.

The CI deploy path stopped mounting the Docker daemon socket, closing a serious privilege-escalation risk. Backend images moved to on-host builds using the target host cache. A/B slot rollouts became cleaner, with old slots retired after a configurable rollback window. Scheduler behavior got safer so birthday reminders do not duplicate if jobs overlap.

There were dependency refreshes, generated asset updates, PHPStan cleanup, OpenAPI artifact checks, Docker fixes, and many small tests added around the places most likely to crack.

This is not glamorous work.

But when a project is public, connected to real accounts, and storing real pet care history, boring is not optional. Boring is part of the promise.

Still Small, Still Moving

Meo Mai Moi is still a small independent project. It is not pretending to be a giant platform with a polished quarterly release machine.

But the last few months mattered.

The app became better at daily routines, better at photos, better at weight history, better at updates, better at startup recovery, and better at deployment safety. Not every change deserves its own essay, but together they show the direction clearly:

less friction, less surprise, more durability.

Care is not only the big features. Sometimes care is the quiet work that makes tomorrow’s small task feel safe.