Groselia

Social media che vanno da soli

Il mio ruolo

Co-founder
Ingegneria
Product e brand design

Descrizione

Groselia gestisce i social prima di tutto per le startup tech, ma anche per aziende di altri settori e dimensioni: strategia, design, pubblicazione, risposte ai commenti e report, su ogni canale, da un'unica piattaforma.

Team

Danilo ParmegianiCo-founder
Pedro CritchiCo-founder

Contesto

Ho avviato Groselia con Pedro, in due. Lui segue marketing, vendite e operations; io ho progettato il brand e il prodotto e costruito la piattaforma su cui gira, dal database all'ultima animazione. Quando era self-service si sono iscritte più di 200 persone, e oggi gestisce i contenuti e i social dei nostri clienti. A giugno 2026 abbiamo chiuso un pre-seed da R$100k con Link Vector, l'acceleratore della Link School of Business, dove mi sono laureato, e due mesi dopo il pivot verso un servizio, Groselia fattura più di R$15.000 al mese.

Strumenti

Codex
Claude Code
Figma
Adobe tools

Stack

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

Timeline

2025–oggi

In numeri

R$180k+
run rate annuo
200+
account creati
350
brand configurati
9,700+
commits
520+
pull request
47
edge function

La sfida

Costruire ha smesso di essere il collo di bottiglia. Lo è diventato farsi vedere.

L'AI ha fatto crollare il costo di creare software. Un founder senza un background da ingegnere oggi può lanciare un prodotto in un weekend, e così tutti gli altri. Quello che non è diventato più economico è farlo notare a qualcuno. La distribuzione è un'attività continua, non un compito: pubblicare ogni giorno, su otto social che vogliono ognuno un formato diverso, rispondere a ogni commento e leggere numeri che ogni app riporta in modo diverso.

Le startup lo pagano in uno di tre modi. Assumono un team che non possono ancora permettersi, mettono insieme una dozzina di strumenti che risolvono ognuno un pezzetto, oppure non pubblicano niente e lo pagano in crescita. Groselia esiste per essere la quarta opzione.

Come ci è arrivato

Groselia ha cambiato forma quattro volte prima di trovare ciò che è. Ogni svolta ha tenuto quello che funzionava e lasciato il resto.

  1. Fine 2025 – feb 2026

    Argibee

    Una piattaforma di brand design con l'AI. È nata come prototipo alla fine del 2025 ed è diventata una vera azienda a febbraio 2026. Non ha trovato il suo mercato, ma il suo motore di brand kit è diventato la spina dorsale di tutto ciò che è venuto dopo.

  2. Apr 2026

    Video in motion

    Groselia è partito come video di lancio in stile Apple, realizzati da template di After Effects. Ho validato tutta la pipeline a mano, e poi ho visto che non poteva scalare al livello di qualità che volevamo.

  3. Giu 2026

    Pre-seed da Link Vector

    Siamo entrati nella Startup School della Link School of Business, un programma di 100 giorni per founder girato come un reality (guarda la stagione). Si è chiuso con un demo day in cui ho presentato Groselia sul palco, e con il nostro pre-seed da R$100k di Link Vector, l'acceleratore della Link School of Business, dove mi sono laureato.

    Il mio pitch al demo day
  4. Ago 2026

    Il Lovable del marketing

    Una conversazione invece di un modulo: descrivi la campagna e Groselia la pianifica, la scrive e la pubblica. Un agente in chat con degli strumenti, non una squadra di bot.

  5. Set 2026

    Un social media manager

    I clienti non volevano che l'AI creasse i loro contenuti. Volevano che le loro foto venissero pubblicate bene e che i commenti avessero una risposta. Abbiamo tolto la generazione e ci siamo concentrati sulla gestione dei canali.

  6. Oggi

    Service as a software

    Vendiamo il lavoro, non lo strumento. Il nostro team gestisce i social di ogni cliente sulla piattaforma, così una sola persona può fare quello che prima richiedeva un'agenzia.

Costruito in pubblico

Abbiamo costruito in pubblico fin dall'inizio. Ai tempi di Argibee raccontavamo il percorso su YouTube, dal lancio della waitlist di Argibee al primo video in cui mostravamo Groselia. Il resto della storia, video dopo video, è sul nostro canale.

