尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A igreja organizada sem perder o cuidado pastoral.
Plataforma multi-igreja de gestão ministerial: boletins, cultos, escalas, repertório musical, cadastro de membros e cuidado pastoral — tudo em um só lugar, com páginas públicas por igreja e app iOS.
| Área | O que faz |
|---|---|
| Boletim | Edição estruturada, publicação pública e compartilhável, histórico de boletins anteriores |
| Cultos | Programação litúrgica, modelos de liturgia (incl. tons musicais maiores/menores) |
| Escalas | Montagem e visualização de escalas de equipe por culto |
| Repertório | Cânticos com cifra, letra e tom; repertório público por igreja |
| Pessoas | Cadastro de membros, cargos/funções, tags de habilidade, controle de acesso |
| Cuidado pastoral | Pedidos pastorais categorizados, com fluxo de acompanhamento |
| Páginas públicas | Apresentação institucional da igreja, cadastro público, pedidos via slug |
| Multi-idioma | Português, Espanhol e Inglês com detecção automática |
| Push (iOS) | Notificações via APNs |
@supabase/ssr)O modelo de dados separa pessoa (cadastro ministerial) de acesso (login), e ambos se relacionam com igrejas via tabelas de vínculo. Esse é o coração do sistema:
auth.users ───┐
│ (auth_user_id)
▼
usuarios_acesso ──< usuarios_igrejas >── igrejas
│ (pessoa_id) │
▼ │
pessoas ─────────< pessoas_igrejas >──────┘
pessoas — cadastro da pessoa (sem igreja_id; o vínculo é só via pessoas_igrejas)pessoas_igrejas — vínculo pessoa↔igreja (cargo, status, ativo)usuarios_acesso — espelho de acesso da pessoa (liga auth_user_id)usuarios_igrejas — vínculo de acesso↔igrejaigrejas — igrejas, identificadas por slug (ex.: ippn-manaus)Triggers no Postgres sincronizam automaticamente: ao criar/atualizar pessoas/pessoas_igrejas, o banco gera/atualiza usuarios_acesso e usuarios_igrejas. O campo tem_acesso não é coluna — é calculado na API a partir de usuario_id.
src/
├── app/
│ ├── (auth)/login/ # Login / primeiro acesso (signup aberto c/ seleção de igreja)
│ ├── (sistema)/ # Área autenticada: admin, boletim, cultos, cânticos, perfil…
│ ├── [slug]/ # Página pública da igreja
│ ├── cadastro/[slug]/ # Cadastro público por igreja
│ ├── pedidos/[slug]/ # Pedidos pastorais públicos
│ ├── oikos/ # Landing institucional
│ ├── privacidade/ # Política de privacidade (pt/es/en)
│ └── api/ # Route handlers (pessoas, finalizar-acesso, admin, …)
├── components/
├── hooks/
├── lib/ # access-sync, permissions, supabase client, …
└── i18n/ # Locale (pt/es/en), provider, messages
sql/ # Migrations e scripts datados
Pré-requisitos: Node 20+ e um projeto Supabase.
npm install
cp .env.local.example .env.local # preencha as chaves (ver abaixo)
npm run dev
Abra http://localhost:3000.
Scripts:
| Comando | Ação |
|---|---|
npm run dev | Servidor de desenvolvimento |
npm run build | Build de produção |
npm run start | Servidor de produção |
npm run lint | ESLint |
Obrigatórias:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
Opcionais (por funcionalidade):
# Mapas
GOOGLE_MAPS_API_KEY=
NEXT_PUBLIC_GOOGLE_MAPS_EMBED_KEY=
# Push iOS (APNs)
APNS_KEY_ID=
APNS_TEAM_ID=
APNS_BUNDLE_ID=
APNS_PRIVATE_KEY= # ou
APNS_PRIVATE_KEY_BASE= # base64
# Jobs agendados
CRON_SECRET=
SUPABASE_SERVICE_ROLE_KEYé secreta — nunca exponha no cliente.
Os scripts SQL ficam em sql/, nomeados por data (YYYY-MM-DD_descricao.sql). Eles cobrem o modelo multi-igreja, i18n de conteúdo, boletins, push e provisionamento.
Aplique no SQL Editor do Supabase, em ordem cronológica. Scripts de diagnóstico/reconciliação rodam dentro de transação com rollback — troque por commit só após revisar.
src/lib/access-sync.ts)/api/finalizar-acesso liga o usuário Auth às tabelas da aplicação após o login/cadastromembro, diacono, presbitero, pastor, seminarista, staff, musico, admin, superadmin/admin/usuariosA função Postgres
email_permitido()controla quem pode se cadastrar. Para signup totalmente aberto, ela retornatrue.
Locales suportados: pt (padrão), es, en. Detecção via cookie oikos-locale → accept-language. Provider em src/i18n/, mensagens em src/i18n/messages. Páginas server-side usam getRequestLocale().
Deploy contínuo na Vercel. Configure as variáveis de ambiente no projeto Vercel. vercel.json define ajustes de runtime/cron.
App nativo iOS (WebView/wrapper) em submissão na App Store. Push via APNs. Política de privacidade pública obrigatória: /privacidade.