fayzfayz sdk

05 · Dados reais com Supabase

Até aqui o app rodou em modo mock, com dados de exemplo em memória. Agora você segue o modelo BYOS — traga o seu próprio Supabase: conecta um projeto Supabase seu, provisiona nele a mesma forma de schema que a plataforma usa (a biblioteca core + os módulos de plugin + os seus incubator) com fayz db apply, e vira a chave para dados reais e persistentes.

Crie o seu projeto Supabase (BYOS)

No dashboard do Supabase, crie um projeto novo (o plano gratuito basta). Ele é o seu banco — o fayz db apply só escreve a forma-alvo nele. Você vai precisar de quatro valores dele:

  • Project URL e anon key — em Project Settings → API. Ficam no navegador (públicos).
  • Project ref — em Project Settings → General. É o identificador do projeto.
  • Personal access token (PAT) — em Account → Access Tokens. É um segredo de máquina; nunca vai para o navegador nem para o Git.
Preencha o .env.local

O scaffold traz um .env.example. Copie para .env.local (que já está no .gitignore) e preencha:

cp .env.example .env.local
# Runtime (vão para o navegador — só valores públicos)
VITE_SUPABASE_URL=https://SEU-REF.supabase.co
VITE_SUPABASE_ANON_KEY=sua-anon-key

# Tooling (usados pelo `fayz db apply` — NÃO vão para o navegador)
SUPABASE_PROJECT_REF=seu-project-ref
SUPABASE_PAT=seu-personal-access-token
Planeje a migração (dry-run)

Antes de tocar no banco, veja o plano. O --dry-run não faz nenhuma chamada de rede e não lê o seu PAT — é seguro rodar sempre:

npx @fayz-ai/cli db apply --dry-run

Saída real em um app recém-criado:

▸ Migration plan for minha-loja

   1. [spine    ] @fayz-ai/db  — no files

  Notes:
    ⚠ installed @fayz-ai/db ships no migrations/ — the spine step is empty (upgrade to @fayz-ai/db >= 0.1.3 once published)
    ⚠ plugin 'dashboard': @fayz-ai/plugin-dashboard ships no src/migrations — skipped

  Summary: 1 step(s), 0 sql file(s). (dry-run — nothing was applied)

A ordem do plano é sempre a mesma: o core primeiro, depois as migrations versionadas de cada plugin, e por fim os seus incubator. Na saída do CLI atual isso aparece com os rótulos spine → drizzle → seed → plugins → incubator (os três primeiros são o core — o rótulo migra para core na wave de industry pools). Cada passo só entra se o pacote correspondente trouxer arquivos SQL. Com as versões atuais dos pacotes o plano ainda é enxuto; conforme os plugins passam a trazer migrations, novos passos aparecem aqui.

Aplique de verdade

Quando o plano estiver como você quer, aplique. Este é o comando que roda com as suas credenciais (o SUPABASE_PROJECT_REF e o SUPABASE_PAT do .env.local) e escreve no banco via Supabase Management API:

npx @fayz-ai/cli db apply

Ele pede confirmação antes de aplicar (use --yes para pular o prompt em CI). Sem as duas variáveis definidas, ele para com um erro claro — de propósito, para nunca aplicar contra o projeto errado.

Vire a chave para o Supabase

Com o esquema no lugar, troque o backend no app.manifest.json de mock para supabase e informe o ref:

{
  "backend": {
    "provider": "supabase",
    "projectRef": "seu-project-ref"
  }
}

E valide tudo com o doctor:

npx @fayz-ai/cli doctor

✓ Você deve ver: no dry-run, a linha Summary: N step(s) ... (dry-run — nothing was applied). Depois do db apply real, a confirmação de que a migração foi aplicada. E o doctor com 0 error(s) após virar o provider para supabase.

O modelo de dados tem três camadas — a biblioteca core (as tabelas-base compartilhadas), as tabelas plg_ que cada plugin instala, e as tabelas do seu app — todas isoladas por tenant_id com RLS. Você não precisa dominar isso agora; o fayz db apply monta a ordem correta no seu próprio Supabase. Para o mapa completo, veja Modelo de dados e RLS e multi-tenant.


← Anterior: 04 · Adicionar um plugin · Próximo: 06 · Seu próprio plugin →