Il lancio della waitlist di Argibee
Il primo video che mostra Groselia

Brand

Volevo che il brand di Groselia fosse audace: qualcosa che faccia fermare le persone a guardare, sul sito, nell'app e in ogni post sui nostri social. Ovunque qualcuno lo incontri, deve colpirlo, guadagnarsi un po' di ammirazione e fargli venire voglia di lavorare con noi per quello che ha appena visto. Soprattutto doveva sembrare fantastico alle startup tech, l'ecosistema di cui facciamo parte e i primi clienti per cui costruiamo.

Ho progettato tutto il brand usando il plugin di Figma dentro Codex: il logo, la tipografia e come si compone con il simbolo nelle giuste proporzioni, le immagini, la libreria di icone SVG, gli stili di testo e una palette di colori ordinata. Ogni decisione finiva su un'unica board, misurata, così da poterla confrontare e discutere.

Codex accanto al file di Groselia in Figma: il sistema del logo, il logo su ogni colore di sfondo, il simbolo su tutta la palette e la palette di colori
Le board del brand, costruite in Figma con il plugin di Figma dentro Codex.

Il simbolo

Il simbolo è arrivato per primo ed è rimasto. Tre petali morbidi che ruotano attorno a un centro: viene dalla primissima versione dell'azienda, e il nuovo logo è stato costruito intorno a lui invece che sopra. La sua geometria è stata copiata e scalata, mai ridisegnata.

Il logotipo

Il logotipo è in TT Commons Pro Bold, minuscolo, convertito in vettori così da rendere uguale ovunque. Con la sua spaziatura naturale sembrava largo accanto al simbolo, così l'ho stretto a −4% di tracking spostando ogni lettera di altre 6,4 unità a sinistra a 160px. Sembra niente; la parola è passata da 564 a 520 unità di larghezza e ora si legge come una forma sola.

Una griglia in H

Tutto è misurato in H, l'altezza visibile del logotipo, su una griglia di H/10. Così il logo si scala senza che nessuno debba riaggiustarlo a occhio.

Per il logo verticale ho disegnato sei opzioni, tre dimensioni del simbolo (1,50H, 1,75H, 2,00H) per due spaziature (0,15H, 0,25H), e abbiamo scelto B: un simbolo da 1,75H, 0,15H sopra la parola. Per quello orizzontale ho confrontato spaziature da 0,20H a 0,35H e ho scelto un simbolo da 1,10H con una spaziatura di 0,35H.

1.75H0.15HH

Il logo verticale sulla sua griglia di costruzione. H è l'altezza del logotipo; la griglia è H/10.

Logo Groselia orizzontale

Orizzontale

Simbolo 1,10H · spaziatura 0,35H

Logo Groselia verticale

Verticale

Simbolo 1,75H · spaziatura 0,15H

Logo Groselia simbolo

Simbolo

Proporzioni originali, 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

TT Commons Pro fa tutto: sei pesi da Light a ExtraBold, una scala di undici passi da 12 a 96px e veri corsivi. Ci ho migrato tutti i 688 livelli di testo del file, così brand book, app e sito ora parlano con una sola voce.

Font principale

TT Commons
Pro

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

Icona dell'app

L'icona dell'app è l'unico posto in cui il brand diventa 3D: il simbolo in porcellana, a strati, illuminato dall'alto e un po' lucido. In un restyling successivo ho ridotto il simbolo del 10% al suo interno, così respira nel suo riquadro. Ha anche un suo lockup con il logotipo, con il riquadro a 1,5H.

Icona dell'app Groselia

Un mondo di oggetti 3D

Intorno al logo vive una compagnia di oggetti 3D: un cuore con gli occhi ballerini, nuvolette di chat, un hashtag, scintille. Sono la voce del brand sul sito e nei nostri post, e non stanno mai fermi: fluttuano, e sul sito reagiscono al cursore. Anche questi: spingili, oppure tirane uno indietro e lascialo andare.

Neo doodles

Per tutto ciò che è flat c'è Neo, il nostro set di icone: contorni neri spessi, riempimenti dalla palette e un solo riflesso bianco. Sul sito ognuna parte come una semplice icona lineare in un bollino bianco, e si trasforma nel suo doodle al passaggio del mouse, con i pezzi che arrivano uno alla volta: il disco spunta, le barre cadono, il riflesso si disegna. Sono i doodle e l'animazione del sito, copiati così come sono. Passaci sopra.

