Agent Skill
2/7/2026multitenant-development
Specialized skill for working with the multitenant system including tenant detection, data isolation, tenant-specific configuration, and RLS policies. Use when implementing multitenant features, creating APIs that handle multiple tenants, configuring tenant assets, or debugging data isolation issues.
S
santiagoxor
0GitHub Stars
1Views
npx skills add SantiagoXOR/pintureria-digital
SKILL.md
| Name | multitenant-development |
| Description | Specialized skill for working with the multitenant system including tenant detection, data isolation, tenant-specific configuration, and RLS policies. Use when implementing multitenant features, creating APIs that handle multiple tenants, configuring tenant assets, or debugging data isolation issues. |
name: multitenant-development description: Specialized skill for working with the multitenant system including tenant detection, data isolation, tenant-specific configuration, and RLS policies. Use when implementing multitenant features, creating APIs that handle multiple tenants, configuring tenant assets, or debugging data isolation issues.
Multitenant Development
Quick Start
When working with multitenant features:
- Always verify tenant with
getTenantFromRequest()in APIs and middleware - Never make queries without filtering by
tenant_id - Ensure RLS policies include tenant verification
- Configure tenant-specific assets in
public/tenants/{tenant_slug}/ - Usar
getTenantAssetPath(tenant, assetPath, fallback)para URLs de assets (incluye cache busting?v=por deploy)
Key Files
src/lib/tenant/tenant-service.ts- Main tenant servicesrc/lib/tenant/tenant-assets.ts- URLs de assets con cache busting (Supabase o local)src/middleware.ts- Tenant detectionsrc/components/TenantThemeStyles.tsx- Tenant stylessupabase/migrations/*- RLS migrationsoptimize-pintemas-assets-upload.js- Subir assets de tenants al buckettenant-assets
Common Patterns
API with Tenant Isolation
import { getTenantFromRequest } from '@/lib/tenant/tenant-service';
import { createClient } from '@/lib/supabase/server';
export async function GET(request: NextRequest) {
const tenant = await getTenantFromRequest(request);
if (!tenant) {
return NextResponse.json({ error: 'Tenant not found' }, { status: 404 });
}
const supabase = createClient();
const { data, error } = await supabase
.from('products')
.select('*')
.eq('tenant_id', tenant.id);
if (error) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
return NextResponse.json(data);
}
RLS Policy
CREATE POLICY "tenant_isolation_products" ON products
FOR ALL
USING (
tenant_id = (
SELECT id FROM tenants
WHERE slug = current_setting('app.tenant_slug', true)
)
);
Tenant Assets
Usar getTenantAssetPath() para que las URLs lleven cache busting y se actualicen tras cada deploy:
import { getTenantAssetPath } from '@/lib/tenant/tenant-assets';
const tenant = useTenant();
const logoPath = getTenantAssetPath(tenant, 'logo.svg', '/images/logo/logo.svg');
const primaryColor = tenant.primary_color || '#ea5a17';
- Assets en Supabase: bucket
tenant-assets, rutatenants/{slug}/.... Subir connode optimize-pintemas-assets-upload.js. - Tras cambiar assets: hacer deploy y purgar caché CDN (
npm run cache:purgeo Vercel → Settings → Caches) para que se vean pronto en todos los dispositivos. Verdocs/CACHE_PURGE_ANTES_DEPLOY.md.
Checklist
- Verify tenant in each request
- Include
tenant_idin all queries - Verify RLS policies are active
- Test with multiple tenants
- Verify data isolation
- Configure tenant assets if needed
Skills Info
Original Name:multitenant-developmentAuthor:santiagoxor
Download