-- Create a table for public profiles create table if not exists public.users ( id uuid references auth.users on delete cascade not null primary key, email text, full_name text, avatar_url text, credits integer default 5, created_at timestamp with time zone default timezone('utc'::text, now()) not null ); -- Set up Row Level Security (RLS) alter table public.users enable row level security; create policy "Public profiles are viewable by everyone." on public.users for select using (true); create policy "Users can insert their own profile." on public.users for insert with check (auth.uid() = id); create policy "Users can update own profile." on public.users for update using (auth.uid() = id); -- Create a function to handle new user signup create or replace function public.handle_new_user() returns trigger as $$ begin insert into public.users (id, email, full_name, avatar_url, credits) values ( new.id, new.email, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url', 5 -- Default credits ); return new; end; $$ language plpgsql security definer; -- Create a trigger to call the function on new user creation create or replace trigger on_auth_user_created after insert on auth.users for each row execute procedure public.handle_new_user();