Groselia

Redes sociais que se cuidam sozinhas

Meu papel

Cofundador
Engenharia
Design de produto e de marca

Descrição

A Groselia cuida das redes sociais de startups de tecnologia em primeiro lugar, e também de empresas de outros setores e tamanhos: estratégia, design, publicação, respostas a comentários e relatórios, em todos os canais, numa única plataforma.

Equipe

Danilo ParmegianiCofundador
Pedro CritchiCofundador

Contexto

Comecei a Groselia com o Pedro, num time de dois. Ele cuida de marketing, vendas e operações; eu desenhei a marca e o produto e construí a plataforma em que ela roda, do banco de dados à última animação. Enquanto era self-service, mais de 200 pessoas se cadastraram para usar, e hoje ela roda o conteúdo e as redes sociais dos nossos clientes. Em junho de 2026 captamos um pre-seed de R$100k da Link Vector, a aceleradora da Link School of Business, onde me formei, e dois meses depois da virada para serviço, a Groselia fatura mais de R$15.000 por mês.

Ferramentas

Codex
Claude Code
Figma
Adobe tools

Stack

  • React
  • Next.js
  • TypeScript
  • Tailwind
  • Supabase
  • Frontier LLMs
  • Trigger.dev
  • Stripe
  • Vercel

Linha do tempo

2025–hoje

Em números

R$180k+
run rate anual
200+
contas criadas
350
marcas configuradas
9,700+
commits
520+
pull requests
47
edge functions

Desafio

Construir deixou de ser o gargalo. Ser visto virou o gargalo.

A IA derrubou o custo de fazer software. Um fundador sem nenhuma formação em engenharia consegue lançar um produto num fim de semana, e todo mundo também. O que não ficou mais barato foi fazer alguém notar. Distribuição é uma operação contínua, não uma tarefa: postar todo dia, em oito redes que querem cada uma um formato diferente, responder cada comentário e ler números que cada app reporta de um jeito.

As startups pagam por isso de uma de três formas. Contratam um time que ainda não podem pagar, juntam uma dúzia de ferramentas que resolvem cada uma um pedaço, ou não postam nada e pagam com crescimento. A Groselia existe para ser a quarta opção.

Como chegou aqui

A Groselia mudou de forma quatro vezes antes de descobrir o que é. Cada virada manteve o que funcionava e largou o resto.

  1. Fim de 2025 – fev. 2026

    Argibee

    Uma plataforma de design de marca com IA. Começou como protótipo no fim de 2025 e virou uma empresa de verdade em fevereiro de 2026. Não encontrou seu mercado, mas o motor de brand kit dela virou a espinha dorsal de tudo o que veio depois.

  2. abr. 2026

    Vídeos em motion

    A Groselia começou fazendo vídeos de lançamento no estilo da Apple a partir de templates do After Effects. Validei o pipeline inteiro na mão, e aí vi que ele não escalava no nível de qualidade que queríamos.

  3. jun. 2026

    Pre-seed da Link Vector

    Entramos na Startup School da Link School of Business, um programa de 100 dias para fundadores gravado como reality show (assista à temporada). Ele terminou com um demo day em que apresentei a Groselia no palco, e com o nosso pre-seed de R$100k da Link Vector, a aceleradora da Link School of Business, onde me formei.

    Meu pitch no demo day
  4. ago. 2026

    Lovable para marketing

    Uma conversa no lugar de um formulário: descreva a campanha e a Groselia planeja, escreve e publica. Um agente de chat com ferramentas, não um elenco de bots.

  5. set. 2026

    Uma social media

    Os clientes não queriam que a IA fizesse o conteúdo deles. Queriam as próprias fotos bem postadas e os comentários respondidos. Cortamos a geração e fomos fundo em cuidar dos canais.

  6. Hoje

    Service as a software

    Vendemos o trabalho, não a ferramenta. Nosso time cuida das redes sociais de cada cliente na plataforma, o que faz uma pessoa conseguir tocar o que antes exigia uma agência.

Construída em público

Construímos em público desde o começo. Quando ainda era Argibee, compartilhamos a jornada no YouTube, do lançamento da lista de espera da Argibee até o primeiro vídeo em que mostramos a Groselia. O resto da história, vídeo a vídeo, está no nosso canal.

