WallpaperMachine
The wallpapers you love. A new home on your Mac.
Boletins, cultos, escalas, louvores e vida comunitária em um só lugar para igrejas locais.
Translation pending
LifestyleTypeScript · PLpgSQLGitHub @paulovasconcelos85OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.