Frontend + backend. Un proyecto.
Tu aplicación.
Todo encaja.
Publica tu frontend estático junto a PostgreSQL, Auth, Storage y Edge Functions. Con los servicios open source de Supabase y una consola común.
Piloto privado. No abierto al público, sin precios ni SLA; backups aún en desarrollo.
La plataforma
Una base para construir.
Frontend y backend en el mismo proyecto
Sube tu build estático en un ZIP. Se sirve junto a PostgreSQL, Auth, Storage y Edge Functions del proyecto, con rollback de versión que no toca la base de datos.
Disponible en el piloto02Funciona con @supabase/supabase-js v2
Cada proyecto ejecuta los servicios open source de Supabase: tablas, RPC, Row Level Security, Auth con correo, buckets de Storage y Postgres Changes.
Disponible en el piloto03MCP acotado a un proyecto
Los agentes de programación usan 13 herramientas con tokens de un solo proyecto que vencen en 24 horas o 7 días, y un operation_id en cada escritura.
Disponible en el piloto04Despliegues desde Git
Conectar un repositorio de GitHub y publicar cada push está en desarrollo. Hoy el frontend se publica subiendo un ZIP.
En desarrollo05Backups fuera del host
Hoy el piloto no tiene backups. Los backups diarios cifrados con simulacro de restauración están en desarrollo; no guardes datos que no puedas perder.
En desarrollo06Frente a Supabase y Vercel
Qué es equivalente, qué no lo es y cómo mover una aplicación entre las tres plataformas, sin promesas de paridad.
ComparaciónCódigo que ya conoces
Tu frontend. Tus datos.
Usa supabase-js v2 con los servicios de tu proyecto. Revisa qué está probado y qué sigue en desarrollo antes de mover una aplicación.
Revisar compatibilidad →import { createClient } from '@supabase/supabase-js'
const reply = await fetch('./__simplybase/config.json', {
credentials: 'omit', cache: 'no-store', redirect: 'error'
})
if (!reply.ok) throw new Error('Project connection unavailable')
const config = await reply.json()
const supabase = createClient(config.api_url, config.publishable_key, {
auth: { persistSession: false, detectSessionInUrl: false },
global: { fetch: (input, init) =>
fetch(input, { ...init, credentials: 'omit' }) }
})
const { data, error } = await supabase
.from('notes').select('*').order('created_at')Ejemplo para Sites con origen opaco. La sesión vive en memoria; RLS gobierna el acceso a las filas.
Juntos, con límites claros