O lançamento da lista de espera da Argibee
O primeiro vídeo mostrando a Groselia

Marca

Eu queria que a marca da Groselia fosse ousada: algo que faz as pessoas pararem para olhar, no site, no app e em cada post das nossas redes. Onde quer que alguém a encontre, ela tem que impressionar, arrancar um pouco de admiração e dar vontade de nos contratar pelo que a pessoa acabou de ver. Acima de tudo, ela tinha que ficar incrível para startups de tecnologia, o ecossistema do qual fazemos parte e os primeiros clientes para quem construímos.

Desenhei a marca inteira usando o plugin do Figma dentro do Codex: o logo, a tipografia e como ela se encaixa com o símbolo nas proporções certas, as imagens, a biblioteca de ícones em SVG, os estilos de texto e uma paleta de cores organizada. Cada decisão foi para um único board, medida, para poder ser comparada e discutida.

O Codex ao lado do arquivo da Groselia no Figma: o sistema de logo, o logo em cada cor de fundo, o símbolo em toda a paleta e a paleta de cores
Os boards da marca, feitos no Figma com o plugin do Figma dentro do Codex.

O símbolo

O símbolo veio primeiro e ficou. Três pétalas suaves girando em torno de um centro: ele veio desde a primeiríssima versão da empresa, e o novo logo foi construído em volta dele, não por cima: a geometria foi copiada e escalada, nunca redesenhada.

O logotipo

O logotipo usa TT Commons Pro Bold, em minúsculas, convertido em vetores para renderizar igual em qualquer lugar. No espaçamento natural ele parecia solto ao lado do símbolo, então apertei para −4% de tracking, movendo cada letra 6,4 unidades a mais para a esquerda em 160px. Parece pouco; levou a palavra de 564 para 520 unidades de largura e fez ela ser lida como uma forma só.

Um grid de H

Tudo é medido em H, a altura visível do logotipo, num grid de H/10. Assim o logo escala sem ninguém precisar acertar no olho de novo.

Para o logo empilhado desenhei seis opções, três tamanhos de símbolo (1,50H, 1,75H, 2,00H) contra dois espaçamentos (0,15H, 0,25H), e escolhemos B: símbolo de 1,75H, 0,15H acima da palavra. Para o horizontal comparei espaçamentos de 0,20H a 0,35H e fechei em símbolo de 1,10H com espaçamento de 0,35H.

1.75H0.15HH

O logo empilhado no grid de construção. H é a altura do logotipo; o grid é H/10.

Logo horizontal da Groselia

Horizontal

Símbolo 1,10H · espaço 0,35H

Logo empilhado da Groselia

Empilhado

Símbolo 1,75H · espaço 0,15H

Logo símbolo da Groselia

Símbolo

Proporção original, 0,93 : 1

Colour

The palette is fifteen colours, loud on purpose. But the logo only ever comes in four treatments: blue symbol with black text, blue with white, all black and all white. The other colours are grounds, never the symbol.

To prove that, I put the symbol and both lockups on twelve backgrounds, 24 studies each, and kept the ones where its silhouette survives. On blue grounds the symbol goes monochrome. Click a colour to copy it.

Tipografia

A TT Commons Pro dá conta de tudo: seis pesos, do Light ao ExtraBold, uma escala de onze passos de 12 a 96px e itálicos de verdade. Migrei as 688 camadas de texto do arquivo para ela, então o brand book, o app e o site agora falam com uma voz só.

Fonte principal

TT Commons
Pro

TT Commons ProDisplay · 01
→Groselia@
Reels → Posts
Nº 128⅝ e

Ícone do app

O ícone do app é o único lugar onde a marca vira 3D: o símbolo em porcelana, em camadas, iluminado de cima e com um leve brilho. Numa atualização posterior diminuí o símbolo dentro dele em 10% para ele respirar no quadrado. Ele também tem o próprio lockup com o logotipo, o ícone em 1,5H.

Ícone do app da Groselia

Um mundo de objetos 3D

Em volta do logo vive um elenco de objetos 3D: um coração com olhinhos esbugalhados, balões de chat, uma hashtag, brilhos. Eles são a voz da marca no site e nos nossos posts, e nunca ficam parados: flutuam e, no site, reagem ao cursor. Estes aqui também: empurre, ou puxe um para trás e solte.

