§Changelog

O que estamos lançando

Notas curtas de cada release. Mais recente no topo.

  1. Novo

    Outras versões desta memória

    Quando você reconta a mesma história com detalhes diferentes, o app detecta e te enlaça as versões. Você confirma se é a mesma ou as deixa separadas.

    Por que isso existe

    A memória é reconstrutiva. A mesma pessoa conta a mesma história três vezes ao longo do tempo e a cada vez lembra algo diferente — um detalhe novo, uma versão mais cuidada, uma contradição consigo mesma. O que se perdia até agora era o rastro de como a memória foi mudando — o app sobrescrevia, ou guardava duas anedotas separadas sem reconhecer que era o mesmo evento.

    Como funciona

    Quando você salva uma anedota nova, uma passagem de similaridade roda em background (token-bag cosine — sem chamada à IA, ~50ms) contra as últimas 100 anedotas que você escreveu. Se encontra alguma parecida acima do threshold, deixa um link candidato em uma tabela nova (anecdote_links).

    Mais tarde, quando volta à anedota, você vê uma seção discreta no rodapé do detalhe:

    § Outras versões desta memória

    "As bolachas dos sábados" — 2026-08-12 · 67%

    Com dois botões inline: Mesma história ✓ ou São diferentes ✗. A UI espelha a que já temos para validação de themes em entrevistas — confirm/dismiss otimista, link à outra anedota, fade-out ao descartar.

    O insight: linkar é versionar

    Não precisamos de uma tabela anecdote_versions, nem de um fluxo "salvar como nova versão", nem de um seletor explícito. Você reconta a história (porque lembrou diferente), o app enlaça com a versão antiga, e você confirma. A cronologia emerge de graça dos created_at de cada uma.

    O que este MVP não faz

    Honestidade sobre o escopo:

    • Sem diff lado a lado. Para comparar duas versões você abre as duas. Se o feature engatar, vem depois.
    • Sem contradições factuais. Detectamos similaridade de conteúdo, não marcamos "você diz 14 anos numa e 12 noutra". Isso requer extração estruturada que não vamos adicionar sem sinal.
    • Sem detecção entre amigos. A passagem só roda contra o seu próprio arquivo. Contradições interpessoais vivem no fluxo de "fundir anedotas" que já existe.
    • Sem segundo passo de LLM. Threshold conservador (0.55), confirm/dismiss visível — falsos positivos custam um clique. Se a qualidade da detecção não chegar, é aí que adicionaríamos Claude para desambiguar pares duvidosos.

    Custo

    Um endpoint POST assíncrono disparado fire-and-forget depois de salvar (mesmo padrão do dispatch de AI rate que já existe). Sem cron novo, sem tabela pesada, zero chamadas extras a LLM. A detecção é praticamente grátis em infra; o valor está em dar ao usuário o espaço de reconhecer sua própria memória como um objeto que muda com o tempo.

  2. Novo

    Datas honestas: dia, ano, época — ou nenhuma

    Paramos de inventar a data de cada anedota. Agora cada uma aparece na linha do tempo com a precisão que você realmente lembra.

    O problema que a linha do tempo arrastava

    Até agora, se uma anedota não tinha data explícita, a linha do tempo a colocava no dia em que você a escreveu, não no dia em que aconteceu. Marcávamos como "inferida" em cinza, mas o ponto continuava sendo uma mentirinha: uma história da sua adolescência caía no mês em que você subiu na app.

    Uma história escrita ontem não aconteceu ontem. A data de criação é metadado do sistema, não da memória.

    Quatro precisões, não uma

    Cada anedota agora é salva com um destes quatro níveis, escolhido a partir do que o usuário disse:

    • Diahappened_date exato. "14 de março de 1996."
    • Ano — um único ano conhecido. "Em 1985." / "Verão de 87."
    • Época — um intervalo. "Os anos 90." / "Quando morava em Pocitos, entre 88 e 92."
    • Sem data — o usuário não lembra e não vamos inventar.

    No mapa de calor cada nível tem seu tratamento visual: datas exatas são células mensais, anos aprox. são colunas tênues com um em cima, e épocas são faixas com hachuras diagonais sobre os anos que cobrem. As "sem data" não aparecem no grid — um contador discreto no rodapé mostra quantas são.

    Extração automática a partir do chat

    O chat editorial (/anecdotes/new) e a entrevista (/biography/interview) já entendem expressões em português/espanhol rioplatense e tiram o nível correto sem perguntar:

    • "Eu devia ter uns 7 anos, era o verão antes de começar a escola" → se conhece sua idade, calcula o ano exato; se não, fica como "sem data".
    • "Nos anos 70, na casa da avó" → época 1970-1979.
    • "O dia em que minha filha nasceu, era uma sexta" → se a data completa é dita, fica exato.

    Regra de ouro do prompt: preferimos honestidade a precisão inventada. Na dúvida entre "exato" e "aprox.", escolhe aprox.

    Editor manual

    /anecdotes/[id]/edit agora tem um seletor de precisão ao lado do texto: Dia / Ano / Época / Não sei. Se a extração do chat se enganou, você corrige sem ter que explicar de novo ao modelo.

    Funções de score atualizadas

    As funções SQL compute_user_score e evaluate_achievements (conquista five_years) agora leem anecdotes.happened_date como fonte canônica, com fallback para a coluna de origem herdada e para o ano de época quando cabe. As anedotas que você marcou com uma data real não são mais contadas pelo dia em que as escreveu.

    Backfill opcional

    Para anedotas antigas cujo único sinal temporal era created_at (agora precisão = "Sem data" após a migração), existe um script one-shot em scripts/backfill-anecdote-dates.mjs que passa pelo LLM e popula os campos quando o texto dá pistas claras. Suporta --dry-run, filtro por --user, e é idempotente.

  3. Novo

    Compartilhar com quem você escolhe, falar através do tempo

    Círculos fechados nomeados (Família / Trabalho / A turma) + cartas ao futuro com entrega programada.

    Círculos fechados

    Você pode criar grupos pequenos de amigos com nome — "Família", "Amigos do bairro", "A turma" — em /dashboard/circulos. Adiciona membros um por um (precisam ser amigos aceitos primeiro). Quando compartilha uma anedota, o diálogo de share agora tem uma seção "Círculos" acima da lista de amigos: marca os círculos que quer e só seus membros podem ler.

    • Single-owner: cada círculo pertence a você. Marina na sua "Família" não significa que ela tenha um círculo "Família" próprio que inclua você.
    • Sem dupla aceitação: se Marina já é sua amiga, adicioná-la ao seu círculo é unilateral. Removê-la também.
    • Sem notificação: a outra pessoa não fica sabendo quando você adiciona ou remove. As anedotas marcadas para um círculo aparecem no feed dela; as que não, não.
    • Zero público anônimo: quando uma anedota está num círculo, você sabe exatamente quem pode ler — é uma lista de nomes concreta, não um número.

    A promessa da rede social lenta se torna verificável: "Você decide o que sai, para quem, e quando."

    Cartas ao futuro

    Nova rota /cartas. Você escreve agora uma carta para alguém — sua filha aos 18, sua parceira no próximo aniversário, você mesmo em 10 anos — e escolhe quando entregar:

    • Data fixa: 2035-12-25.
    • No aniversário do destinatário: "quando minha filha completar 18" (precisa que a pessoa tenha data de nascimento conhecida na sua agenda).

    Um cron diário acorda as cartas quando chega a data. Se o destinatário tem conta no Anecdotario, a carta se materializa como um baú no /keepsakes dele. Se não tem conta, você recebe uma notificação que diz "sua carta para X está pronta" e a manda manualmente do editor de baús pré-preenchido (auto-envio para externos espera Resend).

    Enquanto lacrada você pode cancelar. Uma vez entregue passa pro baú e vive lá.

    O que ainda não tem: self-letter (a versão "para você mesmo em 10 anos") e o caminho post-mortem (depende da herança digital). O formulário menciona ambos explicitamente como "em construção" onde aplica — preferimos honestidade a marketing.

  4. Novo

    Cuidar das datas difíceis

    Memorialização, leitura silenciosa, datas difíceis e tom por anedota — para que o app saiba quando ficar em silêncio.

    Um app que guarda anos da sua vida tem uma responsabilidade rara: aprender quando ficar em silêncio.

    Quando você marca a data de falecimento de alguém, deixamos de mencioná-la em sugestões automáticas — sem mais lembretes de aniversário, sem mais "esta semana há cinco anos…", sem mais perguntas alegres. A pessoa continua nas suas anedotas; você pode escrever sobre ela quando quiser.

    Somamos um modo de leitura silenciosa — uma tela limpa para reler as anedotas de alguém, uma de cada vez, sem métricas nem ornamentos.

    Para datas que você quer reservar além de uma pessoa específica — um diagnóstico, um aniversário difícil — pode marcá-las como datas difíceis (com um lembrete opt-in) ou como dias em silêncio (o app não envia nada automatizado).

    E cada anedota pode carregar um tom — alegre, difícil, misto — para que as sugestões saibam quando ficar em silêncio.

  5. Melhoria

    Pergunta da semana, aniversários, transcrição regional

    Uma leva de melhorias menores: pergunta curada toda segunda, aviso de aniversários com 7 dias de antecedência, Whisper que entende rioplatense, e excluir sua conta sem chatbots.

    Uma leva de melhorias menores:

    • Pergunta da semana — além do chrono recall ("esta semana há N anos você contou X"), toda segunda-feira também chega uma pergunta curada: "Qual foi a primeira vez que você se sentiu adulto?", "Que cheiro te leva direto à infância?" — 28 prompts iniciais, com viés para os capítulos que seu arquivo diz que estão menos cobertos, alternando tom semana a semana.
    • Aniversários com 7 dias de antecedência — o cron diário detecta aniversários da sua agenda, escolhe uma anedota sua com essa pessoa, e te avisa uma semana antes com o baú pré-preenchido. Clique → editor de baús com a anedota selecionada e o título "Para seu aniversário, mãe".
    • Transcrição rioplatense — o Whisper agora recebe um prompt de vocabulário por idioma. Espanhol: vos, che, boluda, dale, mate, asado, bondi, laburo. Português: você, cara, mano, churrasco, feijoada. O modelo deixa de "normalizar" a gíria regional para um espanhol neutro.
    • Não treinar IAs — formalizamos no código e na privacy policy a promessa de não enviar seu material para treinar modelos. Os clientes de Anthropic e OpenAI ficam centralizados com os termos comerciais citados explicitamente.
    • Excluir minha conta — se você quiser, pode. Confirma digitando seu e-mail em /dashboard/profile, clica, e tudo é removido (anedotas, fotos, áudios, perfil). Sem chatbots de retenção, sem trâmites.
  6. Novo

    Sua vida numa tela, e fotos que viram lembranças

    Mapa de calor de todas as suas anedotas ao longo dos anos, mini-entrevista ao subir foto que detecta EXIF e sugere pessoas.

    Linha do tempo

    Nova rota /timeline com sua vida inteira numa tela. Mapa de calor estilo broadsheet editorial: meses no eixo vertical, anos no horizontal. Cada célula mensal brilha mais quando há mais anedotas naquele mês. Clique numa célula para abrir a anedota destacada.

    • Tom âmbar para meses difíceis. Quando um mês é dominado por anedotas marcadas como tom "difícil", a célula sai em âmbar em vez de violeta. A perda não usa a cor da celebração.
    • Marcador de "hoje" — uma linha vertical tracejada no mês atual com um ponto na fila do mês, para ancorar o olho quando você vê mais de 50 anos de uma vez.
    • Décadas chunkeadas. As divisões de década (1970 / 1980 / 1990...) recebem hairlines mais visíveis que o resto do grid — navega-se décadas sem contar colunas.
    • Halo de bloom nos picos. Meses com muitas anedotas têm um halo violeta atrás — os picos da sua vida brilham de longe.

    Sem bibliotecas de viz pesadas — só SVG + matemática.

    Mini-entrevista ao subir foto

    Quando você sobe uma foto, o chat editorial que já existia agora lê EXIF (data e coords GPS) e sugere pessoas do seu grafo (top 12 por menções, excluindo memorializadas). O LLM recebe isso como contexto e abre com perguntas concretas:

    "Isso foi em 2018? Vejo que você menciona muito sua mãe, seu irmão e a Sole — algum deles está nessa foto?"

    Em vez de:

    "Quem aparece na foto?"

    A promessa do showroom ("como uma mini-entrevista, não como um formulário") agora é real, não só aspiracional.

    Tooltip no grafo de pessoas

    Quando você passa o mouse sobre a linha entre duas pessoas no grafo (/people/graph), aparece um tooltip com os títulos das anedotas em que aparecem juntas. A linha deixa de ser só um peso numérico — é a lista concreta das histórias compartilhadas.

  7. Novo

    Modo museu: se você deixar de pagar, não perde seu corpus

    Quando você cancela sua assinatura, sua conta entra em modo museu: você lê e exporta tudo o que é seu, suas composições continuam ali. Sem perder nada.

    Os apps que dependem do seu corpus têm um problema feio: quando você deixa de pagar, te bloqueiam o acesso ao que você escreveu. Isso converte o corpus numa jaula.

    O Anecdotario funciona diferente. Se você deixar de pagar (porque não pode esse mês, porque se entediou, porque quer voltar mais adiante), sua conta entra em modo museu:

    • Você lê tudo o que é seu — anedotas, memórias, capítulos de autobiografia, os livros e filmes que já gerou.
    • Você exporta tudo em .md, .pdf, .epub. Seu material, em suas mãos, sem cadeados.
    • Continua intacto. Se você voltar em 6 meses ou em 6 anos, tudo está onde deixou.

    O que você não pode no modo museu: criar novo (anedotas, baús, composições). Mas o que já escreveu é seu, para sempre, mesmo se nunca mais nos pagar.

    Essa é a promessa: sua vida não se aluga.