Groselia

Sociala medier som sköter sig själva

Min roll

Medgrundare
Utveckling
Produkt- och varumärkesdesign

Beskrivning

Groselia sköter sociala medier för techstartups i första hand, men också för företag i andra branscher och storlekar: strategi, design, publicering, svar på kommentarer och rapportering, i varje kanal, från en enda plattform.

Team

Danilo ParmegianiMedgrundare
Pedro CritchiMedgrundare

Bakgrund

Jag startade Groselia med Pedro, bara vi två. Han sköter marknadsföring, försäljning och drift; jag designade varumärket och produkten och byggde plattformen den körs på, från databasen till den sista animationen. Medan den var självbetjänad registrerade sig fler än 200 personer för att använda den, och i dag driver den våra kunders innehåll och sociala medier. I juni 2026 tog vi in en pre-seed på R$100k från Link Vector, acceleratorn hos Link School of Business, där jag tog examen, och två månader efter pivoten till en tjänst drar Groselia in mer än R$15 000 i månaden.

Verktyg

Codex
Claude Code
Figma
Adobe tools

Stack

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

Tidslinje

2025–nu

I siffror

R$180k+
årlig run rate
200+
konton skapade
350
varumärken uppsatta
9,700+
commits
520+
pull requests
47
edge functions

Utmaning

Att bygga slutade vara flaskhalsen. Att synas blev det.

AI fick kostnaden för att göra mjukvara att rasa. En grundare utan teknisk bakgrund kan i dag skeppa en produkt på en helg, och det kan alla andra också. Det som inte blev billigare var att få någon att lägga märke till den. Distribution är ett löpande arbete, inte en uppgift: publicera varje dag, på åtta nätverk som vill ha olika format, svara på varje kommentar och läsa siffror som varje app rapporterar på sitt eget sätt.

Startups betalar för det på ett av tre sätt. De anställer ett team de inte har råd med än, de lappar ihop ett dussin verktyg som löser var sin bit, eller så publicerar de ingenting och betalar med tillväxt. Groselia finns för att vara det fjärde alternativet.

Vägen hit

Groselia bytte skepnad fyra gånger innan det hittade vad det är. Varje vändning behöll det som fungerade och släppte resten.

  1. Slutet av 2025 – feb 2026

    Argibee

    En AI-plattform för varumärkesdesign. Den började som en prototyp i slutet av 2025 och blev ett riktigt företag i februari 2026. Den hittade inte sin marknad, men dess brand kit-motor blev ryggraden i allt som kom efter.

  2. Apr 2026

    Motion-video

    Groselia började som lanseringsvideor i Apple-stil gjorda från After Effects-mallar. Jag validerade hela flödet för hand och insåg sedan att det inte gick att skala upp till kvalitetsnivån.

  3. Jun 2026

    Pre-seed från Link Vector

    Vi gick med i Link School of Business Startup School, ett 100 dagar långt program för grundare som filmades som en realityserie (se säsongen). Det avslutades med en demo day där jag pitchade Groselia på scen, och med vår pre-seed på R$100k från Link Vector, acceleratorn hos Link School of Business, där jag tog examen.

    Min pitch på demo day
  4. Aug 2026

    Lovable för marknadsföring

    En konversation i stället för ett formulär: beskriv kampanjen så planerar, skriver och publicerar Groselia den. En chattagent med verktyg, inte en samling bottar.

  5. Sep 2026

    En social media manager

    Kunderna ville inte att AI skulle skapa deras innehåll. De ville att deras egna bilder skulle publiceras snyggt och att deras kommentarer blev besvarade. Vi tog bort genereringen och gick på djupet med att sköta kanalerna.

  6. Nu

    Service as a software

    Vi säljer arbetet, inte verktyget. Vårt team sköter varje kunds sociala medier på plattformen, vilket gör att en person klarar det som förut krävde en hel byrå.

Byggt öppet

Vi byggde öppet från start. När det fortfarande hette Argibee delade vi resan på YouTube, från lanseringen av Argibees väntelista till den första videon där vi visade Groselia. Resten av historien, video för video, finns på vår kanal.

Lanseringen av Argibees väntelista
Den första videon som visar Groselia

