The blog’s invite-only comments run on Supabase (free tier). The static site talks to it directly with the public anon key — all security is enforced by database Row-Level Security, so nothing secret lives in the repo.
Create a project at https://supabase.com (free tier is fine).
Run the schema. Dashboard → SQL Editor → paste the contents of
supabase/schema.sql → Run. This creates the
approved_emails, applications, and comments tables plus all the security rules.
Enable email auth. Authentication → Providers → Email — make sure it’s enabled (magic link / OTP). No passwords are used.
https://sc103121.github.iohttp://localhost:4000/**https://sc103121.github.io/**_config.yml:
url — Settings → Data API (or the Connect button): https://YOUR-PROJECT.supabase.coanon_key — Settings → API Keys → the Publishable key (sb_publishable_…).
This is the new name for the old “anon public” key and is browser-safe with RLS on.
The Legacy tab’s anon key also works if you prefer it.
supabase:
url: "https://YOUR-PROJECT.supabase.co"
anon_key: "sb_publishable_..."
Both are safe to commit — they’re designed to be public. Never put the Secret key
(sb_secret_…) / service_role key in the repo.
approved_emails row, set is_owner = true. That
lets you delete any comment from the site (not just your own). Also set your own display_name.JEKYLL_ENV=production bundle exec jekyll serve.