# Deploy e produção (/docs/deploy)



O projeto roda na **Vercel** (deploy automático a cada push na branch de
produção). O banco e o storage são o projeto **Supabase** de produção.

## 1. Vercel [#1-vercel]

* Importe o repositório na Vercel (framework detectado: Next.js).
* Configure as variáveis de ambiente (seção 3) em **Production** (e Preview, se
  quiser previews funcionais).
* Domínio próprio: aponte `atleticacovildomineiro.com.br` para a Vercel e
  defina `NEXT_PUBLIC_SITE_URL=https://atleticacovildomineiro.com.br`.

## 2. Migrations em produção [#2-migrations-em-produção]

Aplique no **SQL Editor** do Supabase de produção as migrations de
`supabase/migrations/` que ainda **não** foram aplicadas, em ordem cronológica
(lista em [`banco-de-dados.md`](banco-de-dados.md)).

> ⚠️ **Verifique especialmente** se estas já estão aplicadas (são recentes e/ou
> críticas):
>
> * `20260807120000_security_hardening.sql` — &#x2A;*segurança (crítica)**.
> * `20260803120000_loyalty_pepitas.sql` — programa de pepitas.
> * `20260804120000_membership_card.sql`, `20260805120000_member_photo.sql`,
>   `20260805130000_member_photo_storage.sql` — carteirinha e foto.
> * `20260810120000_page_banners.sql` — banners por página.
>
> Como conferir rápido: procure a tabela/coluna/função da migration no schema
> (ex.: existe `loyalty_transactions`? existe `can_admin_section`?). Se não
> existir, aplique.

Ao aplicar uma migration que muda o schema, garanta que `src/types/supabase.ts`
reflete o estado novo.

## 3. Segredos e variáveis (produção) [#3-segredos-e-variáveis-produção]

Todas as variáveis de [`setup.md`](setup.md), com os **valores de produção**.
Pontos de atenção:

* `SICOOB_ENV` — defina `production` (o padrão é `sandbox`).
* `SICOOB_CLIENT_ID` — client\_id da aplicação no portal developers.sicoob.com.br.
* `SICOOB_PIX_KEY` — chave PIX da conta recebedora (é nela que as cobranças caem).
* `SICOOB_CERT_PFX_BASE64` — certificado ICP-Brasil A1 (`.pfx` em base64) para o
  mTLS. **Obrigatório em produção** (o sandbox não usa certificado).
* `SICOOB_CERT_PASSWORD` — senha do `.pfx`. **Só produção**.
* `SUPABASE_SERVICE_ROLE_KEY` — a chave de produção.
* `CARD_SIGNING_SECRET` — defina um segredo forte e **estável** (mudá-lo
  invalida os códigos de autenticidade das carteirinhas já emitidas).
* `GMAIL_USER` / `GMAIL_APP_PASSWORD` — conta e senha de app para os e-mails.

## 4. Sicoob (PIX + webhook) [#4-sicoob-pix--webhook]

1. Em produção, gere o &#x2A;*certificado ICP-Brasil A1 (`.pfx`)**, converta para
   base64 e configure `SICOOB_CERT_PFX_BASE64` + `SICOOB_CERT_PASSWORD` (sem eles
   o mTLS não sobe). Defina também `SICOOB_ENV=production`, `SICOOB_CLIENT_ID` e
   `SICOOB_PIX_KEY`.
2. Cadastre o webhook via **API do Sicoob** (`PUT /webhook/{chave}`) apontando
   para `https://atleticacovildomineiro.com.br/api/sicoob/webhook` (o Sicoob
   concatena `/pix` ao notificar). Não há "webhook secret": a confirmação é
   garantida pela &#x2A;*reconsulta da cobrança por `txid`** na API.
3. Faça uma cobrança PIX de teste e confirme no `/admin/financeiro` que o pedido
   mudou de status.

## 5. Supabase Auth [#5-supabase-auth]

* Configure **Site URL** e **Redirect URLs** com o domínio de produção (para o
  callback OAuth `/auth/callback` e o fluxo de recuperação de senha funcionarem).
* Se usar Google OAuth, configure o provedor e as credenciais.
* Decida a política de confirmação de e-mail conforme o fluxo desejado.

## 6. SEO [#6-seo]

* Com `NEXT_PUBLIC_SITE_URL` correto, `sitemap.ts`/`robots.ts` e as metatags
  saem com o domínio certo. Cadastre o site no Google Search Console.
* Ative o Analytics definindo `NEXT_PUBLIC_GA_ID`.

## Checklist de go-live [#checklist-de-go-live]

* [ ] Domínio apontado e `NEXT_PUBLIC_SITE_URL` = domínio de produção.
* [ ] Migrations pendentes aplicadas (em especial a de **segurança**).
* [ ] Todos os segredos configurados na Vercel (produção).
* [ ] Sicoob configurado (`SICOOB_ENV=production`, certificado A1, `SICOOB_*`) e
  webhook cadastrado via API + testado.
* [ ] Auth (Site URL, redirects, provedores) configurada.
* [ ] `npm run build` passa; `typecheck` e `test` verdes.
* [ ] Pelo menos um `super_admin` promovido no banco de produção.
