Storage
PIP AI uses a single Supabase Storage bucket for all file uploads.
Bucket Configuration
| Setting | Value |
|---|---|
| Name | pip-ai-docs |
| Visibility | Private |
| Max File Size | 100MB |
Folder Structure
pip-ai-docs/
├── specs/{brand_name}/{spec_upload_id}/{filename}
├── pips/{project_id}/{document_id}/{filename}
├── floor-plans/{project_id}/{floor_plan_id}/{filename}
├── floor-plans/{project_id}/{floor_plan_id}/rendered.png
├── floor-plans/{project_id}/{floor_plan_id}/thumbnail.png
├── document-builder/{project_id}/{filename}
└── ai-renders/{project_id}/{job_id}/{variant_id}.pngAllowed MIME Types
application/pdfimage/pngimage/jpegimage/jpgimage/svg+xmlapplication/octet-stream
Storage Policies
| Action | Admin | User (own project) |
|---|---|---|
| View specs | Yes | No |
| Upload specs | Yes | No |
| View project files | Yes | Yes |
| Upload to project | Yes | Yes |
| AI render output | Yes (via service role) | Read only |
Accessing Files
Always use signed URLs for file access:
typescript
const { data } = await supabase.storage
.from('pip-ai-docs')
.createSignedUrl(storagePath, 3600) // 1 hour expiryWARNING
Never expose raw storage paths to clients. Always generate signed URLs server-side or via the Supabase client.