Join the Agent Deck Discord Server!
Discord에서 Agent Deck 커뮤니티 확인, 357명과 자유 음성·텍스트 채팅 이용
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.