adrbn/walletcast

Open-source, self-hosted lock-screen notifications through Apple & Google Wallet passes. No app required.

TypeScript

0

15 commits

updated Sep 28, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built a free, open source way to send lock screen notifications through Apple Wallet (businesses pay monthly for this) (r/SideProject)

Wallet-marketing tools charge small businesses a monthly fee for this: customers add a card to their Apple/Google Wallet, and the shop can send them notifications on their lock screen. **No app needed.** Turns out the whole thing is just a wallet pass that gets updated, so I rebuilt it and put it…

1

Sep 28, 2026

README


WalletCast turns Apple Wallet and Google Wallet into your own push-notification channel. Customers scan a QR code and add your card in one tap. From then on, every message you send lands on their lock screen, just like an app notification.

You don't need an app, an App Store listing or customer accounts. Wallet-marketing platforms charge a monthly fee for this. WalletCast is free, open source, and runs on your own server.


https://github.com/user-attachments/assets/5634ff05-0c70-43c5-a07f-99d5e0682a18


How it works

Three steps: scan a QR code, add the card to Apple or Google Wallet, receive notifications on the lock screen

Your whole channel on one screen

The WalletCast dashboard: a message composer, subscriber count split by Apple and Google Wallet, and a delivery history
Write, send, and see how many wallets your message reached, all from one page.

Everything you need

🔔 Lock-screen notifications

Send a message and it appears on every customer's lock screen, on iPhone and Android.

🎨 Your brand, live

Choose colours, logo, icon and text, and watch the card update as you type.

📱 One-tap add

Your public page detects the phone and shows the right Add to Wallet button. Collecting an email is optional.

🏷️ QR codes that tell you what works

Download PNG or SVG codes tagged by placement (window, flyer, receipt…) and see which one brings the most people.

📊 Delivery you can see

Subscriber counts per wallet, full message history, and delivery stats for every send.

🔒 Your data stays yours

Subscribers and history live in your database, and you can export everything as CSV whenever you like. There is no tracking and no middleman.

💸 No per-message fees

Send as often as you like. Your only costs are hosting and Apple's developer fee.

⚡ Zero-setup database

An embedded database works out of the box. Connect Postgres when you grow.


Made for

☕ Cafés & restaurantsDaily specials, happy hour, "we're open late tonight"
🛍️ ShopsFlash sales, new arrivals, restock alerts
🧘 Studios & gymsSchedule changes, new classes, last spots left
🎟️ Events & venuesDoors open, line-up updates, last-minute changes
🚀 Creators & foundersA direct line to your community, without a newsletter or social feed

Don't want to self-host?

A hosted WalletCast is in the works. You sign up, design your card and start sending, and the Apple and Google setup is done for you. The code stays open source, and your data stays exportable.

Join the hosted waitlist


Get started

What you need

CostSetup
Apple Developer Program, $99/year10-minute guide →
FreeStep-by-step guide →
A server with HTTPSFree tiers work (Vercel + Neon)Deploy guide →

You can start with one wallet and add the other later. The dashboard works without either, so you can design your card first.

Deploy in one click

Click Deploy to Vercel at the top of this page, then add a free Postgres database from Neon. Fill in four values when Vercel asks for them, and you're live.

Run it with Docker

git clone https://github.com/adrbn/walletcast.git && cd walletcast
cp .env.example .env        # set ADMIN_PASSWORD, SESSION_SECRET and BASE_URL
docker compose up -d

Open https://your-domain/dashboard, sign in, and create your first card. docs/deploy.md covers HTTPS with Caddy, backups and updates.

Try it locally

pnpm install
cp .env.example .env.local
pnpm dev                    # http://localhost:3000/dashboard

To test on a real iPhone, expose your machine over HTTPS (for example with ngrok http 3000) and set BASE_URL to the tunnel address.


FAQ

