Skip to content

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-docs for 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

Built with VitePress