Varumärke

Jag ville att Groselias varumärke skulle vara djärvt: något som får folk att stanna upp och titta, på webbplatsen, i appen och i varje inlägg i våra sociala medier. Var man än möter det ska det imponera, väcka lite beundran och få en att vilja anlita oss på grund av det man just såg. Framför allt skulle det se fantastiskt ut för techstartups, det ekosystem vi är en del av och de kunder vi bygger för i första hand.

Jag designade hela varumärket med Figma-pluginet i Codex: logotypen, typografin och hur den låses ihop med symbolen i rätt proportioner, bildspråket, SVG-ikonbiblioteket, textstilarna och en ordnad färgpalett. Varje beslut hamnade på en och samma tavla, uppmätt, så att det gick att jämföra och diskutera.

Codex bredvid Groselia-filen i Figma: logotypsystemet, logotypen på varje bakgrundsfärg, symbolen över paletten och färgpaletten
Varumärkestavlorna, byggda i Figma med Figma-pluginet i Codex.

Symbolen

Symbolen kom först och fick stanna. Tre mjuka kronblad som snurrar runt en mittpunkt; den följde med från företagets allra första version, och den nya logotypen byggdes runt den snarare än ovanpå: dess geometri kopierades och skalades, men ritades aldrig om.

Ordmärket

Ordmärket är satt i TT Commons Pro Bold, gemener, konverterat till vektorer så att det ser likadant ut överallt. Med sin naturliga spärrning kändes det glest bredvid symbolen, så jag stramade åt det till −4 % spärrning genom att flytta varje bokstav ytterligare 6,4 enheter åt vänster vid 160 px. Det låter som en liten sak; det tog ordet från 564 till 520 enheter brett och fick det att läsas som en enda form.

Ett rutnät av H

Allt mäts i H, ordmärkets synliga höjd, på ett rutnät av H/10. På så vis kan logotypen skalas utan att någon behöver ögonmåtta den igen.

För den staplade logotypen ritade jag sex alternativ, tre symbolstorlekar (1,50H, 1,75H, 2,00H) mot två avstånd (0,15H, 0,25H), och vi valde B: en symbol på 1,75H, 0,15H ovanför ordet. För den liggande jämförde jag avstånd från 0,20H till 0,35H och landade i en symbol på 1,10H med 0,35H avstånd.

1.75H0.15HH

Den staplade logotypen på sitt konstruktionsrutnät. H är ordmärkets höjd; rutnätet är H/10.

Groselia-logotyp, liggande

Liggande

Symbol 1,10H · avstånd 0,35H

Groselia-logotyp, staplad

Staplad

Symbol 1,75H · avstånd 0,15H

Groselia-logotyp, symbol

Symbol

Ursprungliga proportioner, 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.

Typografi

TT Commons Pro klarar alla uppgifter: sex vikter från Light till ExtraBold, en skala i elva steg från 12 till 96 px och äkta kursiver. Jag flyttade över alla 688 textlager i filen till den, så nu talar varumärkesboken, appen och webbplatsen med en och samma röst.

Primärt typsnitt

TT Commons
Pro

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

Appikon

Appikonen är det enda stället där varumärket blir 3D: symbolen i porslin, i lager, belyst ovanifrån och lite blank. I en senare uppfräschning krympte jag symbolen inuti med 10 % så att den får andas i sin ruta. Den har också en egen kombination med ordmärket, där rutan är 1,5H.

Groselias appikon

En värld av 3D-objekt

Runt logotypen bor en ensemble av 3D-objekt: ett hjärta med glosögon, pratbubblor, en hashtag, gnistor. De är varumärkets röst på webbplatsen och i våra inlägg, och de står aldrig still: de svävar, och på sajten reagerar de på muspekaren. Det gör de här också: knuffa dem, eller dra en bakåt och släpp.

Neo doodles

För allt platt finns Neo, vår ikonuppsättning: tjocka svarta konturer, fyllningar från paletten och en vit glansdetalj. På webbplatsen börjar varje ikon som en enkel linjeikon i en vit bricka och förvandlas till sin doodle när du hovrar över den, med delarna som kommer en i taget: skivan poppar upp, staplarna faller, glansen ritas fram. Det här är webbplatsens egna doodles och animationer, kopierade rakt av. Hovra över en.

