Phanera data flywheel setup.
The pages are built. To make submissions persist, connect a Supabase table and add environment variables in Vercel.
Design: submissions are saved as pending first. Public pages only show approved reports.
Supabase table SQL
create table if not exists public.phanera_user_reports ( id bigint generated by default as identity primary key, created_at timestamptz not null default now(), status text not null default 'pending', category text not null, tool_slug text, country text, region text, city text, item_type text, amount numeric, currency text, outcome text, rating int, notes_public text, source_page text, user_agent_hint text ); create index if not exists phanera_user_reports_status_idx on public.phanera_user_reports(status); create index if not exists phanera_user_reports_category_idx on public.phanera_user_reports(category); create index if not exists phanera_user_reports_created_idx on public.phanera_user_reports(created_at desc); alter table public.phanera_user_reports enable row level security;
Vercel environment variables
- SUPABASE_URL — your Supabase project URL.
- SUPABASE_SERVICE_ROLE_KEY — used only by the serverless submission API.
- SUPABASE_ANON_KEY — optional for public approved-report reads.
After adding variables, redeploy the site.
Moderation workflow
- User submits an anonymous outcome.
- API saves it with status pending.
- You review rows in Supabase.
- Change safe rows to approved.
- The public outcome page shows only approved rows.