Disappearing reminders, emails that never arrived — continuous quality sprint
When you're building an app solo, some weeks you ship shiny new features. Other weeks, you spend your evenings hunting bugs nobody reported — because you found them yourself while dogfooding your own app. This was the second kind of week.
Here's a rundown of four fixes that look small on their own. But stacked together, they genuinely improve the daily experience.
Reminders that vanished into thin air
The scenario: you create a task with three reminders — one in 10 minutes, one tomorrow morning, one on Friday. But the first reminder is already in the past (you took too long to confirm). TAMSIV would display a warning: "This reminder is in the past." Fair enough.
The problem? Dismissing that warning wiped all reminders. The two perfectly valid future reminders were gone too. An overzealous cleanup in the validation logic.
The fix now clearly separates past reminders from future ones. The warning only targets what's actually expired, and upcoming reminders stay untouched. I also tightened up the overall validation — edge cases around time zones are handled better now.
Email reminders that never arrived
TAMSIV supports two notification channels for reminders: push (phone notification) and email. In theory. In practice, when a user created a reminder, only the push channel was enabled by default. Email? Silently disabled.
If you didn't manually toggle "email" on in the reminder settings, you'd never receive anything in your inbox. No error, no feedback — just silence.
Now both channels are enabled by default. You get a push and an email. You can still disable either one if you want, but at least the default behavior is what everyone expects.
The ghost error on cold start
This one doesn't break anything, but it erodes trust. You open the app after a few hours of inactivity, and for a split second an "Invalid Refresh Token" error flashes on screen. Then everything works fine.
What was happening: on cold start, Supabase tried to refresh the auth token. If it had expired, the SDK threw an error before the automatic reconnection mechanism had time to kick in. The error bubbled up to the UI when it had no business being there — the reconnection always succeeded anyway.
The fix intercepts this specific error at the right level and suppresses it from the display. Session refresh keeps working exactly as before, but the user no longer sees an alarming error message that doesn't concern them.
Badge guide translated into 6 languages
TAMSIV is available in French, English, German, Spanish, Italian, and Portuguese. The gamification system — levels, badges, streaks — is something users discover gradually. But the badge explainer guide only existed in French and English.
That's fixed now. All 10 badges, their unlock conditions, and their descriptions are translated into all 6 languages. It's not a flashy fix, but it's the kind of detail that makes a German-speaking or Portuguese-speaking user feel at home in the app.
What's next?
These four fixes represent roughly a day's work. None of them would make for an exciting changelog headline. But together, they eliminate real friction — lost reminders, missed emails, a trust-breaking error, a half-translated feature.
The quality sprint continues. The next session will probably be just as unglamorous — and just as necessary.