Supabase Integration
Supabase is the primary backend service for PIP AI, providing database, auth, storage, and realtime capabilities.
Client Setup
PIP AI uses the @nuxtjs/supabase module for client-side integration:
typescript
// nuxt.config.ts
modules: ['@nuxtjs/supabase']Client Usage
typescript
// In composables/components (auto-imported)
const supabase = useSupabaseClient<Database>()
const user = useSupabaseUser()Server Usage
typescript
// In server routes
const client = await serverSupabaseServiceRole(event)
const user = await serverSupabaseUser(event)Features Used
Authentication
- Email/password authentication
- JWT custom claims hook for role injection
- Session management via Nuxt Supabase module
- Auto-redirect for unauthenticated users
Database
- PostgreSQL with pgvector extension
- Row Level Security for access control
- Database functions (RPCs) for complex queries
- Generated TypeScript types (
app/types/database.types.ts)
Storage
- Private bucket
pip-ai-docsfor all file uploads - Signed URLs for secure file access
- Storage policies aligned with RLS
Realtime
Supabase Realtime is used for live UI updates:
typescript
const channel = supabase.channel('processing-status')
.on('postgres_changes', {
event: 'UPDATE',
schema: 'public',
table: 'pip_ai_documents',
filter: `id=eq.${documentId}`
}, payload => {
// Update UI with new processing status
})
.subscribe()Used for:
- Document processing status updates
- Real-time match status changes
- AI job completion notifications
Configuration
The Supabase module is configured in nuxt.config.ts:
typescript
supabase: {
redirect: process.env.NUXT_PUBLIC_DEV_AUTH_BYPASS !== 'true',
redirectOptions: {
login: '/auth/login',
callback: '/auth/callback',
exclude: ['/', '/auth/*']
}
}Environment Variables
ini
NUXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NUXT_PUBLIC_SUPABASE_KEY=eyJ...anon-key
SUPABASE_SERVICE_KEY=eyJ...service-role-key