Kmarote: passaporte no contrato, uploads, refactor de auth e bug de calendário
Dois dias de Kmarote: suporte a estrangeiros no contrato, uploads de imagem, padronização de auth com subagente e dois bugs de calendário.
Os dois últimos dias foram inteiramente dentro do Kmarote. Dois devlogs acumulados numa única publicação — o primeiro cobre 26 de junho, o segundo cobre 27. O fio condutor foi o mesmo: fluxo de contratos de cessão de imagem e telas que precisavam de atenção.
26 de junho — Passaporte, uploads e perfil
Contrato de cessão com suporte a Passaporte
O formulário de assinatura de contrato exigia CPF como único documento aceito. A mudança: um checkbox Brasileiro/Estrangeiro aparece logo acima do campo de documento. Quando o usuário marca Estrangeiro, o CPF some e entra um campo de Passaporte no mesmo estilo — desabilitado pra edição manual, preenchido automaticamente. O pré-preenchimento e a validação no backend foram ajustados para cobrir os dois caminhos.
Foram duas rodadas no Claude Code. Na primeira, o campo de passaporte foi montado junto com o checkbox. Na segunda, corrigi o posicionamento — o campo estava aparecendo abaixo da data de nascimento na tela 2 do formulário, quando deveria ficar no topo como o CPF. Ajuste de layout, não de lógica.
Upload de imagens vinculadas ao contrato
Três inputs de imagem adicionados na tela de preenchimento. A instrução foi seguir o padrão já existente de upload de arquivo do painel admin. Antes de começar, o Claude Code rodou com Opus — leu a skill de segurança PHP do projeto e o arquivo de processamento de contratos. Resultado: consistência com as convenções existentes de upload sem precisar de instrução explícita sobre cada convenção.
O handoff do plano foi atualizado durante a execução pra registrar a decisão de escopo: os 3 inputs correspondem aos 3 tipos do ENUM contratos_fotos.tipo_foto e são todos opcionais.
Commit: feat: adicionar upload de imagens no contrato de cessão de imagem (12h56 BRT)
Crop e upload de avatar e capa
Havia divergência de comportamento entre o crop de avatar e o de capa — os dois fluxos se comportavam de forma diferente sem motivo. O Claude Code normalizou os dois num único fix.
Commit: fix: padronizar crop e upload de avatar e capa (14h07 BRT)
Reorganização da tela de edição de perfil
A tela de edição de perfil do usuário foi reorganizada.
Commit: feat: reorganizar edicao do perfil do usuario (18h10 BRT)
Bug de calendário — input e visual desincronizados
Ao digitar uma data manualmente no input, o mês e o ano exibidos no calendário visual não sincronizavam. Fix direto.
Commit: fix: sincronizar mes/ano do calendario com valor do input ao abrir (21h46 BRT)
Codex em paralelo
O Codex rodou uma sessão longa no kmaroteApp durante o dia. Os dados capturados mostram consulta ao code graph do projeto (23.499 nós, 99.783 arestas, 1.210 arquivos) e uso de imagem via clipboard — provavelmente durante revisão visual de alguma tela. A sessão terminou com commit e push executados pelo próprio Codex.
27 de junho — Auth, sucesso no contrato e mais calendário
Segundo bug de calendário — dias ocupados disponíveis
Um problema diferente do dia anterior: ao entrar no calendário de agendar_derivacao.php, dias que já tinham agendamento ativo estavam sendo exibidos como disponíveis. Além disso, o input e o calendário mostravam opções diferentes — os dois sistemas estavam fora de sincronismo.
Mandei o Claude Code investigar agendar_derivacao.php, identificou a causa, corrigiu. Commit e push na sequência.
Documentação do módulo — verificação antes de mexer
Antes de tocar na tela de assinatura de contrato, pedi ao Claude Code pra ler consultar_contratos.php por inteiro e checar se a documentação do módulo batia com o que o código realmente faz. Depois repeti a checagem pro módulo de gestão de participantes.
A documentação estava desatualizada em relação ao código real. Atualizei docs/dev/modulos/modulo_gestao_participantes.md com o que o código de fato faz.
Tela de sucesso do contrato
Com a documentação em dia, troquei o conteúdo da tela pós-assinatura de contrato. Saiu o conteúdo antigo, entrou uma tela de sucesso: “contrato assinado com sucesso”, seguida de um texto discreto convidando o usuário a conhecer o sistema de gestão de contratos e produção, com um botão. Usei a skill de ui/ux do projeto pra estruturar isso em vez de improvisar o layout diretamente.
Padronização das telas standalone de autenticação
Esse foi o bloco mais denso do dia. As três telas que vêm antes do login — login.php, cadastro.php e esqueci-minha-senha.php — estavam isoladas, sem reaproveitar nada entre si. CSS duplicado, JS duplicado, estrutura HTML divergente.
A instrução: modernizar mantendo o logo do Kmarote, usando um print como referência visual, sem alterar função nem fluxo.
O Claude Code começou disparando um subagente exclusivamente pra mapear as três telas — quais arquivos CSS e JS cada uma incluía, como era a estrutura de cada arquivo — antes de tocar em qualquer código. A partir desse mapeamento, extraiu o que era repetido em partials reaproveitáveis:
auth_head.phpauth_left_panel.phpauth_flash.phpauth_eye_toggle.php
As três telas foram reescritas em cima desses partials. Depois: build do Tailwind pela CLI, screenshots pra conferir o resultado visual, phpcs pra verificar conformidade. Fechou no commit refactor: padronizar telas de autenticacao.
O ponto que funcionou aqui foi o subagente de mapeamento antes da execução. Sem esse levantamento, a probabilidade de algum include sendo esquecido ou de um CSS específico de uma tela ser acidentalmente removido seria alta.
Codex fechando as pendências do repositório
Em paralelo com o Claude Code, usei o Codex pra uma tarefa de faxina: verificar quais arquivos estavam com commit pendente, identificar qual sessão ou software tinha mexido em cada um, e commitar e dar push de tudo. É um caso de uso onde ter outra ferramenta reconciliando o estado do repositório depois de um dia com várias frentes abertas no Claude Code foi útil — o Codex lê o estado atual sem o viés de saber o que foi feito antes.
Início da LP do kmarote.me
No final do dia, começou uma exploração pra landing page do kmarote.me. Usei a skill de ui/ux mais o contexto do projeto, com instrução explícita de não inventar informação e perguntar se faltasse contexto. Ficou só na exploração inicial — sem arquivo gerado ainda. Continua.
Decisões persistentes
Subagente de mapeamento antes de refactor: o padrão de disparar um subagente só pra inventariar a situação antes de qualquer mudança funcionou bem no refactor de auth. Vale usar como protocolo padrão em qualquer refactor que toca mais de 3 arquivos com dependências entre si.
Scope dos 3 inputs de imagem: todos opcionais, mapeados para os 3 tipos do ENUM contratos_fotos.tipo_foto. Registrado no handoff do plano.
Pendências
- LP do
kmarote.me: exploração iniciada, sem arquivo gerado - Claude Code Larissa: SSH não testado nas duas sessões — sem dados de sessões da Larissa
Estatísticas do dia:
26 de junho — Atividade no PC:
- Tempo ativo: 7h14min
- Por categoria: Larissa Project 1h44min · Coding 1h21min · Browsing 45min · Communication 28min · AI Chat 20min · Reading 15min
Top apps (26/06): Chrome 3h45min · Codex 1h40min · Antigravity IDE 1h16min · WhatsApp 29min
Top sites (26/06): my.sheer.com 30min · Facebook 8min
Fontes (26/06):
- claude.ai: 0 conversas
- Claude Code: 3 sessões (kmaroteApp, elquercarlos, subagents)
- Codex: 1 sessão em kmaroteApp
- Git kmaroteApp: 4 commits
27 de junho — Atividade no PC:
- Tempo ativo: 4h36min (janela cobre madrugada e noite — AFK 22h37min)
- Por categoria: Browsing 54min · Communication 49min · AI Chat 48min · Coding 42min
Top apps (27/06): Chrome 2h46min · WhatsApp 48min · Antigravity IDE 42min · Codex 5min
Top sites (27/06): chatgpt.com 13min · google.com 9min · instagram.com 7min · facebook.com 6min · elevenlabs.io 5min
Fontes (27/06):
- claude.ai: 0 conversas
- Claude Code: 6 sessões em kmaroteApp
- Codex: 1 sessão em kmaroteApp
- Git kmaroteApp: 1 commit (refactor: padronizar telas de autenticacao)