teqo/.env.example
Francisco Solla 70070db8dc feat(C114): agenda da campanha espelhada no Google Calendar com notificação (push Teqo → Google)
Espelho oficial da agenda em calendário Google compartilhado via API
(service account, jose + fetch): reconciliação por passada com id
determinístico teqo+base32hex (upsert idempotente, sem estado por evento),
hooks afterChange/afterDelete na activity (só campos espelhados, nunca
lança), auto-resync quando calendarId muda, retry na view da agenda,
pill de estado no header + FAB + diálogo (4 estados). Cancelado no Teqo
deleta o evento no Google. Sem participantes no v1 (decisão de produto).
Sem migration nova de tabela (hand-written). Closes #635
2026-08-11 13:53:51 -03:00

54 lines
3 KiB
Text

# Copy this file to `.env.local` for local development.
#
# For LOCAL DEVELOPMENT, DATABASE_URL must point at the local Postgres started by
# docker-compose (`pnpm db:start`). `pnpm dev` will REFUSE to start against a
# non-local host (e.g. the production Neon database) unless you explicitly set
# ALLOW_REMOTE_DB=true — this is intentional, to protect production data.
DATABASE_URL=postgresql://teqo:teqo@localhost:5432/teqo
PAYLOAD_SECRET=YOUR_SECRET_HERE
BLOB_READ_WRITE_TOKEN=YOUR_BLOB_TOKEN_HERE
# Canonical public origin used in absolute campaign invite links. In production
# this must be an exact HTTPS non-local origin: no credentials, path other than
# `/`, query, or fragment. Production ignores request headers and invite
# creation fails closed when this value is invalid. Development/test accepts
# request-derived origins only for exact localhost, 127.0.0.1, or ::1 hosts and
# normalizes them to HTTP; otherwise this configured origin is the only fallback.
NEXT_PUBLIC_SITE_URL=http://localhost:3000
# Shared secret guarding POST /api/revalidate, which busts ISR cache tags on demand.
# Needed after direct-DB writes (e.g. `pnpm db:seed:posts`, Onda 0 migrations) since those
# bypass the deployed Payload hooks. Default tag is `posts`; allowlisted tags also include
# `global_privacy-policy` for /privacidade. MUST be set in the Vercel project env for production. Generate with e.g. `openssl rand -hex 32`.
REVALIDATE_SECRET=YOUR_REVALIDATE_SECRET_HERE
# Web Push (D2 — /campanha notifications). Generate VAPID keys with: npx web-push generate-vapid-keys
VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=
VAPID_SUBJECT=mailto:campanha@jorgesolla.com.br
NEXT_PUBLIC_VAPID_PUBLIC_KEY=
# Campaign password reset emails (Resend). Required in production for forgot-password.
RESEND_API_KEY=YOUR_RESEND_API_KEY_HERE
CAMPAIGN_EMAIL_FROM=campanha@jorgesolla.com.br
CAMPAIGN_EMAIL_FROM_NAME=Campanha Jorge Solla
# Note: the automated test suite ignores this file and reads .env.test instead,
# and only ever runs against a database whose name ends with "_test".
# DeepSeek API key for the AI chat feature (Sollinha) — the LLM talks directly
# to api.deepseek.com (cache-hit input is ~6x cheaper than via Deep Infra).
# Get one at https://platform.deepseek.com/api_keys
DEEPSEEK_API_KEY=YOUR_DEEPSEEK_API_KEY_HERE
# Deep Infra API key for the Sollinha voice transcription (STT, Whisper large-v3)
# — cheapest speech-to-text around ($0.00045/audio min). Get one at https://deepinfra.com
DEEPINFRA_API_KEY=YOUR_DEEPINFRA_API_KEY_HERE
# C114 — Google Calendar mirror (Agenda da Campanha): base64 of the Google Cloud
# service-account JSON key (cat key.json | base64 -w0). The service account must
# be granted "make changes to events" on the campaign's public calendar; the
# calendar ID itself is configured by an admin in the `googleCalendarSync`
# collection. Absent/malformed → the agenda shows "não configurado" and the
# mirror stays off — the Teqo agenda never depends on this.
GOOGLE_CALENDAR_SERVICE_ACCOUNT_KEY=