Executando verificação de segurança...
7

Criei um dateparser para o meu app com o Claude

Fala pessoal, tudo bem? Não é a primeira vez que venho aqui falar do taskzap, um side project que estou desenvolvendo para manter todas as minhas tarefas e lembretes dentro do WhatsApp.

O Stack e o Desafio

A API é toda escrita em Go, que é extremamente potente em concorrência e performance, mas tem um ecossistema de pacotes bem menor comparado a JS e Python. E foi aí que me deparei com um problema clássico:
Como aceitar qualquer formato de data que o usuário brasileiro escreva e transformar isso em uma Unix timestamp?
Strings como:

"amanhã às 10h da manhã"
"próxima segunda às 14h"
"dia 15 do mês que vem"
"daqui a 10 minutos"

A Primeira Tentativa (Que Falhou)

Tentei usar pacotes existentes como o when, mas todos tinham a mesma falha crítica: suporte extremamente limitado para português brasileiro. O parser simplesmente não entendia expressões naturais que usamos no dia a dia, falhando constantemente em casos básicos como "hoje às 14h" ou "amanhã às 17h".

A Gambiarra (Que Também Falhou)

Minha primeira reação foi: "Deixa a IA resolver isso!"
Criei um fallback: toda data que o pacote não conseguia converter, eu mandava para a API da OpenAI processar. Problema resolvido, certo?
Errado.
Como vocês podem imaginar, usar IA em runtime trouxe problemas sérios:

  • Latência alta: 500-1000ms por chamada (vs <1ms do parser nativo)
  • Custo: Cada tarefa criada = 1 request = R$$$
  • Inconsistência: A IA às vezes errava ou interpretava de forma diferente
  • Dependência externa: Se a API caísse, o app inteiro quebrava

A Solução Real: IA como Ferramenta de Desenvolvimento

Foi aí que tive o insight: em vez de usar IA em produção, por que não usar IA para CRIAR a solução?

Entao o que eu fiz, pedi para o Claude criar um dateparser usando varios casos de usuarios beta que nao funcionaram.

Passei o seguinte prompt inicial:

help me create a natural date parser in go. Not using any external package and not using ai.

The use cases are when it receieves a text like "amanha as 10h da manha", and it extract the date only and returns a unix date.

You will ask me questions before outlining the plan and return the code

O Claude Como Arquiteto

Em vez de só cuspir código, o Claude me fez as perguntas certas — aquelas que eu deveria ter pensado antes mas não pensei:

Language scope: I see your example is in Portuguese ("amanhã as 10h da manhã"). Should the parser only support Portuguese, or do you want multi-language support?
Date formats to support: Which natural language patterns should it handle? For example:

Relative dates: "hoje", "amanhã", "depois de amanhã", "ontem"
Days of week: "segunda-feira", "próxima terça"
Specific dates: "15 de março", "15/03/2025"
Time expressions: "10h da manhã", "15:30", "meio-dia", "meia-noite"
Combined: "amanhã às 14h", "segunda às 9h"


Reference time: Should the parser use the current system time as the reference point, or should it accept a reference time as input?
Timezone handling: Should it work with a specific timezone, use the system's local timezone, or accept timezone as a parameter?
Output format: You mentioned "unix date" - do you want:

Unix timestamp (seconds since epoch)?
Time in a specific timezone?
UTC time?


Ambiguity handling: How should it handle ambiguous cases? For example:

"segunda" - this week or next week?
"10h" without "manhã/tarde/noite" - AM or PM?
Invalid dates like "32 de janeiro"


Error handling: What should happen when the text doesn't contain a parseable date? Return zero, return an error, or return the current time?

E eu dei as seguintes respostas:

1 - PTBR only, but make it extensible
2 - all of them
3 - both, if no date is offered, uses system date by default
4 - accepts external, but uses system by default
5 - unix timestamp
6 - You handles 24h cases, no am/pm, if it says "segunda", but the system date is "terca", is next week.
7 - return an error

O Processo Iterativo

O Claude não entregou um código perfeito de primeira. Foi um processo colaborativo:

Fase 1: MVP

  • Suporte básico: hoje, amanhã, ontem
  • Dias da semana
  • Formatos DD/MM/YYYY