Officiella anslutningar
Inget krångel
Pausa när du vill
Allt dokumenteras
Datan förblir privat
Avsluta när du vill
Svar med din röst
Mänsklig granskning
Leads flaggas
Betalda annonser
Landningssida
Ny produktdesign
Ny varumärkesidentitet
Gnista
Hjärta
Pokal

Produkt

Allt i Groselia görs genom att skriva i en enda chatt. Du skriver vad som ska ut och när, och den schemalägger, publicerar, svarar på kommentarerna och berättar vad som fungerade. Arbetet kommer som en plan som ägaren godkänner, i stället för ett dussin skärmar att hantera.

En konversation, inte en dashboard

Hur gick förra veckan?

Bästa veckan sedan juni.

  • Räckvidden ökade med 38 %, driven av latte art-reelen (41 tn visningar på Instagram, 64 tn på TikTok).
  • Antalet sparningar fördubblades på espressokarusellen. Folk sparar recept.
  • Kommentarer väntar. 14 frågor om leverans och malningsgrad, de flesta obesvarade.

Mönstret är tydligt: video mellan 17 och 19, foton på morgonen. Jag skulle följa det de kommande två veckorna.

för 2 dagar sedan

God morgon! Två saker behöver dig den här veckan:

  • Skörden från Carmo de Minas kommer ut på hyllan på fredag, och inget är planerat för den än.
  • 14 frågor väntar på dina inlägg, mest om leverans.

Var vill du börja?

Välj ett
för 8 minuter sedan

Groselia började som ett formulär: välj ett mål, fyll i fälten, få en kampanj. Ingen vill fylla i formulär om sitt eget företag, så nu har varje varumärke en konversation i stället.

Du öppnar ditt varumärke och skriver. Fråga vad du borde lägga upp den här veckan, släpp in bilder från mobilen eller skriv ”svara på gårdagens kommentarer”. Agenten tittar innan den svarar: din kalender, vad som har gått bra, varumärkets minne.

När den behöver något från dig ställer den en kort omgång frågor som du svarar på med ett tryck. Sedan föreslår den en plan: inläggen med datum och tid, svaren, eventuella ändringar. Du redigerar det du vill, godkänner och ser kalendern fyllas på.

Kortet här är den riktiga chatten, ombyggd i webbläsaren med appens egna tokens. Varsågod och testa.

Designad två gånger: för ägarna, sedan för oss

Den första målgruppen var småföretagare som sköter sina egna sociala medier. De tänker inte i kampanjer, trattar eller publiceringsrytm; de tänker ”vad ska jag lägga upp den här veckan?”. Så det svåra var att gömma maskineriet: onboarding på fyra frågor, ett brand kit som fylls i från en länk, en kalender man kan dra i, varje skärm på sjutton språk och användbar i mobilen.

Sedan insåg vi att kunderna inte ville sköta något verktyg alls, hur enkelt det än var. De ville att jobbet blev gjort. Så vi blev de främsta användarna. En person i vårt team sköter många varumärken, och samma app fick växa med arbetsytor för flera varumärken, cykler som börjar med ett möte och avslutas med en rapport, ett godkännandesteg för varje inlägg och en inkorg för alla nätverk. Kunderna loggar fortfarande in, men nu är appen platsen där de ser arbetet, inte där de gör det.

november 2026

Mån
103
Tis
113
Ons
123
Tor
133
Fre
143
Lör
152
Sön
162
8:00

Därför betalar vi 40 % över marknadspris

Importerat
6
Ny skörd
49:00

Ny skörd: Carmo de Minas

Publicerat
5
Bakom kulisserna
17:30

POV: första passet på rosteriet

Publicerat
Recept
9:00

Så ställer vi in espresson

Publicerat
12:00

Impopulär åsikt om mörkrost

Publicerat
Misslyckades
Bakom kulisserna
1218:00

Vi betygsätter stamgästernas beställningar

Publicerat
8:30

Croissantdags

Schemalagt
3
Rekrytering
11:00

Möt Ana, vår head barista

Manuellt
ReceptNy skörd+1
17:00

