You need to connect Hustlix Portal to your Supabase project. Follow these steps:
1
Go to supabase.com → create a new project → name it hustlix-portal
2
In your project → click SQL Editor → paste and run the SQL schema below to create all tables automatically
3
Go to Project Settings → API → copy your Project URL and anon public key → paste them below
4
Go to Authentication → Users → create your first admin user with email admin@hustlix.com and any password
📋 Click to copy SQL schema (run this in Supabase SQL Editor)
-- Run this in Supabase SQL Editor
-- Profiles table (extends auth.users)
CREATE TABLE profiles (
id UUID REFERENCES auth.users(id) PRIMARY KEY,
full_name TEXT NOT NULL,
role TEXT NOT NULL CHECK (role IN ('admin', 'client', 'employee')),
email TEXT NOT NULL,
position TEXT,
avatar_initials TEXT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Client-Employee assignments
CREATE TABLE assignments (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
client_id UUID REFERENCES profiles(id) ON DELETE CASCADE,
employee_id UUID REFERENCES profiles(id) ON DELETE CASCADE,
assigned_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(client_id, employee_id)
);
-- Daily time logs
CREATE TABLE time_logs (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
employee_id UUID REFERENCES profiles(id) ON DELETE CASCADE,
clock_in TIMESTAMPTZ,
clock_out TIMESTAMPTZ,
log_date DATE DEFAULT CURRENT_DATE,
total_hours NUMERIC(4,2),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Daily tasks
CREATE TABLE tasks (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
employee_id UUID REFERENCES profiles(id) ON DELETE CASCADE,
title TEXT NOT NULL,
description TEXT,
status TEXT DEFAULT 'todo' CHECK (status IN ('todo','inprogress','done')),
priority TEXT DEFAULT 'normal' CHECK (priority IN ('low','normal','high')),
task_date DATE DEFAULT CURRENT_DATE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Row Level Security
ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;
ALTER TABLE assignments ENABLE ROW LEVEL SECURITY;
ALTER TABLE time_logs ENABLE ROW LEVEL SECURITY;
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
-- Policies: admin sees everything
CREATE POLICY "Admin full access profiles" ON profiles FOR ALL USING (
(SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
);
CREATE POLICY "Admin full access assignments" ON assignments FOR ALL USING (
(SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
);
CREATE POLICY "Admin full access time_logs" ON time_logs FOR ALL USING (
(SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
);
CREATE POLICY "Admin full access tasks" ON tasks FOR ALL USING (
(SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
);
-- Employee sees own data
CREATE POLICY "Employee own profile" ON profiles FOR SELECT USING (id = auth.uid());
CREATE POLICY "Employee own timelogs" ON time_logs FOR ALL USING (employee_id = auth.uid());
CREATE POLICY "Employee own tasks" ON tasks FOR ALL USING (employee_id = auth.uid());
CREATE POLICY "Employee own assignments" ON assignments FOR SELECT USING (employee_id = auth.uid());
-- Client sees assigned employees data
CREATE POLICY "Client assigned employees tasks" ON tasks FOR SELECT USING (
employee_id IN (
SELECT employee_id FROM assignments WHERE client_id = auth.uid()
)
);
CREATE POLICY "Client assigned employees timelogs" ON time_logs FOR SELECT USING (
employee_id IN (
SELECT employee_id FROM assignments WHERE client_id = auth.uid()
)
);
CREATE POLICY "Client own profile" ON profiles FOR SELECT USING (id = auth.uid());
CREATE POLICY "Client assignments" ON assignments FOR SELECT USING (client_id = auth.uid());
CREATE POLICY "Client employee profiles" ON profiles FOR SELECT USING (
id IN (SELECT employee_id FROM assignments WHERE client_id = auth.uid())
);
Hustlix
Team Portal — Sign in to your account
Welcome back 👋
Enter your email and we'll send you a password reset link.