Daily Saints App

- Angular
- Ionic
- Capacitor
- TypeScript
- OneSignal
- Git
An Android app that shows the saint of the day, styled like a printed missal: warm paper, red rubrics, and Garamond type. Browse any date, search by name, save favourites, and get a notification each morning.
What it does
- Today: the day’s saint or saints, with image, story, patronage and a Wikipedia link
- Calendar: jump to any date, or search a saint by name
- Favourites: bookmark saints and find them later, saved on the phone
- Daily notification: a push each morning naming the day’s saint
Where it comes from
This is the phone companion to my Daily Saints API. The same saint data, a file per day, is bundled into the app itself rather than fetched. So the whole thing works with no signal: browsing, searching and favourites never touch the internet. Only the morning push needs it.
Built with Ionic and Angular, wrapped as a native Android app by Capacitor.
Decisions, and what they cost
The reminder is sent from a server I do not run
The obvious way to remind someone daily is an on-device alarm: schedule a notification on the phone and let it fire. I built that first. It worked on and off on my own phone, some mornings the reminder showed up and some mornings it didn’t, and I couldn’t see a pattern.
Then I read about battery managers. The aggressive ones, the kind Xiaomi and other makers ship, quietly kill scheduled reminders to save power. The alarm you set just never fires, and the app looks broken through no fault of its own.
So the reminder now comes from outside the phone. A free scheduled job runs once a day, looks up the day’s saint, and hands it to OneSignal, which delivers the push through Firebase Cloud Messaging, Google’s own pipe to Android. That path is the one thing battery managers do not block, because Android itself depends on it. The reminder arrives even on a phone that has throttled everything else.
No server, just a scheduled job
The daily sender is not a server I keep running. It is a scheduled task on GitHub Actions that wakes once a day, sends the push, and stops. Free, and nothing to maintain between runs.
The keys it needs to send are stored as repository secrets, never written into the code, so the repo can be public without exposing anything.
The reminder lands at 8 AM in each person’s own local timezone, which OneSignal handles: the job fires once on a fixed UTC schedule, but each push is held until 8 AM wherever the phone happens to be.
The honest trade-offs: the push needs internet to arrive, so it is the one part that is not offline. And 8 AM is fixed for everyone rather than a time each person picks. For a daily saint, a fixed morning reminder is enough, and it kept the notification path simple.
Styled like a missal, not an app
The look is deliberate: paper rather than white, red rubrics rather than a brand colour, and a serif face rather than a system font. The subject is old, and the design leans into that instead of dressing it up as a generic utility app.
The cost is fighting Ionic’s defaults, which want to look like a modern app. Worth it. The styling is the thing people notice first, and it makes a small data app feel considered.
What’s next
- An iOS build, since Capacitor makes it mostly a packaging job.
- A per-person reminder time, if it can be done without a server per user.
- The modern-calendar saint dates, once the API serves them.