Latte art i slow motion

Schemalagt
9:00

Vad 1 kg rått kaffe blir

Schemalagt
7
Bakom kulisserna
11:00

Inne på rosteriet, från början till slut

Schemalagt
Recept
18:30

Cold brew på 60 sekunder

Utkast
Video saknas
Ny skördKampanj
9:00

Den nya skörden finns på hyllan

Schemalagt
Utkast
Rekrytering
10:00

Vi söker en huvudrostare

Schemalagt
17:00

Islatte, från början till slut

Utkast
Kampanj
10:00

Ditt lördagsbord

Schemalagt
15:00

Espresso tonic-säsongen är här

Utkast
Recept
11:00

Guiden till pour-over på 4 minuter

Schemalagt
Kampanj
18:00

Möt Oakline-påsen

Utkast
4

Byggd för att läsas av agenter

Allt oftare är den första läsaren av ett varumärke eller en webbsida en AI. Så allt i Groselia är skrivet lika mycket för agenter som för människor. Ett varumärkes minne är en samling vanliga Markdown-dokument, med preferenser, gör och gör inte och fakta om varumärket, som agenten läser före varje svar och redigerar själv med fyra verktyg, på samma sätt som AI-assistenter håller sitt eget minne. Människor öppnar och redigerar exakt samma dokument i brand kit.

Insights går genom en gemensam kärna som både dashboarden och agenten läser, så när du frågar ”vad fungerar?” kommer svaret från siffrorna du ser. Och webbplatsen gör samma sak för assistenterna som folk frågar om oss: groselia.com serverar en llms.txt, en längre llms-full.txt och en jämförelsefil, alla genererade från en enda faktakälla i koden, så det en AI säger om våra priser eller vår säkerhet kan inte glida isär från sajten.

Engagemang över tid

Per vecka, senaste 30 dagarna, efter publiceringsdatum

Eng.grad7,69%

Viktigaste funktionerna

  • Ett brand kit från en länk

    Klistra in en webbplats och anslut dina konton. Groselia läser in sajten, går igenom dina tidigare inlägg och fyller själv i logotyp, färger, typsnitt, röst och målgrupp.

  • En konversation

    En AI-agent med 41 verktyg skriver bildtexter till din media, väljer tider utifrån din egen engagemangsdata, läser statistik och skriver svarsutkast, och samlar sedan allt i en plan.

  • En kalender för åtta nätverk

    Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads och Reddit, var och en i sitt eget format, med tidigare inlägg importerade så att kalendern aldrig är tom.

  • Varje kommentar besvarad

    Kommentarer och DM från alla nätverk i en inkorg, med svarsutkast i varumärkets röst och allt känsligt pausat för en människa.

  • Insikter i klartext

    Räckvidd, visningar och engagemang över alla konton, ärligt om vad varje plattform rapporterar och inte rapporterar, och ett svar på ”vad fungerar?”.

  • Cykler och godkännanden

    Arbetet sker i cykler. Varje cykel börjar med ett möte, avslutas med en rapport som AI:n skriver utifrån siffrorna, och varje inlägg kan vänta på kundens godkännande.

Byggt med AI-agenter

Jag byggde Groselia med AI-agenter som mitt utvecklingsteam. Codex och Claude Code skrev koden, varje ändring på en egen branch, medan jag designade, granskade varje pull request och bestämde vad som skulle ut.

Och de flesta av mina prompter talade jag in i stället för att skriva dem, med Wispr Flow. En bra prompt är en lång, detaljerad brief, och genom att prata kunde jag ge den lika snabbt som jag tänkte den.

  • Codex

    Kodagent

  • Claude Code

    Kodagent

  • Wispr Flow

    Röstdiktering

Webbplats

Webbplatsen är där varumärket tar i som mest. Jag designade och byggde den i Next.js. Den finns på sjutton språk, och den skickar vidare varje besökares språk till appen när de registrerar sig.

En hero att leka med

Logotypen snurrar in medan sidan laddas, sedan kommer heron: 3D-rekvisita som svävar, lutar sig efter musen och knuffas runt av muspekaren, och en scrollscen som slutar i ”Made for you”.