Do my customers need to install anything?
No. Apple Wallet is built into every iPhone, and Google Wallet comes with most Android phones. Customers tap Add to Wallet and they're done.
How many notifications can I send?
Apple has no fixed limit. Google shows up to about 3 notifications per card per day; extra messages still update the card, just without the alert. Keep messages useful and people will keep your card.
Why didn't a notification show up?
Wallets only notify when the text changes, so sending the exact same message twice produces no second alert. People can also turn notifications off for a card, or remove it. WalletCast detects removed cards and stops counting them.
How do people unsubscribe?
They remove the card from their wallet. There are no forms or emails.
Where is my data stored?
In your own database, on your own server. Apple and Google only see what's printed on the card. Your wallet certificates and keys stay in environment variables and are never stored in the database.
Is it really free?
Yes. WalletCast is open source under AGPL-3.0. You pay only for your hosting (free tiers are enough to start) and Apple's developer membership if you want Apple Wallet.

Coming next

  • 🗓️ Scheduled messages: write now, send Saturday at 9am
  • 📍 Nearby alerts: your card appears on the lock screen when customers walk past (Apple)
  • ⭐ Loyalty stamps with an in-store scan page
  • 🤖 Automations: welcome messages, "we miss you", birthdays

See the full roadmap.


For developers

WalletCast is built with Next.js 16, TypeScript, Drizzle (Postgres or embedded PGlite), passkit-generator and the Google Wallet REST API. The business logic is framework-free and covered by integration tests that run against a real SQL engine.

pnpm test            # unit + integration tests
pnpm test:coverage   # 80% coverage threshold
pnpm typecheck && pnpm lint

Read CLAUDE.md for the architecture and conventions, and docs/specs for the design. Contributions are welcome.


Support the project

WalletCast is free and always will be. If it saves you a subscription, you can buy me a coffee:

Support on Ko-fi

You can also star the repo ⭐ or share it with a business owner who would like it.




Made by @adrbn · AGPL-3.0
Apple Wallet is a trademark of Apple Inc. Google Wallet is a trademark of Google LLC. WalletCast is not affiliated with either.
apple-wallet
google-wallet
nextjs
passkit
push-notifications
self-hosted

adrbn/walletcast

Open-source, self-hosted lock-screen notifications through Apple & Google Wallet passes. No app required.

TypeScript

0

15 commits

updated Sep 28, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built a free, open source way to send lock screen notifications through Apple Wallet (businesses pay monthly for this) (r/SideProject)

Wallet-marketing tools charge small businesses a monthly fee for this: customers add a card to their Apple/Google Wallet, and the shop can send them notifications on their lock screen. **No app needed.** Turns out the whole thing is just a wallet pass that gets updated, so I rebuilt it and put it…

1

Sep 28, 2026

README


WalletCast turns Apple Wallet and Google Wallet into your own push-notification channel. Customers scan a QR code and add your card in one tap. From then on, every message you send lands on their lock screen, just like an app notification.

You don't need an app, an App Store listing or customer accounts. Wallet-marketing platforms charge a monthly fee for this. WalletCast is free, open source, and runs on your own server.


https://github.com/user-attachments/assets/5634ff05-0c70-43c5-a07f-99d5e0682a18


How it works

Three steps: scan a QR code, add the card to Apple or Google Wallet, receive notifications on the lock screen

Your whole channel on one screen

The WalletCast dashboard: a message composer, subscriber count split by Apple and Google Wallet, and a delivery history
Write, send, and see how many wallets your message reached, all from one page.

Everything you need

🔔 Lock-screen notifications

Send a message and it appears on every customer's lock screen, on iPhone and Android.

🎨 Your brand, live

Choose colours, logo, icon and text, and watch the card update as you type.

📱 One-tap add

Your public page detects the phone and shows the right Add to Wallet button. Collecting an email is optional.

🏷️ QR codes that tell you what works

Download PNG or SVG codes tagged by placement (window, flyer, receipt…) and see which one brings the most people.

📊 Delivery you can see

Subscriber counts per wallet, full message history, and delivery stats for every send.

🔒 Your data stays yours

Subscribers and history live in your database, and you can export everything as CSV whenever you like. There is no tracking and no middleman.

💸 No per-message fees

