-- ===================================================== -- Supabase Database Schema for Data Science Agent Analytics -- ===================================================== -- Run this in your Supabase SQL Editor: https://app.supabase.com/project/_/sql -- 1. Usage Analytics Table -- Tracks individual queries/requests made by users CREATE TABLE IF NOT EXISTS usage_analytics ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, user_id TEXT NOT NULL, user_email TEXT, session_id TEXT NOT NULL, query TEXT NOT NULL, agent_used TEXT, tools_executed TEXT[], tokens_used INTEGER, duration_ms INTEGER, success BOOLEAN DEFAULT true, error_message TEXT, created_at TIMESTAMPTZ DEFAULT NOW() ); -- 2. User Sessions Table -- Tracks user sessions for engagement metrics CREATE TABLE IF NOT EXISTS user_sessions ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, user_id TEXT NOT NULL, user_email TEXT, started_at TIMESTAMPTZ DEFAULT NOW(), ended_at TIMESTAMPTZ, queries_count INTEGER DEFAULT 0, browser_info TEXT ); -- 3. Indexes for performance CREATE INDEX IF NOT EXISTS idx_usage_analytics_user_id ON usage_analytics(user_id); CREATE INDEX IF NOT EXISTS idx_usage_analytics_created_at ON usage_analytics(created_at); CREATE INDEX IF NOT EXISTS idx_usage_analytics_session_id ON usage_analytics(session_id); CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id); CREATE INDEX IF NOT EXISTS idx_user_sessions_started_at ON user_sessions(started_at); -- 4. Function to increment session query count atomically CREATE OR REPLACE FUNCTION increment_session_queries(session_id UUID) RETURNS VOID AS $$ BEGIN UPDATE user_sessions SET queries_count = queries_count + 1 WHERE id = session_id; END; $$ LANGUAGE plpgsql; -- 5. Enable Row Level Security (RLS) ALTER TABLE usage_analytics ENABLE ROW LEVEL SECURITY; ALTER TABLE user_sessions ENABLE ROW LEVEL SECURITY; -- 6. RLS Policies - Allow authenticated users to insert their own data -- Policy for usage_analytics CREATE POLICY "Users can insert their own analytics" ON usage_analytics FOR INSERT WITH CHECK (true); CREATE POLICY "Users can view their own analytics" ON usage_analytics FOR SELECT USING (auth.uid()::text = user_id OR user_id = 'anonymous'); -- Policy for user_sessions CREATE POLICY "Users can insert their own sessions" ON user_sessions FOR INSERT WITH CHECK (true); CREATE POLICY "Users can update their own sessions" ON user_sessions FOR UPDATE USING (auth.uid()::text = user_id OR user_id = 'anonymous'); CREATE POLICY "Users can view their own sessions" ON user_sessions FOR SELECT USING (auth.uid()::text = user_id OR user_id = 'anonymous'); -- 7. Helpful Views for Analytics Dashboard -- Daily active users CREATE OR REPLACE VIEW daily_active_users AS SELECT DATE(created_at) as date, COUNT(DISTINCT user_id) as unique_users, COUNT(*) as total_queries FROM usage_analytics GROUP BY DATE(created_at) ORDER BY date DESC; -- Popular queries CREATE OR REPLACE VIEW popular_queries AS SELECT query, COUNT(*) as count, COUNT(DISTINCT user_id) as unique_users FROM usage_analytics WHERE created_at > NOW() - INTERVAL '7 days' GROUP BY query ORDER BY count DESC LIMIT 50; -- Agent usage stats CREATE OR REPLACE VIEW agent_usage_stats AS SELECT agent_used, COUNT(*) as total_uses, AVG(duration_ms) as avg_duration_ms, SUM(CASE WHEN success THEN 1 ELSE 0 END)::float / COUNT(*) * 100 as success_rate FROM usage_analytics WHERE agent_used IS NOT NULL GROUP BY agent_used ORDER BY total_uses DESC; -- ===================================================== -- SETUP INSTRUCTIONS: -- ===================================================== -- 1. Go to https://app.supabase.com/ and create a new project -- 2. Go to Settings > API to get your Project URL and anon key -- 3. Create a .env file in FRRONTEEEND/ with: -- VITE_SUPABASE_URL=your_project_url -- VITE_SUPABASE_ANON_KEY=your_anon_key -- 4. Go to Authentication > Providers and enable: -- - Email (enabled by default) -- - Google (optional - need OAuth credentials) -- - GitHub (optional - need OAuth app) -- 5. Run this SQL in the SQL Editor -- 6. Done! Your analytics will start tracking automatically -- =====================================================