groselia.com
Heron på groselia.com: ”We run your socials. You run your business.”, med 3D-rekvisitan runt hjärtat

Den riktiga appen, ombyggd

”Inside your Groselia” visar plattformen som den är, ombyggd i kod från appens egna skärmar med ett demovarumärke.

groselia.com
”Inside your Groselia”: plattformens skärm för kanalanslutningar

En blogg

Anteckningar om att sköta sociala medier. Inläggen är vanliga MDX-filer, en per språk, utan CMS, och varje inlägg får ett eget flöde och strukturerad data så att sökmotorer och AI-assistenter läser det rätt.

groselia.com
Bloggen på groselia.com, med det första inlägget upplyst under muspekaren och fler inlägg nedanför

Ett formulär som kvalificerar leads

Varje ”Book a call” öppnar ett kort formulär före kalendern: vem du är, var du publicerar, vad du behöver och din budget. Varje steg sparas i vår databas medan du fyller i, så vi ser även halvfärdiga svar, och ett ifyllt formulär plingar till vårt team i Slack.

groselia.com
Bokningssidan: ”Let's talk about your social media.”, med formuläret bredvid de tre stegen

Responsiv, alltid

Varje sida är designad för mobilen också, inte bara krympt för att få plats. Där det inte finns hover vaknar sektionerna när de når mitten av skärmen.

Startsidan i en mobil
”Always in sync with your team” i en mobil, med det första kortet vaket
Bokningsformuläret i en mobil, på steget som frågar vad du behöver och vad du har för månadsbudget

Utveckling

Arkitektur

Jag byggde plattformen själv, med AI som parprogrammerare. Appen är React och Vite, landningssidan är Next.js, och båda ligger på ett och samma Supabase-projekt: Postgres med row-level security, auth, realtime och storage, och 47 edge functions. Allt som är långsamt eller schemalagt körs på Trigger.dev, de sociala nätverken kommer in via ett enda publicerings-API och Stripe sköter abonnemang, kort och brasiliansk boleto.

Det finns också en MCP-server och ett Codex-plugin, så att Groselia kan användas inifrån en AI-agent: samma varumärken, inlägg och utkast, som verktyg.

Där det används

Kärnan

Supabase

Bakom det

Appen, webbplatsen och MCP-servern hostas på Vercel.

Hovra över eller tryck på en ruta för att se vad den gör och vad den pratar med.

Ett inläggs väg

Det bästa sättet att se hur delarna hänger ihop är att följa ett inlägg, från en mening i chatten till dess siffror i Insights. Klicka dig igenom stegen, eller låt dem spelas upp.

Webbapp

Ägaren frågar

”Lägg upp skördebilderna på fredag, på Instagram och LinkedIn.” Meddelandet går till agentens edge function, som strömmar tillbaka sitt svar.

ReactSSE-ström

Agenten

Agenten körs på de bästa modellerna på marknaden, från Anthropic, OpenAI och andra leverantörer, som en enda strömmande edge function med en verktygsloop. Modellen får 41 egna verktyg plus webbsökning och webbhämtning, upp till åtta steg per tur. Det svåra var aldrig modellen. Det var att se till att agenten alltid vet vad som gäller just nu.

Så vid varje tur, innan modellen ser meddelandet, bygger funktionen om kontexten från databasen: datum och tid i ägarens tidszon, varumärkets minnesdokument, live-kalendern, de öppna planerna, uppladdade dokument och en löpande sammanfattning av äldre meddelanden. Den stabila delen av prompten cachas i en timme; den här delen cachas aldrig, så den kan inte bli inaktuell.

Två regler formade resten. Allt som är offentligt eller oåterkalleligt hamnar i en plan som ägaren godkänner, aldrig direkt ut. Och ett inlägg finns bara om ett verktyg skapade det under den här turen, vilket satte stopp för tiden när agenten beskrev arbete den inte hade gjort. Agenten är inte heller låst till en modell: när en mindre och billigare blev tillräckligt bra flyttade jag chatten dit, för att sänka kostnaden per konversation.

Kontext, ombyggd varje tur