Neo doodles

Para tudo o que é chapado existe o Neo, nosso conjunto de ícones: contornos pretos grossos, preenchimentos da paleta e um brilho branco. No site, cada um começa como um ícone de linha simples num chip branco e vira o doodle quando você passa o mouse, com as partes chegando uma de cada vez: o disco salta, as barras caem, o brilho se desenha. Estes são os doodles e a animação do próprio site, copiados do jeito que são. Passe o mouse em um.

Conexões oficiais
Sem esforço
Pause quando quiser
Tudo registrado
Dados privados
Saia quando quiser
Respostas com a sua voz
Revisão humana
Leads sinalizados
Anúncios pagos
Landing page
Redesign de produto
Rebranding
Brilho
Coração
Troféu

Produto

Tudo na Groselia é feito digitando num único chat. Você escreve o que deve sair e quando, e ela agenda, publica, responde os comentários e conta o que funcionou. O trabalho chega como um plano que o dono aprova, em vez de uma dúzia de telas para operar.

Uma conversa, não um dashboard

Como foi a semana passada?

Melhor semana desde junho.

  • O alcance subiu 38%, puxado pelo reel de latte art (41 mil views no Instagram, 64 mil no TikTok).
  • Os salvamentos dobraram no carrossel de espresso. As pessoas guardam receitas.
  • Tem comentário esperando. 14 perguntas sobre entrega e moagem, a maioria sem resposta.

O padrão é claro: vídeo entre 17h e 19h, fotos de manhã. Eu seguiria isso nas próximas duas semanas.

há 2 dias

Bom dia! Duas coisas precisam de você esta semana:

  • A safra de Carmo de Minas chega às prateleiras na sexta, e ainda não tem nada planejado.
  • 14 perguntas estão esperando nos seus posts, a maioria sobre entrega.

Por onde você quer começar?

Escolha uma
há 8 minutos

A Groselia começou como um formulário: escolha um objetivo, preencha os campos, receba uma campanha. Ninguém quer preencher formulário sobre o próprio negócio, então agora cada marca tem uma conversa no lugar.

Você abre sua marca e digita. Pergunte o que postar esta semana, mande fotos do celular, ou escreva “responda os comentários de ontem”. O agente olha antes de responder: seu calendário, o que performou, a memória da marca.

Quando precisa de algo de você, ele faz uma rodada curta de perguntas que você responde com um toque. Depois propõe um plano: os posts com datas e horários, as respostas, qualquer mudança. Você edita o que quiser, aprova e vê o calendário se preencher.

O card aqui é o chat de verdade, refeito no navegador com os próprios tokens do app. Pode usar.

Desenhado duas vezes: para donos de negócio, depois para nós

O primeiro público eram donos de pequenos negócios que cuidam das próprias redes sociais. Eles não pensam em campanhas, funis ou cadência de postagem; pensam “o que eu posto esta semana?”. Então a parte difícil foi esconder a engrenagem: onboarding em quatro perguntas, um brand kit preenchido a partir de um link, um calendário que dá para arrastar, cada tela em dezessete idiomas e usável no celular.

Depois aprendemos que os clientes não queriam operar ferramenta nenhuma, por mais simples que fosse. Queriam o trabalho feito. Então nós viramos os principais usuários. Uma pessoa do nosso time cuida de várias marcas, e o mesmo app teve que ganhar workspaces multimarca, ciclos que abrem com uma reunião e fecham com um relatório, uma etapa de aprovação em cada post e uma única caixa de entrada para todas as redes. Os clientes ainda entram, mas agora o app é onde eles acompanham o trabalho, não onde fazem.

novembro de 2026

Seg
103
Ter
113
Qua
123
Qui
133
Sex
143
Sáb
152
Dom
162
8:00

Por que pagamos 40% acima do mercado

Importado
6
Nova safra
49:00

Nova safra: Carmo de Minas

Publicado
5
Bastidores
17:30

POV: primeiro turno na torrefação

Publicado
Receitas
9:00

Como regulamos o espresso

Publicado
12:00

Opinião impopular sobre torra escura

Publicado
Falhou
Bastidores
1218:00

Avaliando os pedidos dos clientes fiéis

Publicado
8:30

Hora do croissant

Agendado
3
Vagas
11:00

