Collected data
Submissions
Click any row to see the full application, all fields, and open the uploaded documents.
Backend mode
Submissions are always saved on the visitor's device first, then pushed to the backend. If the backend is unreachable they queue and retry automatically.
Supabase setup — run once in the SQL editor
create table if not exists seller_applications (
id text primary key,
created_at timestamptz default now(),
status text default 'new',
source text, language text,
full_name text, email text, phone text, country text, city text,
seller_type text, store_name text, bio text,
categories text[], website text, social text, shipping text,
documents text[], document_urls text[], documents_pending boolean,
raw jsonb
);
-- storage bucket for ID / licence / product photos
insert into storage.buckets (id, name, public)
values ('seller-docs', 'seller-docs', false)
on conflict (id) do nothing;
create policy "public upload seller docs" on storage.objects
for insert to anon with check (bucket_id = 'seller-docs');
create table if not exists waitlist (
id text primary key,
created_at timestamptz default now(),
email text, intent text, country text, interests text,
source text, user_agent_lang text
);
alter table seller_applications enable row level security;
alter table waitlist enable row level security;
-- anyone may submit, nobody may read with the public key
create policy "public insert apps" on seller_applications for insert to anon with check (true);
create policy "public insert waitlist" on waitlist for insert to anon with check (true);
With those policies the public site can write but not read. To read submissions here, either read them in the Supabase dashboard, or add a select policy for an authenticated team role.
Google Sheets setup — Apps Script webhook
function doPost(e) {
var body = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName(body.table) || ss.insertSheet(body.table);
var rec = body.record;
if (sh.getLastRow() === 0) sh.appendRow(Object.keys(rec));
var headers = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];
sh.appendRow(headers.map(function (h) {
var v = rec[h];
return Array.isArray(v) ? v.join('; ') : (v === undefined ? '' : v);
}));
return ContentService.createTextOutput('ok');
}
Deploy → New deployment → Web app → Execute as “Me”, access “Anyone”. Paste the /exec URL above.