Connessioni ufficiali
Zero sbattimenti
Metti in pausa quando vuoi
Tutto registrato
I dati restano privati
Vai via quando vuoi
Risposte con la tua voce
Revisione umana
Lead segnalati
Pubblicità a pagamento
Landing page
Redesign del prodotto
Rebranding
Scintilla
Cuore
Trofeo

Prodotto

In Groselia tutto si fa scrivendo in un'unica chat. Scrivi cosa deve uscire e quando, e lui lo programma, lo pubblica, risponde ai commenti e ti dice cosa ha funzionato. Il lavoro arriva come un unico piano che il proprietario approva, invece di una dozzina di schermate da gestire.

Una conversazione, non una dashboard

Com'è andata la settimana scorsa?

La settimana migliore da giugno.

  • La copertura è salita del 38%, trainata dal reel di latte art (41K visualizzazioni su Instagram, 64K su TikTok).
  • I salvataggi sono raddoppiati sul carosello dell'espresso. La gente si tiene le ricette.
  • Ci sono commenti in attesa. 14 domande su consegna e macinatura, quasi tutte senza risposta.

Lo schema è chiaro: video tra le 17 e le 19, foto al mattino. Lo seguirei per le prossime due settimane.

2 giorni fa

Buongiorno! Questa settimana ci sono due cose per te:

  • Il raccolto Carmo de Minas arriva sugli scaffali venerdì, e non c'è ancora niente in programma.
  • 14 domande aspettano sotto i tuoi post, soprattutto sulla consegna.

Da dove vuoi iniziare?

Scegline una
8 minuti fa

Groselia è nato come un modulo: scegli un obiettivo, compila i campi, ottieni una campagna. Nessuno vuole compilare moduli sulla propria attività, quindi ora ogni brand ha invece un'unica conversazione.

Apri il tuo brand e scrivi. Chiedi cosa pubblicare questa settimana, carica foto dal telefono o scrivi “rispondi ai commenti di ieri”. L'agente guarda prima di rispondere: il tuo calendario, cosa ha funzionato, la memoria del brand.

Quando ha bisogno di qualcosa da te, fa un breve giro di domande a cui rispondi con un tocco. Poi propone un unico piano: i post con date e orari, le risposte, eventuali modifiche. Modifichi quello che vuoi, approvi e guardi il calendario riempirsi.

La card qui è la vera chat, ricostruita nel browser con i token dell'app stessa. Prova pure a usarla.

Progettato due volte: per i proprietari, poi per noi

Il primo pubblico erano i titolari di piccole attività che gestiscono da soli i propri social. Non pensano in termini di campagne, funnel o frequenze di pubblicazione; pensano “cosa pubblico questa settimana?”. Quindi la parte difficile era nascondere il meccanismo: un onboarding in quattro domande, un brand kit compilato da un link, un calendario con il drag and drop, ogni schermata in diciassette lingue e usabile da telefono.

Poi abbiamo capito che i clienti non volevano gestire nessuno strumento, per quanto semplice. Volevano il lavoro fatto. Così siamo diventati noi gli utenti principali. Una persona del nostro team gestisce molti brand, e la stessa app ha dovuto crescere con workspace multi-brand, cicli che si aprono con una riunione e si chiudono con un report, un passaggio di approvazione su ogni post e un'unica posta in arrivo per tutti i social. I clienti accedono ancora, ma ora l'app è dove guardano il lavoro, non dove lo fanno.

novembre 2026

Lun
103
Mar
113
Mer
123
Gio
133
Ven
143
Sab
152
Dom
162
8:00

Perché paghiamo il 40% sopra il mercato

Importato
6
Nuovo raccolto
49:00

Nuovo raccolto: Carmo de Minas

Pubblicato
5
Dietro le quinte
17:30

POV: primo turno in torrefazione

Pubblicato
Ricette
9:00

Come regoliamo l'espresso

Pubblicato
12:00

Opinione impopolare sulla tostatura scura

Pubblicato
Non riuscito
Dietro le quinte
1218:00

Diamo un voto alle ordinazioni dei clienti abituali

Pubblicato
8:30

L'ora del croissant

Programmato
3
Assunzioni
11:00

