← back to articles

drrdrr

drrdrr

Notifications to my phone when Claude finished thinking or my video transcription script completed. That's all I wanted.

There are services and apps that do this., but they all want a subscription. For notifications? A dollar a month? not even life-time subs? Nah. For something this small and personal, that didn't feel right. Welcome, drrdrr.

What it does

Install the PWA on your phone, enable push notifications, copy the subscription JSON to your Mac once. Then:

drrdrr "deploy finished"

Phone buzzes (hence, drrdrr ICYMI). That's all it does.

The app also keeps a notification history, Notifications don't vanish after showing once, you get a tiny inbox inside the PWA. Figured that was important.

The stack

  • Static PWA frontend
  • Service worker for push handling
  • Serverless API on Vercel
  • Web Push API via web-push
  • IndexedDB for local notification history

It works on the iPhone because iOS 16.4 added proper web push for PWAs. Before that, this would have needed a native app. Apple finally got there.

How it works

Open the app in Safari, add to Home Screen, launch the PWA, enable notifications. The browser generates a push subscription and the app shows it as JSON. Copy it once to your Mac as subscription.json. Every curl from the terminal includes the message, the subscription JSON, and an auth token.

The server signs the request with my VAPID keys and forwards it to the browser push service. Service worker receives it, shows the notification, writes it to IndexedDB on my phone. There's no actual database setup needed. The backend is stateless and there's virtually no frontend either.

Vercel KV was an option but it felt like it was too much. There's enough infra with us already and we might as well use it instead of adding new parts just for the sake of it. And it wasn't like I was giving up on anything.. I just had to pass the subscription every time. So, IndexedDB it was.

If the subscription changes, I only have to update the JSON but I read that doesn't happen often so we should be ok.

Why PWA

Installable, push-capable, offline-capable, full-screen, no App Store. One codebase. For a utility like this and my use case, this is plenty.

What I like

Everything is mine. My endpoint, my token, my deployment, my device. No recurring charge. No platform dependency, except Vercel, of course. If there come's a day where Vercel isn't an option, I can just lift the whole thing and put it on Netlify or some other platform. The lack of other infra components is actually helping.

Right now drrdrr is intentionally narrow, but there are obvious extensions:

  • custom titles or tags
  • notification categories
  • a tiny web UI to send test pushes
  • shortcuts for scripts and cron jobs
  • support for multiple saved devices
  • encrypted message payloads
  • a nicer export/import flow for subscriptions

But I don't think I want to complicate it. The current version already does exactly what I wanted.

And I've learned that small tools stay useful longer when you resist the urge to turn them into platforms.

I also turned the curl command for this into an alias so I can now just do drrdrr "heya".

Honestly, I'm loving it.

GitHub