VendeeDocs
Arquitetura

Packages

Pacotes compartilhados do monorepo

@repo/supabase

Pacote compartilhado que exporta o client Supabase e os tipos gerados do banco de dados.

Exports

package.json
{
  "exports": {
    ".": "./src/index.ts",
    "./client": "./src/client.ts",
    "./types": "./src/types.ts"
  }
}

Uso

// Client tipado
import { supabase } from "@repo/supabase/client";

// Tipos do banco
import type { Database } from "@repo/supabase/types";
type Deal = Database["public"]["Tables"]["deals"]["Row"];

Env vars

O client detecta automaticamente o ambiente:

  • Vite: VITE_SUPABASE_URL + VITE_SUPABASE_PUBLISHABLE_KEY (legado VITE_SUPABASE_PUBLISHABLE_DEFAULT_KEY)
  • Next.js: NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY (legado NEXT_PUBLIC_SUPABASE_ANON_KEY)

Regenerar tipos

Após alterar o schema do banco, regenere os tipos:

bunx supabase gen types typescript --project-id <id> > packages/supabase/src/types.ts

@repo/eslint-config

ESLint flat config com quatro presets:

  • base — Regras base para todos os pacotes
  • next-js — Para apps Next.js (docs)
  • react-internal — Para pacotes React internos
  • vite — Para apps Vite (app)

Todos os scripts de lint usam --max-warnings 0.

@repo/typescript-config

Configurações TypeScript base:

  • base.json — Config base com strict mode
  • nextjs.json — Para apps Next.js
  • react-library.json — Para pacotes React
  • vite.json — Para apps Vite

TypeScript 5.9 com strict: true e noUncheckedIndexedAccess: true.

@repo/shared

Código de domínio compartilhado entre o CRM (apps/app) e o motor de IA (apps/runtime) — os dois consomem o mesmo pacote para não divergirem em regra de negócio.

ExportO que é
@repo/shared/finance-engineos cálculos financeiros (valores, recorrência, totais)
@repo/shared/ai-policya política de uso de IA: teto de gasto, limites por plano

Regra de ouro: se uma regra precisa valer igual no CRM e no runtime, ela mora aqui — copiar nos dois lados é como as duas pontas divergem em silêncio.

Nesta página