Vi presentiamo Ana, la nostra head barista

A mano
RicetteNuovo raccolto+1
17:00

Latte art al rallentatore

Programmato
9:00

Cosa diventa 1 kg di caffè verde

Programmato
7
Dietro le quinte
11:00

Dentro la torrefazione, dall'inizio alla fine

Programmato
Ricette
18:30

Cold brew in 60 secondi

Bozza
Manca il video
Nuovo raccoltoPromo
9:00

Il nuovo raccolto è sullo scaffale

Programmato
Bozza
Assunzioni
10:00

Cerchiamo un head roaster

Programmato
17:00

Iced latte, dall'inizio alla fine

Bozza
Promo
10:00

Il tuo tavolo del sabato

Programmato
15:00

È arrivata la stagione dell'espresso tonic

Bozza
Ricette
11:00

La guida al pour-over in 4 minuti

Programmato
Promo
18:00

Vi presentiamo il sacchetto Oakline

Bozza
4

Fatto per essere letto dagli agenti

Sempre più spesso il primo lettore di un brand o di una pagina web è un'AI. Quindi in Groselia tutto è scritto tanto per gli agenti quanto per le persone. La memoria di un brand è un insieme di semplici documenti Markdown, preferenze, cose da fare e da evitare, fatti sul brand, che l'agente legge prima di ogni risposta e modifica da solo con quattro strumenti, come gli assistenti AI gestiscono la propria memoria. Le persone aprono e modificano gli stessi identici documenti nel brand kit.

Gli Insights passano da un unico nucleo condiviso che leggono sia la dashboard sia l'agente, così quando chiedi “cosa sta funzionando?”, la risposta viene dai numeri che vedi. E il sito fa lo stesso per gli assistenti a cui le persone chiedono di noi: groselia.com serve un llms.txt, un llms-full.txt più lungo e un file di confronto, tutti generati da un'unica fonte di fatti nel codice, così quello che un'AI dice dei nostri prezzi o della nostra sicurezza non può allontanarsi dal sito.

Engagement nel tempo

Per settimana, ultimi 30 giorni, per data di pubblicazione

Tasso eng.7,69%

Funzionalità principali

  • Un brand kit da un link

    Incolla un sito web e collega i tuoi account. Groselia analizza il sito, legge i tuoi post passati e compila da solo logo, colori, font, tono e pubblico.

  • Un'unica conversazione

    Un agente AI con 41 strumenti scrive le didascalie dei tuoi media, sceglie gli orari in base ai tuoi dati di coinvolgimento, legge le metriche e prepara le risposte, poi mette tutto insieme in un piano.

  • Un calendario per otto social

    Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads e Reddit, ognuno nel suo formato nativo, con i post passati importati così il calendario non è mai vuoto.

  • Ogni commento ha una risposta

    Commenti e DM da tutti i social in un'unica posta in arrivo, con risposte preparate con la voce del brand e tutto ciò che è delicato lasciato a una persona.

  • Insights in parole semplici

    Copertura, visualizzazioni e coinvolgimento su tutti gli account, onesti su cosa ogni piattaforma riporta e cosa no, e una risposta a “cosa sta funzionando?”.

  • Cicli e approvazioni

    Il lavoro procede a cicli. Ognuno si apre con una riunione, si chiude con un report che l'AI scrive partendo dai numeri, e ogni post può aspettare l'approvazione del cliente.

Costruito con agenti AI

Ho costruito Groselia con degli agenti AI come team di ingegneria. Codex e Claude Code scrivevano il codice, ogni modifica sul suo branch, mentre io lo progettavo, revisionavo ogni pull request e decidevo cosa andava in produzione.

E la maggior parte dei prompt l'ho dettata invece di scriverla, con Wispr Flow. Un buon prompt è un brief lungo e dettagliato, e parlando potevo darlo alla stessa velocità con cui lo pensavo.

  • Codex

    Agente di coding

  • Claude Code

    Agente di coding

  • Wispr Flow

    Dettatura vocale

Sito web

Il sito è dove il brand alza la voce. L'ho progettato e costruito in Next.js. È in diciassette lingue e, quando un visitatore si iscrive, passa la sua lingua all'app.

Un hero con cui giocare

