DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Agenda da Diretoria — calendário compartilhado da Insper AI
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Calendário compartilhado da Insper AI: eventos, aulas, reuniões e prazos. Três níveis: a diretoria cria e edita tudo e marca, em cada evento, se membros e/ou trainees também veem; membros criam e editam os próprios eventos; trainees só veem. Pedidos de disponibilidade (estilo when2meet) com link curto e prévia no WhatsApp. Quem entra sem estar cadastrado pede acesso pelo site e um admin aprova. Login com Google ou com código no e-mail. Modo claro/escuro, instalável no celular (PWA). Feed .ics por pessoa para conectar ao Google Agenda / Apple Calendar.
Estado atual, infraestrutura e pendências:
docs/estado.md. Convenções de trabalho:CLAUDE.md.
Stack: Next.js 16 (App Router) na Vercel (região gru1) · Supabase em São Paulo (Postgres + Auth com Google e OTP por e-mail) · Tailwind v4 com os tokens do Playbook de Marca · Motion, GSAP e lucide-react na interface.
npm install
cp .env.local.example .env.local # preencha com as chaves do passo 2
npm run dev -- -p 3002 # http://localhost:3002 (a porta precisa estar nas Redirect URLs do Supabase)
npm test # testes da lógica pura (recorrência, .ics, níveis, disponibilidade, login…)
npm run lint && npm run typecheck
Já está tudo configurado em produção (ver docs/estado.md); estes passos servem para recriar do zero. A ordem importa: Supabase → Google Cloud → Vercel.
agenda-insper-ai.git init && git add -A && git commit -m "Agenda da Diretoria" && git branch -M main && git remote add origin <url> && git push -u origin main.South America (São Paulo). Guarde a senha do banco.supabase/migrations/0001_init.sql inteiro → Run. Depois, uma query nova para cada uma, em ordem: 0002_niveis.sql, 0003_publico_e_pedidos.sql, 0004_votacoes.sql, 0005_diretoria_acompanha.sql, 0006_link_curto.sql, 0007_membros_criam.sql e 0008_membros_pedem_disponibilidade.sql → Run. Cada migração roda uma vez só.supabase/seed.sql, troque o e-mail pelo da sua conta Google e o nome, cole no SQL Editor → Run. Você é o primeiro admin..env.local.http://localhost:3000 (depois do deploy, troque pela URL da Vercel).http://localhost:3000/** e https://agenda-insper-ai.vercel.app/** (ajuste ao domínio real).https://<ref>.supabase.co/auth/v1/callback). Deixe a aba aberta para colar o Client ID/Secret do passo C.openid, email, profile). Depois Publish app (sem isso, só 100 "test users" conseguem entrar). Não precisa de verificação para esses escopos.Precisa de SMTP próprio (o envio padrão do Supabase só entrega para o time do projeto). Passo a passo e template do e-mail em docs/estado.md → Pendências.
Pronto para testar local: npm run dev → /entrar → Google → /agenda.
agenda-insper-ai. Framework: Next.js. O vercel.json já fixa as funções em gru1 (perto do banco) e o cron diário..env.local.example. NEXT_PUBLIC_SITE_URL = URL de produção; CRON_SECRET = qualquer string longa aleatória.NEXT_PUBLIC_SITE_URL se mudou e faça Redeploy.Para adicionar as pessoas: mande o link do site; quem não está cadastrado cai em Sem acesso e pede acesso ali (aparece em Membros → Pedidos, com contador na barra). Ou cadastre em Membros uma a uma (e-mail da conta Google, nome, nível, cargo) ou Colar uma lista com linhas email, nome, nível, cargo copiadas de uma planilha.
| Peça | Onde |
|---|---|
| Esquema, triggers de auditoria, RLS | supabase/migrations/0001_init.sql |
| Níveis (diretoria/membro/trainee) | supabase/migrations/0002_niveis.sql, lib/niveis.ts |
Pedidos de disponibilidade (estilo when2meet; no código e no banco, votacao) e convidados individuais em eventos | supabase/migrations/0004_votacoes.sql, lib/votacao.ts, components/votacao/ |
Público por evento (publico) e pedidos de acesso | supabase/migrations/0003_publico_e_pedidos.sql, app/sem-acesso/, components/admin/PedidosAcesso.tsx |
Tema claro/escuro (light-dark() + cookie tema) | app/globals.css, lib/tema.ts |
Link curto /d/<codigo> com prévia (Open Graph) | app/d/[codigo]/, lib/og.tsx, supabase/migrations/0006_link_curto.sql |
| Membros criam eventos / pedidos | supabase/migrations/0007_membros_criam.sql, 0008_membros_pedem_disponibilidade.sql, lib/niveis.ts |
| Login com código no e-mail | app/entrar/EntrarComEmail.tsx, lib/login.ts |
| Celular: PWA, barra de abas, folhas, gestos | app/manifest.ts, components/layout/BarraAbas.tsx, components/ui/Dialogo.tsx, app/globals.css |
Portão de membro (logado mas fora da lista → /sem-acesso) | app/(app)/layout.tsx, proxy.ts |
| Expansão de séries (semanal/quinzenal/mensal + exceções) | lib/recorrencia.ts |
Serializador .ics (RRULE / EXDATE / RECURRENCE-ID) | lib/ics.ts, app/api/feed/[token]/route.ts |
| Cores das categorias | app/globals.css (--cat-*) + lib/categorias.ts |
| Vistas mês / semana / próximos | components/agenda/Vista*.tsx |
Recorrência: uma linha "mestre" guarda freq + until. Editar/excluir só esta ocorrência cria uma linha filha com series_id + original_start (ou cancelled = true). Editar toda a série atualiza o mestre e propaga título/local/etc. para as filhas; mudar horário ou repetição apaga as filhas (o app avisa antes).
Permissões: só e-mails em members entram. Cada evento tem publico (membro e/ou trainee; a diretoria sempre vê); a RLS só devolve o que o nível da pessoa pode ver, e a diretoria cria/edita/exclui tudo, membros só os próprios eventos (sempre visíveis para membros) e trainees só veem (0007). Só admins alteram members, e admin precisa ser da diretoria (constraint). O último admin não pode ser removido (trigger). created_by/updated_by são preenchidos por trigger, não pelo cliente.
Feed: GET /api/feed/<token> é público, autenticado só pelo token (48 hex) do membro. Como usa a service role (sem RLS), filtra pelo nível do dono do token com visiveisPara(). Em Conectar dá para copiar, abrir no Google/Apple e gerar um novo token.
/sem-acesso. A adiciona B em Membros → B recarrega → vê a agenda. A remove B → próxima navegação de B cai em /sem-acesso.curl -i https://<site>/api/feed/<token> → 200 + text/calendar; token errado → 404. Cole o corpo em https://icalendar.org/validator.html.