Instruktioner och verktygcachas i en timme
Datum och tidägarens tidszon
Minnesdokumentpreferenser, gör och gör inte
Live-kalendervarje inlägg och dess status
Öppna planerföreslagna och godkända
Historien hittillsen löpande sammanfattning
→LLM:enToppmodeller · upp till 8 steg→

Verktygsanrop

✓get_posting_times
✓get_insights
✓propose_plan

Plan, väntar på godkännande

Skördevecka: 3 inlägg, 4 svar

Agenten, när den bygger sin kontext
// 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')
}

Datamodell

Ungefär 55 tabeller, i några tydliga grupper. En arbetsyta har medlemmar och varumärken; allt annat hänger på varumärket, så row-level security kan besvara en och samma fråga överallt: är den här personen medlem i det här varumärket?

Vem

  • Arbetsytor
  • Medlemmar
  • Varumärkesroller
  • Profiler

Varumärket

  • Varumärken
  • Färger, typsnitt, logotyper
  • Produkter och personer
  • Minnesdokument
  • Varumärkesdokument

Chatt

  • Konversationer
  • Meddelanden
  • Planer
  • Planposter

Kalendern

  • Inlägg
  • Ett per nätverk
  • Inläggsstatistik
  • Inläggskommentarer

Kanaler

  • Anslutna konton
  • Daglig kontostatistik
  • Kanalinställningar

Inkorg och cykler

  • Inkorgstrådar
  • Inkorgsmeddelanden
  • Svarsutkast
  • Cykler
  • Cykelrapporter

Allt under ”Vem” bär ett varumärkes-id; row-level security kontrollerar det vid varje läsning och skrivning.

Tillförlitlighet och säkerhet

Groselia publicerar till riktiga konton, så de dyra felen är ett inlägg som går ut två gånger, eller ett inlägg som i tysthet aldrig går ut. Det är där det mesta av utvecklingsarbetet ligger.

1Godkänn två gånger, kör en gång

Planköraren gör anspråk på planen, och sedan på varje post, med en villkorlig uppdatering, och varje idempotensnyckel kommer från postens eget id. Ett dubbelklick eller ett nytt försök spelas upp igen i stället för att publicera en gång till.

2Webhooks signeras och spelas upp igen

Varje leverans från publicerings-API:t måste ha en giltig HMAC-signatur. Hanterarna är idempotenta eftersom leveranser kan komma mer än en gång, och ett jobb spelar upp missade händelser var tionde minut.

3Neka innan det köas

En gemensam regelfil anger vad varje nätverk accepterar (Instagram kräver media, YouTube kräver video, ingen blandning på Facebook). Schemaläggaren kontrollerar den innan något köas, och ett nekat inlägg kommer tillbaka som Misslyckades, med orsaken, i stället för att ligga kvar i kalendern som Schemalagt.

4Åtkomst kontrolleras vid varje anrop

Row-level security i Postgres, en rollkontroll i varje edge function och MCP-åtkomst via OAuth med PKCE, avgränsad per varumärke och per åtgärd, och återkallbar från en enda sida.

Under en period delade min lokala app och den skarpa en och samma produktionsdatabas, och en migrering som kördes före en deploy tömde en gång den skarpa Brand Kits-sidan. Sedan dess görs backendarbete först på en Supabase-branch och slås ihop med produktion tillsammans med koden som behöver det.

Kvalitet och arbetsflöde

Ungefär 1 000 testfall i 140 testfiler täcker appen, MCP-servern och edge functions. Vissa kontroller finns för att något gick sönder en gång: ett paritetstest stoppar bygget om något av de 17 språken saknar en nyckel, och databastesterna för MCP körs på syntetisk data och rullas tillbaka i slutet.

Agenten har egna evals. En av dem ställer en fast uppsättning frågor till den skarpa agenten om ett varumärkes resultat, var och en i en ny konversation, och kontrollerar att den läste Insights för rätt period och att svaret innehåller samma siffror som Insights-sidan visar.

En person skeppade 520+ pull requests genom att behandla AI-agenter som ett team. Varje ändring får en egen branch i ett eget git worktree, så att Claude Code och Codex kan jobba med flera saker samtidigt utan att trampa varandra på tårna. Var och en kör sina tester och typkontroller, öppnar en liten pull request, och inget mergas innan jag har läst det.