Il logo gira mentre la pagina si carica, poi arriva l'hero: oggetti 3D che fluttuano, si inclinano con il mouse e vengono spinti dal cursore, e una scena allo scroll che finisce con “Made for you”.

groselia.com
L'hero di groselia.com: “We run your socials. You run your business.”, con gli oggetti 3D intorno al cuore

La vera app, ricostruita

“Inside your Groselia” mostra la piattaforma così com'è, ricostruita in codice dalle schermate dell'app stessa con un brand demo.

groselia.com
“Inside your Groselia”: la schermata di collegamento dei canali della piattaforma

Un blog

Note sulla gestione dei social. Gli articoli sono semplici file MDX, uno per lingua, senza CMS, e ognuno ha il suo feed e i suoi dati strutturati, così motori di ricerca e assistenti AI lo leggono nel modo giusto.

groselia.com
Il blog di groselia.com, con il primo articolo illuminato sotto il cursore e altri articoli sotto

Un modulo che qualifica i lead

Ogni “Book a call” apre un breve modulo prima del calendario: chi sei, dove pubblichi, di cosa hai bisogno e il tuo budget. Ogni passaggio viene salvato nel nostro database man mano, così vediamo anche le risposte a metà, e un modulo completato avvisa il nostro team su Slack.

groselia.com
La pagina di prenotazione: “Let's talk about your social media.”, con il modulo accanto ai tre passaggi

Responsive, sempre

Ogni pagina è pensata anche per il telefono, non solo rimpicciolita. Dove non c'è hover, le sezioni si attivano quando arrivano al centro dello schermo.

La homepage su un telefono
“Always in sync with your team” su un telefono, con la prima card attiva
Il modulo di prenotazione su un telefono, al passaggio che chiede di cosa hai bisogno e il budget mensile

Ingegneria

Architettura

Ho costruito la piattaforma da solo, con l'AI come compagna di lavoro. L'app è in React e Vite, la landing in Next.js, ed entrambe poggiano su un unico progetto Supabase: Postgres con row-level security, auth, realtime e storage, e 47 edge function. Tutto ciò che è lento o programmato gira su Trigger.dev, i social passano da un'unica API di pubblicazione e Stripe gestisce piani, carte e il boleto brasiliano.

C'è anche un server MCP e un plugin per Codex, così Groselia si può usare dall'interno di un agente AI: gli stessi brand, post e bozze, come strumenti.

Dove si usa

Il nucleo

Supabase

Dietro le quinte

L'app, il sito web e il server MCP sono ospitati su Vercel.

Passa sopra o tocca un riquadro per vedere cosa fa e con cosa comunica.

Il viaggio di un post

Il modo migliore per vedere come si incastrano i pezzi è seguire un post, da una frase in chat fino ai suoi numeri in Insights. Clicca sui passaggi, o lasciali scorrere.

Web app

Il proprietario chiede

“Pubblica le foto del raccolto venerdì, su Instagram e LinkedIn.” Il messaggio va all'edge function dell'agente, che restituisce la risposta in streaming.

ReactStream SSE

L'agente

L'agente gira sui migliori modelli sul mercato, di Anthropic, OpenAI e altri fornitori, come un'unica edge function in streaming con un ciclo di strumenti. Il modello ha 41 strumenti suoi più ricerca e lettura web, fino a otto passaggi per turno. La parte difficile non è mai stata il modello. Era assicurarsi che l'agente sappia sempre cosa è vero in questo momento.

Quindi a ogni turno, prima che il modello veda il messaggio, la funzione ricostruisce il contesto dal database: data e ora nel fuso orario del proprietario, i documenti di memoria del brand, il calendario in tempo reale, i piani aperti, i documenti caricati e un riassunto progressivo dei messaggi più vecchi. La parte stabile del prompt resta in cache per un'ora; questa parte non va mai in cache, così non può diventare vecchia.

Due regole hanno dato forma al resto. Tutto ciò che è pubblico o irreversibile entra in un piano che il proprietario approva, mai direttamente. E un post esiste solo se l'ha creato uno strumento in questo turno, il che ha chiuso l'epoca in cui l'agente descriveva lavoro che non aveva fatto. E l'agente non è legato a un solo modello: quando uno più piccolo ed economico è diventato abbastanza bravo, ci ho spostato la chat, per ridurre il costo per conversazione.

Il contesto, ricostruito a ogni turno

