Subscriber Stores
Cryyer supports four subscriber store backends. Set the SUBSCRIBER_STORE environment variable to choose yours. Default is supabase.
| Store | Best for | Features |
|---|---|---|
| JSON File | Local dev, small lists | Simplest setup, file-based |
| GitHub Gist | Public repos, small lists | Private storage, no extra services |
| Supabase | Production, dynamic lists | Full CRUD, email logging |
| Google Sheets | Non-technical teams | Spreadsheet UI, easy sharing |
Interface
Section titled “Interface”All stores implement the same interface:
getSubscribers(productId)— returns active subscribers for a productrecordEmailSent(email, productId)— logs a sent emailaddSubscriber(email, productId, name?)— adds a new subscriberremoveSubscriber(email, productId)— unsubscribes someone
Audiences
Section titled “Audiences”When using audiences, subscriber lookups use a compound key: productId:audienceId. For example, a subscriber to the beta audience of my-app would have "my-app:beta" in their product list. Products without audiences use the plain product ID as before.
Quick comparison
Section titled “Quick comparison”# JSON (simplest)SUBSCRIBER_STORE=json
# GitHub Gist (private storage for public repos)SUBSCRIBER_STORE=gist
# Supabase (default, production-ready)SUBSCRIBER_STORE=supabase
# Google Sheets (spreadsheet-based)SUBSCRIBER_STORE=google-sheets