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.