Caffeinated Calendar: A Calendar App Born Out of Frustration

post-thumb

I’ve been self-hosting my own calendar infrastructure for a while now. CalDAV, Radicale, the whole stack. It works. But the one thing I could never get right was the client. Every calendar app I tried either wanted me to route everything through their servers, locked me into a single ecosystem, or just didn’t handle shared calendars well.

So I built one.

The Problem

If you share calendars with family or coworkers, you know the pain. You subscribe to your partner’s calendar so you can coordinate schedules, and suddenly you’re staring at their daily medication reminders, recurring gym sessions, and every minor errand they’ve scheduled for the week. The important stuff — the dinner plans, the kid’s school events, the actual scheduling conflicts — gets buried in noise.

Most calendar apps treat this as a binary: you either see all of a calendar’s events or none of them. That’s not how shared calendars work in practice. You want most of the events, just not all of them. And you definitely don’t want to delete them from the source calendar — that’s not your call to make.

This is the problem that pushed me over the edge into actually building something.

What It Does

Caffeinated Calendar is a cross-platform calendar app that connects directly to your CalDAV servers — Google Calendar, iCloud, Office 365, Zoho, Nextcloud, or any generic CalDAV provider. No account with us required. No data routed through our infrastructure. It connects, syncs, and runs entirely on your device.

The headline feature is client-side event filtering. You can hide specific events from shared calendars without touching the source. Long-press an event to hide it, or set up pattern-based rules — filter by keyword, time of day, all-day events, whatever makes sense for your workflow. The filters apply locally, so the person who owns the calendar never knows or cares.

Filtering pairs well with Calendar Views — saved groups of calendars you can switch between with a tap. Set up a “Work” view with just your work calendars, a “Personal” view for everything else, or leave it on “All Calendars” as the default. Each view still runs your filters, so you get a focused slice of your schedule without toggling individual calendars on and off every time you switch contexts. If you juggle multiple roles or just want to look at your week without seeing every calendar at once, it’s a small feature that removes a lot of friction.

Beyond filtering and views, it’s a full-featured calendar app:

  • Day, week, month, year, and agenda views — the basics done well
  • Offline-first — your calendar data is cached locally, so it works without a connection
  • Native widgets on Android and iOS for a quick glance at your schedule
  • Desktop support with system tray integration on Linux, Windows, and macOS
  • Search across all calendars with filters
  • Notifications with snooze, handled locally without Firebase or push infrastructure

It runs on Android, iOS, Linux, Windows, and macOS from a single Flutter codebase. One app, every platform.

The Privacy Angle

This one matters to me. There are no analytics. No tracking. No Firebase. Credentials are stored using platform-native secure storage — Keychain on Apple platforms, EncryptedSharedPreferences on Android, libsecret on Linux. Your calendar data never touches Caffeinated Softworks infrastructure because there is no Caffeinated Softworks infrastructure for it to touch. The app talks directly to your calendar provider and that’s it.

If you’ve been following the self-hosting posts on this blog, this shouldn’t surprise you. I built the kind of app I’d actually want to use, and “phones home to a server I don’t control” wasn’t on the feature list.

One-Time Purchase

No subscriptions. You buy it once and you own it. I’m not interested in building recurring revenue off a calendar app. It does what it says on the box.

Where to Get It

Caffeinated Calendar is available now. You can find it on the Caffeinated Softworks site along with links to the app stores.

If you’re running your own CalDAV setup — Radicale, Nextcloud, Baikal, whatever — give it a shot. And if you’re just using Google Calendar or iCloud and want something that works across all your devices without platform lock-in, it handles that too.

If you run into issues or have feature requests, reach out. I’m building this for people like me, and I’d rather hear about what’s broken than find out from a one-star review.


If this post helped you, consider buying me a coffee or even just dropping me a note,
I'd love to hear about what you've built or if you've got a topic you'd like me to post about.