Supabase
Supabase is the default subscriber store — production-ready with full CRUD and email logging.
export SUBSCRIBER_STORE=supabase # or just don't set it — this is the defaultConfiguration
Section titled “Configuration”| Variable | Description |
|---|---|
SUPABASE_URL | Your Supabase project URL (https://[project-id].supabase.co) |
SUPABASE_SERVICE_KEY | Supabase service role key |
Database schema
Section titled “Database schema”Cryyer expects a beta_testers table with the following columns:
| Column | Type | Description |
|---|---|---|
email | text | Subscriber email address |
name | text | Display name (optional) |
product | text | Product ID |
unsubscribed_at | timestamp | Set to exclude from sends |
Create the table
Section titled “Create the table”create table beta_testers ( id uuid default gen_random_uuid() primary key, email text not null, name text, product text not null, unsubscribed_at timestamp with time zone, created_at timestamp with time zone default now());
create index idx_beta_testers_product on beta_testers (product);create unique index idx_beta_testers_email_product on beta_testers (email, product);How it works
Section titled “How it works”getSubscribersqueries active subscribers (whereunsubscribed_atis null) filtered by product ID.addSubscriberinserts a new row.removeSubscribersetsunsubscribed_atto the current timestamp (soft delete).recordEmailSentlogs the send event.
When using audiences, the product column stores the compound key (e.g. my-app:beta).