πŸ’Ύ Local mode
Configure Supabase Cloud Storage
Get your free Supabase project at supabase.com. After creating a project, find your URL and anon key under Project Settings β†’ API.
Required Supabase SQL β€” run this in your SQL Editor:
-- ═══════════════════════════════════════════════════════
-- Paul Willemse Attorneys Inc. β€” Supabase Database Setup
-- Copy and run this in: Supabase β†’ SQL Editor β†’ New Query
-- ═══════════════════════════════════════════════════════

-- 1. Enable UUID extension (may already be enabled)
create extension if not exists "uuid-ossp";

-- 2. Create the single app_data table
--    All practice data is stored as key-value pairs per user
create table if not exists public.app_data (
  id          uuid primary key default uuid_generate_v4(),
  user_id     uuid not null references auth.users(id) on delete cascade,
  key         text not null,
  data        text not null default '[]',
  updated_at  timestamptz not null default now(),
  constraint  app_data_user_key_unique unique (user_id, key)
);

-- 3. Enable Row Level Security (RLS)
--    Each user can ONLY access their own data
alter table public.app_data enable row level security;

-- 4. Drop existing policies if re-running (safe to ignore errors)
drop policy if exists "Users can read own data"   on public.app_data;
drop policy if exists "Users can insert own data" on public.app_data;
drop policy if exists "Users can update own data" on public.app_data;
drop policy if exists "Users can delete own data" on public.app_data;

-- 5. Create RLS policies
create policy "Users can read own data"
  on public.app_data for select
  using (auth.uid() = user_id);

create policy "Users can insert own data"
  on public.app_data for insert
  with check (auth.uid() = user_id);

create policy "Users can update own data"
  on public.app_data for update
  using (auth.uid() = user_id)
  with check (auth.uid() = user_id);

create policy "Users can delete own data"
  on public.app_data for delete
  using (auth.uid() = user_id);

-- 6. Performance index
create index if not exists idx_app_data_user_key
  on public.app_data (user_id, key);

-- 7. Auto-update updated_at timestamp on changes
create or replace function public.set_updated_at()
returns trigger language plpgsql as $$
begin new.updated_at = now(); return new; end;
$$;

drop trigger if exists trg_app_data_updated_at on public.app_data;
create trigger trg_app_data_updated_at
  before update on public.app_data
  for each row execute function public.set_updated_at();

-- ═══════════════════════════════════════════════════════
-- DONE! Your Paul Willemse Attorneys Inc. database is ready.
-- Next: Go to Project Settings β†’ API and copy your
--       Project URL and anon/public key into the app.
-- ═══════════════════════════════════════════════════════
Dashboard
3 urgent/high-priority tasks require attention. View Tasks β†’
Active Matters
4
4 total matters
Clients
26
Registered clients
Outstanding (ZAR)
R 12k
1 overdue invoice
WIP Unbilled
R 0
Ready to invoice
New Matter
New Client
Log Time
New Invoice
Add Court Date
Recent Matters
MatterClientTypeStatusAttorney
M2026-001
Ndlovu Holdings v Rand Water Board - Breach of Contract
Ndlovu HoldingsCommercial LitigActiveAdv. Paul
M2026-002
Estate Late Dr. T. Patel - Administration
Dr. Fatima PatelEstateActiveAdv. Paul
M2026-003
Van der Merwe v Van der Merwe - Divorce
Johan van der MerweFamily LawActiveAdv. Paul
M2026-004
Khumalo v Pick n Pay Stores Ltd - Unfair Dismissal
Thabo KhumaloLabourActiveAdv. Paul
Pending Tasks (3)
Draft heads of argument - Ndlovu motion
M2026-001 Β· Due: 2026-06-21
Urgent
Prepare CCMA bundle for Khumalo conciliation
M2026-004 Β· Due: 2026-06-26
High
Send overdue invoice reminder - Dr. Patel
M2026-002 Β· Due: 2026-06-18
High
Outstanding Invoices
INV-2026-002
Dr. Fatima Patel
R 12,075
Overdue
Upcoming Court Dates
23
Jun
Ndlovu Holdings v Rand Water - Motion Proceedings
Gauteng High Court Β· 09:00
High
30
Jun
Khumalo v Pick n Pay - CCMA Conciliation
CCMA Johannesburg Β· 10:30
Normal
7
Jul
Van der Merwe - Opposed Motion
Gauteng High Court Β· 09:00
High
Trust Account Summary
Current Balance
R 0.00
Record in Accounts β†’
Time entries logged4
Invoices issued2
Invoices paid1

Are you sure?

This action cannot be undone.

New Matter
New Client
Assigned on save β€” format depends on client type
South African ID β€” 13 digit number
Log Time Entry
New Invoice
Date
Description
Qty/Hrs
Rate (R)
Amount (R)
SubtotalR 0.00
Total DueR 0.00
Add Court Date
New Task
Add Document Record
Enter document details. For actual files, save them to your PC folder and record the path here.