Conheça a Ana, nossa head barista

Manual
ReceitasNova safra+1
17:00

Latte art em câmera lenta

Agendado
9:00

No que 1 kg de café verde se transforma

Agendado
7
Bastidores
11:00

Por dentro da torrefação, do início ao fim

Agendado
Receitas
18:30

Cold brew em 60 segundos

Rascunho
Falta vídeo
Nova safraPromoção
9:00

A nova safra chegou às prateleiras

Agendado
Rascunho
Vagas
10:00

Estamos contratando um mestre de torra

Agendado
17:00

Iced latte, do início ao fim

Rascunho
Promoção
10:00

Sua mesa de sábado

Agendado
15:00

Chegou a temporada do espresso tônica

Rascunho
Receitas
11:00

O guia do coado em 4 minutos

Agendado
Promoção
18:00

Conheça a embalagem da Oakline

Rascunho
4

Feita para ser lida por agentes

Cada vez mais, o primeiro leitor de uma marca ou de uma página é uma IA. Por isso tudo na Groselia é escrito tanto para agentes quanto para pessoas. A memória de uma marca é um conjunto de documentos Markdown simples, preferências, o que fazer e o que evitar, fatos da marca, que o agente lê antes de cada resposta e edita sozinho com quatro ferramentas, do jeito que assistentes de IA mantêm a própria memória. As pessoas abrem e editam esses mesmos documentos no brand kit.

O Insights passa por um único núcleo compartilhado que o dashboard e o agente leem, então quando você pergunta “o que está funcionando?”, a resposta vem dos números que você vê. E o site faz o mesmo pelos assistentes a quem as pessoas perguntam sobre nós: groselia.com serve um llms.txt, um llms-full.txt mais longo e um arquivo de comparação, todos gerados a partir de uma única fonte de fatos no código, então o que uma IA diz sobre nossos preços ou nossa segurança não tem como se desviar do site.

Engajamento ao longo do tempo

Por semana, últimos 30 dias, por data de publicação

Taxa de eng.7,69%

Principais recursos

  • Um brand kit a partir de um link

    Cole um site e conecte suas contas. A Groselia lê o site, analisa seus posts anteriores e preenche sozinha logo, cores, fontes, voz e público.

  • Uma conversa

    Um agente de IA com 41 ferramentas escreve legendas para as suas mídias, escolhe horários a partir dos seus próprios dados de engajamento, lê métricas e rascunha respostas, e depois junta tudo num plano.

  • Um calendário para oito redes

    Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads e Reddit, cada uma no formato nativo, com os posts antigos importados para o calendário nunca ficar vazio.

  • Todo comentário respondido

    Comentários e DMs de todas as redes numa única caixa de entrada, com respostas rascunhadas na voz da marca e qualquer coisa sensível guardada para uma pessoa.

  • Insights em linguagem simples

    Alcance, visualizações e engajamento em todas as contas, com honestidade sobre o que cada plataforma reporta ou não, e uma resposta para “o que está funcionando?”.

  • Ciclos e aprovações

    O trabalho roda em ciclos. Cada um abre com uma reunião e fecha com um relatório que a IA escreve a partir dos números, e cada post pode esperar a aprovação do cliente.

Construída com agentes de IA

Construí a Groselia com agentes de IA como meu time de engenharia. O Codex e o Claude Code escreveram o código, cada mudança na sua própria branch, enquanto eu desenhava, revisava cada pull request e decidia o que ia para produção.

E falei a maioria dos meus prompts em vez de digitar, com o Wispr Flow. Um bom prompt é um briefing longo e detalhado, e falando eu conseguia passar um na velocidade em que pensava.

  • Codex

    Agente de código

  • Claude Code

    Agente de código

  • Wispr Flow

    Ditado por voz

Site

O site é onde a marca fala alto. Desenhei e construí em Next.js. Ele está em dezessete idiomas e passa o idioma de cada visitante para o app quando a pessoa se cadastra.

Um hero para brincar

O logo gira enquanto a página carrega, e depois vem o hero: objetos 3D que flutuam, se inclinam com o mouse e são empurrados pelo cursor, e uma cena de scroll que termina em “Feito para você”.

groselia.com
O hero de groselia.com: “We run your socials. You run your business.”, com os objetos 3D em volta do coração