Istruzioni e strumentiin cache per un'ora
Data e orail fuso orario del proprietario
Documenti di memoriapreferenze, cose da fare e da evitare
Calendario in tempo realeogni post e il suo stato
Piani apertiproposti e approvati
La storia finoraun riassunto progressivo
→L'LLMModelli di punta · fino a 8 passaggi→

Chiamate agli strumenti

✓get_posting_times
✓get_insights
✓propose_plan

Piano in attesa di approvazione

Settimana del raccolto: 3 post, 4 risposte

L'agente che costruisce il suo contesto
// 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')
}

Modello dei dati

Circa 55 tabelle, in pochi gruppi chiari. Un workspace ha membri e brand; tutto il resto dipende dal brand, così la row-level security può rispondere ovunque a un'unica domanda: questa persona è membro di questo brand?

Chi

  • Workspace
  • Membri
  • Ruoli per brand
  • Profili

Il brand

  • Brand
  • Colori, font, loghi
  • Prodotti e persone
  • Documenti di memoria
  • Documenti del brand

Chat

  • Conversazioni
  • Messaggi
  • Piani
  • Voci del piano

Il calendario

  • Post
  • Uno per social
  • Metriche dei post
  • Commenti ai post

Canali

  • Account collegati
  • Metriche giornaliere degli account
  • Impostazioni dei canali

Posta in arrivo e cicli

  • Thread della posta in arrivo
  • Messaggi della posta in arrivo
  • Bozze di risposta
  • Cicli
  • Report dei cicli

Tutto ciò che sta sotto “Chi” porta un id del brand; la row-level security lo controlla a ogni lettura e scrittura.

Affidabilità e sicurezza

Groselia pubblica su account veri, quindi i guasti costosi sono un post che esce due volte, o un post che in silenzio non esce mai. Gran parte dell'ingegneria sta lì.

1Approvare due volte esegue una volta sola

Il plan runner prende in carico il piano, poi ogni voce, con un update condizionale, e ogni chiave di idempotenza deriva dall'id della voce stessa. Un doppio clic o un nuovo tentativo ripete invece di pubblicare di nuovo.

2Webhook firmati e riprocessati

Ogni consegna dall'API di pubblicazione deve avere una firma HMAC valida. Gli handler sono idempotenti perché le consegne possono arrivare più di una volta, e un job riprocessa ogni evento perso ogni dieci minuti.

3Rifiutare prima di mettere in coda

Un unico file di regole condiviso dice cosa accetta ogni social (Instagram vuole un media, YouTube un video, niente mix su Facebook). Lo scheduler lo controlla prima di mettere in coda qualsiasi cosa, e un post rifiutato torna come Non riuscito, con il motivo, invece di restare sul calendario come Programmato.

4Accesso controllato a ogni chiamata

Row-level security in Postgres, un controllo del ruolo in ogni edge function e accesso MCP tramite OAuth con PKCE, limitato per brand e per azione, revocabile da un'unica pagina.

Per un periodo la mia app locale e quella live condividevano un unico database di produzione, e una migrazione partita prima di un deploy una volta ha svuotato la pagina Brand Kit live. Da allora il lavoro di backend si fa prima su un branch di Supabase e va in produzione insieme al codice che ne ha bisogno.

Qualità e workflow

Circa 1.000 casi di test in 140 file coprono l'app, il server MCP e le edge function. Alcuni controlli esistono perché qualcosa una volta si è rotto: un test di parità fa fallire la build se in una delle 17 lingue manca una chiave, e le suite di database dell'MCP girano su dati sintetici e fanno rollback alla fine.

L'agente ha le sue eval. Una fa all'agente live una serie fissa di domande sulle performance di un brand, ognuna in una conversazione nuova, e verifica che abbia letto Insights sul periodo giusto e che la risposta riporti gli stessi numeri della pagina Insights.

Una sola persona ha rilasciato oltre 520 pull request trattando gli agenti AI come un team. Ogni modifica ha il suo branch nel suo git worktree, così Claude Code e Codex possono lavorare su più cose insieme senza pestarsi i piedi. Ognuno esegue i suoi test e i controlli dei tipi, apre una piccola pull request, e niente viene unito prima che l'abbia letto io.

Una modifica→Il suo worktree→Claude Code o Codex→Test e tipi→Una piccola PR→La mia review→Merge e deploy

