Skip to content

Supabase

Supabase is the default subscriber store — production-ready with full CRUD and email logging.

Terminal window
export SUBSCRIBER_STORE=supabase # or just don't set it — this is the default
VariableDescription
SUPABASE_URLYour Supabase project URL (https://[project-id].supabase.co)
SUPABASE_SERVICE_KEYSupabase service role key

Cryyer expects a beta_testers table with the following columns:

ColumnTypeDescription
emailtextSubscriber email address
nametextDisplay name (optional)
producttextProduct ID
unsubscribed_attimestampSet to exclude from sends
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);
  • getSubscribers queries active subscribers (where unsubscribed_at is null) filtered by product ID.
  • addSubscriber inserts a new row.
  • removeSubscriber sets unsubscribed_at to the current timestamp (soft delete).
  • recordEmailSent logs the send event.

When using audiences, the product column stores the compound key (e.g. my-app:beta).