O app de verdade, refeito

“Inside your Groselia” mostra a plataforma como ela é, refeita em código a partir das telas do próprio app, com uma marca de demonstração.

groselia.com
“Inside your Groselia”: a tela de conexão de canais da plataforma

Um blog

Notas sobre cuidar de redes sociais. Os posts são arquivos MDX simples, um por idioma, sem CMS, e cada um tem o próprio feed e dados estruturados para buscadores e assistentes de IA lerem direito.

groselia.com
O blog de groselia.com, com o primeiro post aceso sob o cursor e mais posts abaixo

Um formulário que qualifica leads

Todo “Agendar uma conversa” abre um formulário curto antes da agenda: quem você é, onde você posta, do que precisa e seu orçamento. Cada etapa é salva no nosso banco conforme você avança, então vemos até respostas pela metade, e um formulário completo avisa nosso time no Slack.

groselia.com
A página de agendamento: “Let's talk about your social media.”, com o formulário ao lado das três etapas

Responsivo, sempre

Cada página é desenhada também para celular, não só encolhida para caber. Onde não tem hover, as seções acordam quando chegam ao meio da tela.

A home num celular
“Always in sync with your team” num celular, com o primeiro card acordado
O formulário de agendamento num celular, na etapa que pergunta do que você precisa e seu orçamento mensal

Engenharia

Arquitetura

Construí a plataforma eu mesmo, com a IA como dupla. O app é React e Vite, a landing é Next.js, e os dois ficam num único projeto Supabase: Postgres com row-level security, auth, realtime e storage, e 47 edge functions. Tudo o que é lento ou agendado roda no Trigger.dev, as redes sociais passam por uma única API de publicação, e o Stripe cuida de planos, cartões e boleto.

Tem também um servidor MCP e um plugin do Codex, para a Groselia poder ser usada de dentro de um agente de IA: as mesmas marcas, posts e rascunhos, como ferramentas.

Onde é usado

O núcleo

Supabase

Por trás

O app, o site e o servidor MCP ficam hospedados na Vercel.

Passe o mouse ou toque numa caixa para ver o que ela faz e com quem conversa.

O caminho de um post

O melhor jeito de ver como as partes se encaixam é seguir um post, de uma frase no chat até os números dele no Insights. Clique pelos passos, ou deixe rodar.

Web app

O dono pede

“Posta as fotos da safra na sexta, no Instagram e no LinkedIn.” A mensagem vai para a edge function do agente, que devolve a resposta em streaming.

ReactStream SSE

O agente

O agente roda nos melhores modelos do mercado, da Anthropic, da OpenAI e de outros provedores, como uma edge function com streaming e um loop de ferramentas. O modelo recebe 41 ferramentas próprias, além de busca e leitura na web, com até oito passos por turno. A parte difícil nunca foi o modelo. Foi garantir que o agente sempre saiba o que é verdade agora.

Então, a cada turno, antes de o modelo ver a mensagem, a função reconstrói o contexto a partir do banco: a data e a hora no fuso do dono, os documentos de memória da marca, o calendário ao vivo, os planos abertos, os documentos enviados e um resumo contínuo das mensagens mais antigas. A parte estável do prompt fica em cache por uma hora; esta parte nunca vai para o cache, então não tem como ficar desatualizada.

Duas regras moldaram o resto. Tudo o que é público ou irreversível vai para um plano que o dono aprova, nunca direto. E um post só existe se uma ferramenta o criou neste turno, o que acabou com a época em que o agente descrevia um trabalho que não tinha feito. E o agente não está preso a um modelo: quando um menor e mais barato ficou bom o bastante, passei o chat para ele, para cortar o custo por conversa.

Contexto, refeito a cada turno

Instruções e ferramentasem cache por uma hora
Data e horao fuso horário do dono
Documentos de memóriapreferências, o que fazer e o que evitar
Calendário ao vivocada post e o status dele
Planos abertospropostos e aprovados
A história até aquium resumo contínuo
→O LLMModelos de ponta · até 8 passos→

Chamadas de ferramentas

✓get_posting_times
✓get_insights
✓propose_plan

Plano aguardando aprovação

Semana da safra: 3 posts, 4 respostas

