Elquer Carlos

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.php
  • auth_left_panel.php
  • auth_flash.php
  • auth_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)
Fim do ato