Product systems · Internal tooling
My command center for running several projects at once. One screen turns a WhatsApp brief into an on-brand AI prompt before I open a design tool. Another reports growth as the confidence interval its sample supports, not a number dressed up as one.
The problem
I run a product studio, a design agency relationship and my own growth experiments at the same time, and none of them share a home. A client brief lives in WhatsApp. The job that brief belongs to lives in an agency tool I have to log into separately. Brand guidelines live in a folder I have to remember to open. Whether a change I shipped last week moved a number lives nowhere until I go query it by hand.
Cerebro is the tool I built to stop losing that context between tabs. It is not one feature, it is the place decisions, references and results land automatically so I do not have to re-assemble them from memory every time I sit down to work.
Scope
Two screens inside Cerebro carry the real weight, and they solve unrelated problems.
Agency workflow
Every morning the agency's producer posts the day's tasks in a WhatsApp group. Mine used to start by reading that thread, opening the agency's job tracker to find the brief behind each task, then opening a folder to remember what the client's brand is even supposed to look like. Three logins before the actual work began.
Cerebro's webhook now reads that group directly, matches the tasks addressed to me, and pulls the matching job from the agency tracker itself, a server-rendered tool with no public API, so the client-facing part scrapes an authenticated session instead of calling one. A Telegram message with the day's list lands on my phone before I have opened WhatsApp.
The producer marks tasks with a middle dot, not a hyphen. My first parser only recognised a hyphen, so for two days every brief she posted matched none of the detection rules and Cerebro reported nothing to do, silently, while a full task list sat unread in the group.
What changed: the parser now accepts four different bullet characters, and the Telegram message dropped the corporate bullet-and-summary format I had first written for a plain list in the producer's own tone. Reading it should feel like reading her message, not a system's translation of it.
Each client has a documented brand DNA on file: archetypes, tone, visual direction, a short list of words to use and a short list to avoid. Generating a prompt reads that document first, so a brief like “anúncio de fim de semana” comes back as an English prompt already carrying the client's palette, typography direction and vocabulary, formatted for whichever image model I am about to use.
The cost: a DNA document has to exist and stay current for every client before this works, which is real upkeep. I keep it because a generic prompt produces on-trend images that are off-brand, and catching that after generation costs more than writing the document once.
Each client also has a moodboard on Pinterest, synced through the official API rather than an embed. Saving a pin on my phone during a briefing is enough; the board reads through Cerebro's own grid within half an hour, no export or re-upload in between.
Growth panel
The other screen tracks whether a paying GoScout subscriber behaves differently from someone who never converts. Most growth dashboards answer that with a bare percentage. Mine runs on 99 users, where a four-person swing between two groups looks identical to a coin flip, and a bare percentage never admits that.
Every rate renders as a Wilson 95% confidence interval, drawn as a filled span with a tick at the point estimate rather than printed as a clean figure. A row only earns the “sinal” tag when the paid interval and the free interval stop overlapping.
The cost: with under 100 users, most rows do not qualify yet, so the page mostly reports what it cannot conclude. I would rather ship that admission than a chart that always looks decisive.
The first version boxed every section in a bordered card, indistinguishable from any SaaS admin panel. I redesigned it around the rule I hold my own portfolio to: content first, frame gone. Sections separate by a hairline, numbers run large and typographic, and every other screen in Cerebro still uses cards on purpose, this one is the argument the rest can follow later.
What it found
Across the actions the panel tracks, accepting a push notification is the strongest candidate for an activation event: it shows up more in paying users than in free ones, and the two intervals clear each other by the widest margin on the table. The Meta campaign feeding this product still optimises toward “Concluir inscrição”, a step that happens before anyone has done anything the data ties to paying.
That gap is the panel doing its job. It surfaced one specific event to hand a media buyer, with the confidence interval attached so nobody mistakes it for certainty it has not earned.
Takeaway
I build the infrastructure a project needs before I need it myself. A WhatsApp webhook, a scraper for a tool with no API, an OAuth integration for reference boards: none of it is glamorous, all of it is the difference between a brief I have to chase and one that is already waiting.
I know when not to conclude. Most of the growth panel's rows say “not yet known” on any given day. Shipping that admission is harder than shipping a chart that always looks decisive.
My design rules travel. The same editorial discipline that shaped this portfolio, no card, no frame competing with the content, now runs an internal analytics screen I check daily.
I built the automation, the AI orchestration, the statistical model and the redesign in close pair programming with Claude Code.
← All work