En ändring→Ett eget worktree→Claude Code eller Codex→Tester och typer→En liten PR→Min granskning→Merge och deploy

Tekniska utmaningar

Varje problem såg ut som en bugg i gränssnittet men visade sig vara något djupare: formen på en ström, en tidsstämpel, vad ett nätverk faktiskt rapporterar, en klocka.

Få genereringen att kännas levande · Realtime

Att generera en månad med inlägg innebar en spinner och sedan tolv inlägg som dök upp på en gång. Det kändes långsamt, men modellen var inte problemet. Granulariteten var det.

Jag ändrade modellens utdata till JSON Lines och strömmade den, och lade in varje inlägg i samma stund som dess rad var klar. Kalendern prenumererar på ändringar i Postgres via Supabase Realtime och ritar upp platshållare först, så inläggen skriver fram sig själva ett i taget.

Samma väntan känns nu som att se någon jobba.

Två tidsstämplar som aldrig matchade · Data

Supabase varnade för att databasen höll på att slå i taket för disk-IO. Läsningarna var okej. Något skrev om samma rader: 344 000 inserts för att lagra 83 000 meddelanden.

Inkorgssynken jämförde tidsstämpeln den sparade med den den läste tillbaka. Postgres returnerade den som +00:00 och vi skrev den som Z, så varje konversation såg ändrad ut och varje svep laddade ner den igen. Att jämföra tidpunkter i stället för strängar löste det.

Jämför två tidsstämplar
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 för att lagra 83 000 meddelanden

344 000→en per nytt meddelande

Konversationer som lästes om vid varje svep

alla→de ändrade

Skrivtrycket upphörde, och inkorgshistoriker som aldrig blivit klara synkades för första gången.

En nolla är inte alltid en nolla · Analys

Vår analysleverantör returnerar samma format för alla nätverk och fyller i allt som ett nätverk inte rapporterar med 0. Instagram ”hade” noll klick på varje inlägg. Diagrammen ljög artigt.

Ett metrikregister per plattform som registrerar vad varje nätverk faktiskt rapporterar, sätter resten till null vid inläsning och låter varje diagram visa, nedgradera eller dölja ett mått på ett ärligt sätt.

Insikter över åtta nätverk som aldrig visar en siffra som ingen har mätt.

Utloggad av en klocka som gick för fort · Auth

Min medgrundare loggades ut i samma ögonblick som han loggade in: femton tokenförnyelser i sekunden, och sedan en rate limit. Ingen annan kunde återskapa det.

Klockan på hans dator gick över en timme före, så varje ny token såg utgången ut. Jag lindade in sessionslagringen så att utgångstiden förankras om till den lokala klockan när en session skrivs.

Tokenförnyelser per sekund

15→0

Inloggningen fungerar oavsett enhetens klocka, och konsolen säger till när en går fel.

Lärdomar

Smak är vallgraven

När AI gör det billigt att bygga kan alla skeppa, och det mesta ser likadant ut. Det som fortfarande är sällsynt är omdöme: att veta vad man ska utelämna, hur en skärm ska kännas, när en animation är en för mycket. För ett team på två som inte kan bjuda över någon är smaken det som får Groselia att se ut och fungera som något mycket större, och det är den enda delen jag aldrig skulle lämna över till en modell.

Sälj resultatet, inte verktyget

Ingen ville sköta ett marknadsföringsverktyg, hur bra det än var. De ville synas. Att sälja arbetet i stället för appen gjorde produkten viktigare, inte mindre viktig: den blev motorn vi kör varje dag, så varje skavank blev åtgärdad.

Kontext slår klyftighet

Agenten blev bättre när den visste mer, inte när prompten blev smartare. Att ge den live-kalendern, minnet och de öppna planerna vid varje tur, och att låta den fråga innan den agerar, gjorde mer än någon modelluppgradering.

AI ändrar storleken på teamet

När agenter skriver det mesta av koden parallellt har mitt jobb flyttat till att bestämma vad som ska byggas, granska varje ändring och hålla ribban högt. En person kan nu driva det som förut krävde ett team, så länge personen förblir redaktören.

Nästa projekt

Alla projekt