O agente montando o próprio contexto
// Volatile block: time + memory + live calendar + active plans + rolling summary.
// Rebuilt each turn (never cached) so the agent always sees current state.
const volatileSystem = () => {
  const parts = [
    nowBlock,
    renderMemories(memories),
    renderCalendar(calendar, todayISO),
    renderPlans(plans),
  ]
  if (documents.length) parts.push(renderDocuments(documents))
  if (rollingSummary) parts.push(`STORY SO FAR (summary of earlier messages in THIS conversation):\n${rollingSummary}`)
  // … then a line for each of the brand's other conversations
  return parts.join('\n\n')
}

Modelo de dados

Umas 55 tabelas, em poucos grupos claros. Um workspace tem membros e marcas; todo o resto pendura na marca, então a row-level security responde uma única pergunta em todo lugar: essa pessoa é membro dessa marca?

Quem

  • Workspaces
  • Membros
  • Papéis na marca
  • Perfis

A marca

  • Marcas
  • Cores, fontes, logos
  • Produtos e pessoas
  • Documentos de memória
  • Documentos da marca

Chat

  • Conversas
  • Mensagens
  • Planos
  • Itens do plano

O calendário

  • Posts
  • Um por rede
  • Métricas dos posts
  • Comentários dos posts

Canais

  • Contas conectadas
  • Métricas diárias das contas
  • Configurações dos canais

Caixa de entrada e ciclos

  • Threads da caixa de entrada
  • Mensagens da caixa de entrada
  • Rascunhos de resposta
  • Ciclos
  • Relatórios de ciclo

Tudo abaixo de “Quem” carrega um brand id; a row-level security confere isso em toda leitura e escrita.

Confiabilidade e segurança

A Groselia publica em contas reais, então as falhas caras são um post saindo duas vezes, ou um post que silenciosamente nunca sai. A maior parte da engenharia está aí.

1Aprovar duas vezes roda uma vez

O executor de planos reivindica o plano, e depois cada item, com um update condicional, e toda chave de idempotência vem do próprio id do item. Um clique duplo ou uma nova tentativa repete a execução em vez de postar de novo.

2Webhooks assinados e reprocessados

Toda entrega da API de publicação precisa ter uma assinatura HMAC válida. Os handlers são idempotentes porque as entregas podem chegar mais de uma vez, e um job reprocessa qualquer evento perdido a cada dez minutos.

3Recusar antes de enfileirar

Um único arquivo de regras compartilhado diz o que cada rede aceita (Instagram precisa de mídia, YouTube precisa de vídeo, nada de misturar no Facebook). O agendador confere isso antes de qualquer coisa entrar na fila, e um post recusado volta como Falhou, com o motivo, em vez de ficar no calendário como Agendado.

4Acesso conferido em toda chamada

Row-level security no Postgres, uma checagem de papel em cada edge function, e acesso MCP via OAuth com PKCE, com escopo por marca e por ação, revogável numa única página.

Por um tempo, meu app local e o de produção compartilhavam um único banco de produção, e uma migração que rodou antes de um deploy uma vez esvaziou a página de Brand Kits ao vivo. Desde então, o trabalho de backend acontece primeiro numa branch do Supabase e entra em produção junto com o código que precisa dele.

Qualidade e fluxo de trabalho

Cerca de 1.000 casos de teste em 140 arquivos cobrem o app, o servidor MCP e as edge functions. Algumas checagens existem porque algo quebrou uma vez: um teste de paridade quebra o build se qualquer um dos 17 idiomas estiver sem uma chave, e as suítes de banco do MCP rodam com dados sintéticos e fazem rollback no final.

O agente tem os próprios evals. Um deles faz ao agente em produção um conjunto fixo de perguntas sobre o desempenho de uma marca, cada uma numa conversa nova, e confere se ele leu o Insights com o período certo e se a resposta traz os mesmos números que a página do Insights mostra.

Uma pessoa entregou mais de 520 pull requests tratando agentes de IA como um time. Cada mudança ganha a própria branch na própria git worktree, então o Claude Code e o Codex podem trabalhar em várias coisas ao mesmo tempo sem um atropelar o outro. Cada um roda os testes e o type check, abre um pull request pequeno, e nada é mergeado antes de eu ler.

Uma mudança→A própria worktree→Claude Code ou Codex→Testes e tipos→Um PR pequeno→A minha revisão→Merge e deploy