Send as often as you like. Your only costs are hosting and Apple's developer fee.

⚡ Zero-setup database

An embedded database works out of the box. Connect Postgres when you grow.


Made for

☕ Cafés & restaurantsDaily specials, happy hour, "we're open late tonight"
🛍️ ShopsFlash sales, new arrivals, restock alerts
🧘 Studios & gymsSchedule changes, new classes, last spots left
🎟️ Events & venuesDoors open, line-up updates, last-minute changes
🚀 Creators & foundersA direct line to your community, without a newsletter or social feed

Don't want to self-host?

A hosted WalletCast is in the works. You sign up, design your card and start sending, and the Apple and Google setup is done for you. The code stays open source, and your data stays exportable.

Join the hosted waitlist


Get started

What you need

CostSetup
Apple Developer Program, $99/year10-minute guide →
FreeStep-by-step guide →
A server with HTTPSFree tiers work (Vercel + Neon)Deploy guide →

You can start with one wallet and add the other later. The dashboard works without either, so you can design your card first.

Deploy in one click

Click Deploy to Vercel at the top of this page, then add a free Postgres database from Neon. Fill in four values when Vercel asks for them, and you're live.

Run it with Docker

git clone https://github.com/adrbn/walletcast.git && cd walletcast
cp .env.example .env        # set ADMIN_PASSWORD, SESSION_SECRET and BASE_URL
docker compose up -d

Open https://your-domain/dashboard, sign in, and create your first card. docs/deploy.md covers HTTPS with Caddy, backups and updates.

Try it locally

pnpm install
cp .env.example .env.local
pnpm dev                    # http://localhost:3000/dashboard

To test on a real iPhone, expose your machine over HTTPS (for example with ngrok http 3000) and set BASE_URL to the tunnel address.


FAQ

Do my customers need to install anything?
No. Apple Wallet is built into every iPhone, and Google Wallet comes with most Android phones. Customers tap Add to Wallet and they're done.
How many notifications can I send?
Apple has no fixed limit. Google shows up to about 3 notifications per card per day; extra messages still update the card, just without the alert. Keep messages useful and people will keep your card.
Why didn't a notification show up?
Wallets only notify when the text changes, so sending the exact same message twice produces no second alert. People can also turn notifications off for a card, or remove it. WalletCast detects removed cards and stops counting them.
How do people unsubscribe?
They remove the card from their wallet. There are no forms or emails.
Where is my data stored?
In your own database, on your own server. Apple and Google only see what's printed on the card. Your wallet certificates and keys stay in environment variables and are never stored in the database.
Is it really free?
Yes. WalletCast is open source under AGPL-3.0. You pay only for your hosting (free tiers are enough to start) and Apple's developer membership if you want Apple Wallet.

Coming next

  • 🗓️ Scheduled messages: write now, send Saturday at 9am
  • 📍 Nearby alerts: your card appears on the lock screen when customers walk past (Apple)
  • ⭐ Loyalty stamps with an in-store scan page
  • 🤖 Automations: welcome messages, "we miss you", birthdays

See the full roadmap.


For developers

WalletCast is built with Next.js 16, TypeScript, Drizzle (Postgres or embedded PGlite), passkit-generator and the Google Wallet REST API. The business logic is framework-free and covered by integration tests that run against a real SQL engine.

pnpm test            # unit + integration tests
pnpm test:coverage   # 80% coverage threshold
pnpm typecheck && pnpm lint

Read CLAUDE.md for the architecture and conventions, and docs/specs for the design. Contributions are welcome.


Support the project

WalletCast is free and always will be. If it saves you a subscription, you can buy me a coffee:

Support on Ko-fi

You can also star the repo ⭐ or share it with a business owner who would like it.




Made by @adrbn · AGPL-3.0
Apple Wallet is a trademark of Apple Inc. Google Wallet is a trademark of Google LLC. WalletCast is not affiliated with either.
apple-wallet
google-wallet
nextjs
passkit
push-notifications
self-hosted

Languages

TypeScript

71.5%

JavaScript

22.2%

Python

4.9%

CSS

1.0%