尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Chat privado em família — um "WhatsApp" próprio, sem depender de número de telefone, com mensagens em tempo real, fotos/vídeos/áudios/documentos sem perda de qualidade, localização, grupos, PWA instalável e notificações push. Suporta várias famílias na mesma instalação: cada uma tem seu próprio código de acesso e administrador.查看完整 README ↗
Chat privado em família — um "WhatsApp" próprio, sem depender de número de telefone, com mensagens em tempo real, fotos/vídeos/áudios/documentos sem perda de qualidade, localização, grupos, PWA instalável e notificações push. Suporta várias famílias na mesma instalação: cada uma tem seu próprio código de acesso e administrador.
Tudo é client-side reativo via Supabase Realtime — não há reload de página em nenhum fluxo do chat.
reply_to_id pronto), busca de mensagens, backup de mídia, chamadas de voz/vídeo,
trocar o código de acesso da família pelo painel (hoje é via SQL).src/
app/ Rotas (App Router)
(auth)/login, register Login e cadastro (criar família / entrar em uma)
chat/ Layout com sidebar + janela de conversa (bloqueado p/ pendentes)
settings/ Perfil, notificações, família, aprovações, logout
manifest.ts Web App Manifest (PWA)
components/
chat/ Sidebar, ChatWindow, MessageBubble, AttachmentMenu, AudioRecorder,
ApprovalGate, PendingApprovals...
pwa/ InstallPrompt, PushSubscriber, ServiceWorkerRegister
providers/ SupabaseProvider (sessão + client)
ui/ Avatar, Modal, Spinner
hooks/ useConversations, useMessages, usePresence, useMyFamily...
lib/ supabase (client/server/middleware), messages.ts, format.ts, push.ts
public/
sw.js Service worker (push + cache do shell)
icons/ Ícone SVG + PNGs gerados (família no balão de conversa)
supabase/
migrations/ Schema SQL (tabelas, RLS, RPCs, triggers)
functions/signup/ Edge Function: cria conta + cria/entra numa família
functions/manage-member/ Edge Function: admin aprova/recusa pedido de entrada
functions/create-family-member/ Edge Function: admin cria a conta de um membro direto
functions/notify-child-logout/ Edge Function: avisa o admin quando uma criança sai da conta
functions/send-push/ Edge Function: dispara Web Push a cada mensagem nova
scripts/generate-icons.mjs Gera os PNGs do ícone a partir do SVG
Não existe cadastro público solto: no registro, a pessoa escolhe "Criar uma família" (define
nome + um código de acesso) ou "Entrar numa família" (informa o código que já existe). Em
ambos os casos a conta é criada pela Edge Function signup usando a service role key — a chave
anônima do navegador nunca cria usuários nem lê a tabela families diretamente.
approval_status = 'pending' e só enxerga as demais
conversas depois que um administrador aprova em Configurações → Pedidos de entrada na
família (isso chama a Edge Function manage-member, que confere se quem está aprovando é
realmente admin da mesma família antes de agir).Troque o código de acesso de uma família quando quiser via SQL:
update public.families set join_code = 'NOVOCODIGO' where name = 'Nome da família';
Crie um projeto em supabase.com/dashboard.
Aplique as migrations em supabase/migrations/*.sql, na ordem, via SQL Editor (ou
supabase db push se estiver usando a CLI local).
Em Project Settings → API, copie a Project URL e a anon public key.
Configure os segredos usados pelas Edge Functions/triggers — tudo fica no Vault do Supabase
(SQL Editor), então não é preciso supabase secrets set nem CLI:
select vault.create_secret('https://SEU_PROJETO.supabase.co', 'project_url');
select vault.create_secret('SUA_CHAVE_VAPID_PUBLICA', 'vapid_public_key');
select vault.create_secret('SUA_CHAVE_VAPID_PRIVADA', 'vapid_private_key');
select vault.create_secret('mailto:[email protected]', 'vapid_subject');
Gere o par de chaves VAPID com npm run generate-vapid.
Faça o deploy das três Edge Functions (signup e send-push sem verificação de JWT — são
chamadas antes do login/pelo trigger do banco —, manage-member com verificação, já que exige
o token de quem está aprovando):
supabase functions deploy signup --no-verify-jwt
supabase functions deploy send-push --no-verify-jwt
supabase functions deploy manage-member
supabase functions deploy create-family-member
supabase functions deploy notify-child-logout
Em Storage, confirme que os buckets avatars (público) e attachments (privado) foram
criados pela migration 0003_storage.sql.
Copie .env.example para .env.local e preencha:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
NEXT_PUBLIC_VAPID_PUBLIC_KEY=
Use a mesma chave pública VAPID gerada no passo anterior.
npm install
npm run dev
git push na branch principal gera um novo deploy automaticamente.beforeinstallprompt; iOS mostra o passo a passo de "Compartilhar → Adicionar à Tela de Início",
já que a Apple não oferece prompt automático).public/icons/icon.svg; para regenerar
os PNGs após editar o SVG, rode npm run generate-icons.families.