Midhun P M — Case studyAniReminder
- Next.js 15
- React 19
- Auth.js
- Prisma
- PostgreSQL
- ntfy
- Docker
The problem
Seasonal anime schedules are messy. Some episodes release at a regular time every week. Others move around. I wanted a small personal tracker that could tell me what is coming up without turning into another tab I had to remember to open.
What I built
AniReminder lets me search AniList, follow a show, see live countdowns, and receive two kinds of private ntfy notifications: a morning release-day reminder and a push at the exact airtime.
- AniList GraphQL search supplies show metadata and air dates.
- Per-show controls pause or delete a reminder without affecting the rest of a watchlist.
- Private encrypted notification topics keep ntfy preferences protected at rest.
- A minute-level scheduler checks release times through an authenticated cron endpoint.
- Docker and PostgreSQL make deployment predictable while keeping the database on a private network.
What I learned
Notifications are easy to demo and hard to trust. A reminder that arrives late is worse than none. The app separates authentication, cron authorization, and data-encryption keys, and it treats the encryption key as a durable piece of state that needs backup.