Fase 2: Casos Reais
Levei 23 casos que usuários beta realmente escreveram e que falharam:

"comprar pão dia 15"
"próxima segunda às 14h"
"daqui a 10 minutos"
"20/09/25 às 18:30"  // ano com 2 dígitos!
"1º de outubro"      // números ordinais
"sábado de manhã"    // horário implícito

Fase 3: Refinamento
A cada falha, o Claude:

  • Explicava por que falhou
  • Propunha uma solução
  • Atualizava os testes

Exemplo real: "amanhã às 8h da noite" estava retornando 8h da manhã porque "amanhã" contém a substring "manhã" e o regex estava dando match errado. O Claude identificou o bug, explicou o problema, e corrigiu isolando a porção de tempo do input antes de processar modificadores.
ta que acerta ~96% dos casos, e os edge cases sao tratados pela IA.

Suite de Testes:

21 testes unitários (casos isolados)
23 testes de casos reais de usuários
95.7% de coverage (22/23 passando — único skip é "próximo feriado" que precisaria calendário)

Números Finais
Performance:

  • ~96% de acurácia (22/23 casos reais)
  • <1ms de latência (vs 800ms da IA)
  • Zero custo por requisição
  • Zero dependências externas

Edge Cases:
Os 4% que ainda falham? Casos extremamente específicos como:

  • "no próximo feriado" (precisaria calendário de feriados)
  • Datas ambíguas sem contexto suficiente
  • Erros de digitação muito graves

Para esses casos raros, aí sim tenho um fallback para IA — mas representa menos de 1% das requisições reais.

A Lição Mais Importante

O Claude não foi um gerador de código mágico. Foi um parceiro de pair programming que:

Fez as perguntas certas que me forçaram a pensar melhor
Propôs arquitetura escalável desde o início
Ensinou boas práticas (testes desde o dia 1, código documentado)
Debugou comigo quando testes falharam
Explicou o "porquê", não só o "como"

Resultado Business
Agora o taskzap tem:

  • Parser nativo que entende como brasileiros falam
  • Latência imperceptível para o usuário
  • Custo operacional zero em parsing
  • Confiabilidade de 96%+

Quer testar o parser em ação? O taskzap está em beta aberto e totalmente gratuito. Adiciona no WhatsApp e tenta "quebrar" o parser escrevendo datas das formas mais malucas possíveis. Aposto que ele aguenta!

E se você conseguir quebrar? Manda o caso pra mim — vou adicionar nos testes e melhorar o parser. É assim que software de qualidade é construído: iteração constante com feedback real.

Carregando publicação patrocinada...
4

Quebrei:

[03/11, 00:13] .: Testar hoje 9 da manhã
[03/11, 00:13] +55 98 94692-5228: ✅ Lembrete criado com sucesso! Voce recebera um lembrete em: 03/11/2025 às 00:13
[03/11, 00:13] +55 98 94692-5228: Testar hoje 9 da manhã

1

E pq voce colocou Hoje as 9h da manha sendo 00h13, entao o parser interpretou que ja havia passado. Como era meia-noite, deveria ter ido para o mesmo dia pela manha. Vou estudar esse caso para corrigir! Valeu pelo teste!

1

Sei que dei uma forçada na barra,mas é essa a intenção mesmo, certo?

[4/11 14:31] Francisco: Lembre-me amanhã entre 9 e meia e 10 horas de tomar o remédio.
[4/11 14:31] +55 xx 94692-xxxx: ✅ Lembrete criado com sucesso! Voce recebera um lembrete em: 05/11/2025 às 14:31

Acho que não interpretou o horário e devolveu a hora do teste, isso né?

Eu esperava o retorno pedindo um horário específico, mas parabéns pelo trabalho e iniciativa.

1

[6/11 18:47] matrizz: Buscar bolo no penúltimo sábado do mês que vem
[6/11 18:47] +55 98 946****: ✅ Lembrete criado com sucesso! Voce recebera um lembrete em: 08/11/2025 às 18:47

0
1

Pode sim, mas e que prefiro desta forma, mas com certezza, sem problemas. So quis retratar exatamente como eu me comuniquei pra permitir que possa reproduzido por qualquer um.