Supabase Backend
Quality Hub GINEZ uses Supabase as a complete Backend-as-a-Service (BaaS) platform, providing PostgreSQL database, authentication, real-time subscriptions, and more.Supabase Architecture
Client Configuration
The Supabase client is configured inlib/supabase.ts:
Environment Variables
Required environment variables in.env.local:
Client Features
- Automatic token refresh: Tokens refreshed before expiration
- Session persistence: Sessions survive browser restarts
- PKCE flow: Protection against CSRF attacks
- Type safety: Full TypeScript support
Database (PostgreSQL)
Tables
1. bitacora_produccion (Production Log)
Main table for production batch records:
2. profiles (User Profiles)
Extends Supabase Auth users:
Indexes
Optimize query performance:Database Functions
Custom PostgreSQL functions for complex queries:Authentication (Supabase Auth)
Email + Password Authentication
Supabase Auth handles:- User registration
- Email verification
- Password hashing (bcrypt)
- JWT token generation
- Session management
Sign Up
Sign In
Sign Out
Get Current Session
Listen for Auth Changes
JWT Tokens
Supabase issues JWT tokens with user metadata:- Automatically included in Supabase client requests
- Accessible via
auth.uid()in RLS policies - Auto-refreshed before expiration
Database Queries
Select (Read)
Insert (Create)
Update
Delete
Complex Queries
Real-time Subscriptions
Subscribe to Table Changes
Subscribe to Specific Filters
Error Handling
Performance Optimization
1. Use Specific Selects
2. Use Pagination
3. Use Indexes
Ensure frequently queried columns have indexes.4. Use RPC for Complex Logic
Move heavy computations to the database:Security Best Practices
1. Never Expose Service Role Key
The service role key bypasses RLS. Never expose it to the client.2. Always Use RLS Policies
Enable RLS on all tables and define appropriate policies.3. Validate on Client AND Server
Client validation for UX, server validation (via RLS and constraints) for security.4. Use Environment Variables
Never hardcode credentials. Use.env.local and keep it gitignored.