Desafios técnicos

Cada um parecia um bug na interface e acabou sendo algo mais profundo: o formato de um stream, um timestamp, o que uma rede realmente reporta, um relógio.

Fazer a geração parecer ao vivo · Realtime

Gerar um mês de posts era um spinner e depois doze posts aparecendo de uma vez. Parecia lento, mas o problema não era o modelo. Era a granularidade.

Mudei a saída do modelo para JSON Lines e passei a fazer streaming, inserindo cada post no momento em que a linha dele fechava. O calendário escuta as mudanças do Postgres pelo Supabase Realtime e desenha os placeholders primeiro, então os posts vão se escrevendo um a um.

A mesma espera agora parece ver alguém trabalhando.

Dois timestamps que nunca batiam · Dados

O Supabase avisou que o banco estava prestes a ficar sem disk IO. As leituras estavam ok. Alguma coisa estava reescrevendo as mesmas linhas: 344 mil inserts para guardar 83 mil mensagens.

A sincronização da caixa de entrada comparava o timestamp que salvava com o que lia de volta. O Postgres devolvia como +00:00 e nós gravávamos como Z, então toda conversa parecia alterada e toda varredura baixava de novo. Comparar instantes em vez de strings resolveu.

Comparando dois timestamps
export function sameInstant(a: string | null | undefined, b: string | null | undefined): boolean {
  if (a == null && b == null) return true;
  if (a == null || b == null) return false;
  if (a === b) return true;
  const ta = Date.parse(a);
  const tb = Date.parse(b);
  return Number.isFinite(ta) && Number.isFinite(tb) && ta === tb;
}

Inserts para guardar 83 mil mensagens

344 mil→um por mensagem nova

Conversas relidas a cada varredura

todas→só as alteradas

As escritas repetidas pararam, e históricos de caixa de entrada que nunca terminavam sincronizaram pela primeira vez.

Um zero nem sempre é zero · Analytics

Nosso provedor de analytics devolve o mesmo formato para todas as redes e preenche com 0 tudo o que uma rede não reporta. O Instagram “tinha” zero cliques em todo post. Os gráficos mentiam educadamente.

Um registro de métricas por plataforma que guarda o que cada rede realmente reporta, anula o resto na ingestão e deixa cada gráfico mostrar, degradar ou esconder uma métrica com honestidade.

Insights em oito redes que nunca mostram um número que ninguém mediu.

Deslogado por um relógio adiantado · Auth

Meu cofundador era deslogado no instante em que entrava: quinze renovações de token por segundo, depois um rate limit. Ninguém mais conseguia reproduzir.

O relógio do computador dele estava mais de uma hora adiantado, então todo token novo parecia expirado. Envolvi o armazenamento da sessão para reancorar a expiração no relógio local quando uma sessão é gravada.

Renovações de token por segundo

15→0

O login funciona com qualquer relógio de dispositivo, e o console avisa quando um está errado.

Aprendizados

Gosto é o fosso

Quando a IA deixa construir barato, todo mundo consegue lançar, e quase tudo fica com a mesma cara. O que continua escasso é julgamento: saber o que deixar de fora, como uma tela deve parecer, quando uma animação é uma a mais. Para um time de dois que não consegue gastar mais que ninguém, o gosto é o que faz a Groselia parecer e funcionar como algo muito maior, e é a única parte que eu nunca entregaria para um modelo.

Venda o resultado, não a ferramenta

Ninguém queria operar um software de marketing, por melhor que fosse. Queriam ser vistos. Vender o trabalho em vez do app fez o produto importar mais, não menos: ele virou o motor que usamos todo dia, então cada aspereza foi corrigida.

Contexto vence esperteza

O agente melhorou quando passou a saber mais, não quando o prompt ficou mais esperto. Dar a ele o calendário ao vivo, a memória e os planos abertos a cada turno, e fazê-lo perguntar antes de agir, fez mais do que qualquer upgrade de modelo.

A IA muda o tamanho do time

Com agentes escrevendo a maior parte do código em paralelo, meu trabalho passou a ser decidir o que construir, revisar cada mudança e manter a barra alta. Uma pessoa agora consegue tocar o que antes exigia um time, desde que continue sendo o editor.

Próximo projeto

Todos os projetos