Sfide tecniche

Ognuno sembrava un bug dell'interfaccia e si è rivelato qualcosa di più profondo: la forma di uno stream, un timestamp, cosa riporta davvero un social, un orologio.

Far sembrare viva la generazione · Realtime

Generare un mese di post significava uno spinner e poi dodici post che comparivano tutti insieme. Sembrava lento, ma il problema non era il modello. Era la granularità.

Ho passato l'output del modello a JSON Lines e l'ho messo in streaming, inserendo ogni post nel momento in cui la sua riga si chiudeva. Il calendario si iscrive alle modifiche di Postgres tramite Supabase Realtime e disegna prima dei segnaposto, così i post si scrivono da soli uno a uno.

La stessa attesa ora sembra guardare qualcuno al lavoro.

Due timestamp che non coincidevano mai · Dati

Supabase ci ha avvisato che il database stava per esaurire l'IO del disco. Le letture andavano bene. Qualcosa riscriveva sempre le stesse righe: 344k insert per salvare 83k messaggi.

La sincronizzazione della posta in arrivo confrontava il timestamp salvato con quello riletto. Postgres lo restituiva come +00:00 e noi lo scrivevamo come Z, quindi ogni conversazione sembrava modificata e ogni passata la riscaricava. Confrontare istanti invece di stringhe ha risolto.

Confrontare due timestamp
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;
}

Insert per salvare 83k messaggi

344k→uno per ogni nuovo messaggio

Conversazioni rilette a ogni passata

tutte→quelle cambiate

Le scritture inutili si sono fermate, e cronologie della posta in arrivo che non finivano mai si sono sincronizzate per la prima volta.

Uno zero non è sempre uno zero · Analytics

Il nostro fornitore di analytics restituisce lo stesso formato per ogni social e riempie con 0 tutto ciò che un social non riporta. Instagram “aveva” zero clic su ogni post. I grafici mentivano con garbo.

Un registro delle metriche per piattaforma, che annota cosa riporta davvero ogni social, imposta a null il resto in fase di ingestione e permette a ogni grafico di mostrare, ridurre o nascondere una metrica in modo onesto.

Insights su otto social che non mostrano mai un numero che nessuno ha misurato.

Disconnesso da un orologio avanti · Auth

Il mio co-founder veniva disconnesso nell'istante in cui accedeva: quindici refresh del token al secondo, poi un rate limit. Nessun altro riusciva a riprodurlo.

L'orologio del suo computer era avanti di oltre un'ora, quindi ogni token appena emesso sembrava scaduto. Ho avvolto lo storage della sessione per riancorare la scadenza all'orologio locale ogni volta che una sessione viene scritta.

Refresh del token al secondo

15→0

L'accesso funziona con qualsiasi orologio del dispositivo, e la console segnala quando è sballato.

Cosa ho imparato

Il gusto è il fossato

Quando l'AI rende economico costruire, tutti possono rilasciare, e quasi tutto si somiglia. Ciò che resta raro è il giudizio: sapere cosa lasciare fuori, che sensazione deve dare uno schermo, quando un'animazione è di troppo. Per un team di due persone che non può spendere più di nessuno, il gusto è ciò che fa sembrare e funzionare Groselia come qualcosa di molto più grande, ed è l'unica parte che non affiderei mai a un modello.

Vendere il risultato, non lo strumento

Nessuno voleva gestire un software di marketing, per quanto buono. Volevano essere visti. Vendere il lavoro invece dell'app ha reso il prodotto più importante, non meno: è diventato il motore che usiamo ogni giorno, quindi ogni spigolo è stato smussato.

Il contesto batte l'astuzia

L'agente è migliorato quando sapeva di più, non quando il prompt diventava più furbo. Dargli a ogni turno il calendario in tempo reale, la memoria e i piani aperti, e fargli chiedere prima di agire, ha fatto più di qualsiasi upgrade del modello.

L'AI cambia la dimensione del team

Con gli agenti che scrivono gran parte del codice in parallelo, il mio lavoro si è spostato su decidere cosa costruire, revisionare ogni modifica e tenere alta l'asticella. Una sola persona ora può gestire ciò che prima richiedeva un team, a patto che resti l'editor.

Progetto successivo

Tutti i progetti