Step 2 — Run this SQL (creates all tables)
In your Supabase project → SQL Editor → New Query → paste this → Run:
create table if not exists orders (id bigserial primary key, commodity text, status text default 'Open', customer text, destination text, ship_date date, del_date date, appt text, warehouse text, pt_num text, po_num text, carrier text, load_id integer, input_freight numeric default 0, misc numeric default 0, rate numeric default 0, total numeric default 0, case_cost numeric default 0, notes text, bol text, pf_po text, pod boolean default false, archived boolean default false, appt_confirmed boolean default false, appt_conf_num text, sent_at timestamptz, audit jsonb default '[]', rpc_g int default 0, lbs25_g int default 0, lbs25_r int default 0, minis int default 0, pepper_r int default 0, pepper_y int default 0, pepper_o int default 0, ryo_3ct int default 0, ryo_6ct int default 0, lbs11_org int default 0, lbs11_cv int default 0, asp_bags int default 0, lbs28 int default 0, costco int default 0, minis_x int default 0, g_rpc int default 0, lbs25_g_x int default 0, lbs25_r_x int default 0, tjs int default 0, hh int default 0, lbs11_cv_x int default 0, lbs11_org_x int default 0, lbs28_x int default 0, bags_1lb int default 0, corn int default 0, created_at timestamptz default now(), updated_at timestamptz default now());
create table if not exists app_users (id bigserial primary key, name text unique not null, password text not null, role text not null, display text, carrier_name text default '', created_at timestamptz default now());
create table if not exists carriers (id bigserial primary key, name text, email text, cc text);
create table if not exists warehouses (id bigserial primary key, code text, name text, address text, city text, state text, hours text, instructions text);
create table if not exists destinations (id bigserial primary key, name text, address text);
create table if not exists rates (id bigserial primary key, carrier text, warehouse text, destination text, ltl numeric default 0, ftl numeric default 0, extra_drop numeric default 0);
create table if not exists claims (id bigserial primary key, carrier text, load_id integer, pt_num text, amount numeric default 0, filed_date date, status text default 'Open', description text, notes text, paid_date date, paid_amount numeric, created_at timestamptz default now());
create table if not exists messages (id bigserial primary key, load_id integer, commodity text, carrier text, msg_text text, msg_type text default 'general', from_user text, from_role text, to_role text, read boolean default false, ts timestamptz default now());
create table if not exists dispatch_log (id bigserial primary key, ts timestamptz default now(), dispatcher text, carrier text, load_id integer, commodity text, orders_count integer, subject_base text, result text, is_update boolean default false);
create table if not exists app_settings (key text primary key, value text);
alter table orders disable row level security;
alter table app_users disable row level security;
alter table carriers disable row level security;
alter table warehouses disable row level security;
alter table destinations disable row level security;
alter table rates disable row level security;
alter table claims disable row level security;
alter table messages disable row level security;
alter table dispatch_log disable row level security;
alter table app_settings disable row level security;
After setup: everyone opens the same URL and sees the same live data. Changes by anyone appear for everyone instantly.