Radar de Obras mockup
← All work
WK_03 · 2026

Radar de Obras

B2B data product for public tenders

I validated the whole product before the first line of code.

PapelProduct · UX · Discovery
ContextoSelf-initiated
Ano2026

Radar de Obras is my own product, not a client. A B2B SaaS/DaaS that collects public tender notices, filters them, scores them by relevance, and delivers the curated opportunities over WhatsApp to construction material suppliers in Mato Grosso. It ran in production from April to June 2026, and it's paused now.

I built this case against the designer reflex: no opening Figma to draw screens. The question that mattered came first. Is there real pain? Who feels it? Is it worth solving? I validated the whole product before the first line of code. What follows is the product decision first, and the interface it produced shows up as proof, not as the starting point.

DisciplinesProduct research · ICP · UX · AI
SectorPublic tenders · Construction
DeliverySaaS/DaaS · opportunities over WhatsApp
ModelOwn product, no paying client
§ Process

Discovery first,
screens as proof.

Double diamond against the reflex: discover the real pain, define who it's for, develop the architecture, deliver with a quality loop.

// PASS A · DISCOVER

8 rounds until the real pain surfaced

I ran 8 rounds of ICP research with deep-research and AI panels, plus a benchmark of competitors. They all sell the same promise: "find the tender". The research showed that's not the problem. Shop owners do find the tender; what they lose is the opportunity, because the counter eats their whole day. The pain wasn't search, it was attention.

benchmarkConLicitação · Effecti · AlertaLicitação
market promise"find the tender"
real pain foundthe counter eats the day, the opportunity slips by
// PASS B · DEFINE

ICP distilled, 16 anti-ICPs, 3 clusters

I distilled the buyer persona and, even more useful, mapped 16 anti-ICPs: people who look like the customer but aren't. Knowing who you don't sell to sharpens the product as much as knowing who you do. Instead of a generic "tender platform", I picked 3 clusters to focus on. The requirements became centered on a non-technical operator: if it needs training, it's already failed.

focus3 clusters, not a "tender platform"
anti-ICPs mapped16
target usernon-technical operator, zero training
// PASS C · DEVELOP

Architecture that lowers cognitive load

A deliberate AI decision: I split the business dashboard from the technical health dashboard. The shop owner sees only opportunity, score, and action; scraper, queue, and logs live in a separate panel. Mixing the two is the classic mistake that drowns a non-technical user in noise. The scoring is adaptive: it raises what the supplier opens and replies to, and lowers what they ignore.

business dashboardopportunity · score · action · WhatsApp
health dashboardscraper · queue · logs (out of sight)
scoringadaptive to behavior
// PASS D · DELIVER

Live, with "Customer Zero" in the loop

The product went into production. Before exposing it to any paying user, I built the "Customer Zero" mechanism: me on the receiving end, checking whether the filter delivered signal and not junk. It's a relevance QA loop, not a usability test. Tenders that leaked past the score turned into weight adjustments. The day someone paid, their WhatsApp would only get opportunities worth reading.

deliveryWhatsApp, curated opportunities
quality loopCustomer Zero (filter QA)
statusran Apr → Jun 2026, now paused
§ Product · UI/UX

The decision became the screen.

Utilitarian on purpose: non-technical operator, zero training. Each screen embodies a product decision, not decoration.

01 / 03
Radar Operations dashboard: infrastructure, data sources, last collection per source, and pipeline control
DECISIONSeparation The pipeline health dashboard (sources, collection, queue, logs) lives here, away from the shop owner. That's the Pass C decision: technical noise kept out of sight of someone who just wants to know if the bid is worth it.
List of tenders in the Radar cache: 15036 tenders filterable by state, source, and deadline, with value and closing date
DECISIONSignal 15036 tenders in the cache, filterable by state, source, and deadline. The score is what separates signal from noise, so the opportunity doesn't get lost in the volume.
Radar operational dashboard: tenders in the cache, active subscribers, last run, and collection history
DECISIONStatus Pipeline status readable at a glance: cache, subscribers, last run. The operator sees right away whether the radar is running or stopped.
§ The 4 phases

Pass A → D, closed out.

ADiscover · 8 rounds of ICP research100%
BDefine · ICP, 16 anti-ICPs, 3 clusters100%
CDevelop · AI + adaptive scoring100%
DDeliver · production + Customer Zero100%
§ By the numbers

The weight of discovery.

8rounds of discovery
16anti-ICPs mapped
3focus clusters
// AI IN THE FLOW

AI as research copilot, from discovery to code

The entire discovery (deep-research, decision panels with multiple models), the plans, and the build itself ran on Claude Code and agents. Validating a product with AI as a research copilot is how I work.

Own product, no paying client. "Customer Zero" is an internal filter-quality QA, not a usability test with an external user. There was no A/B testing and no Figma prototype (the spec was written in text). The production interface is utilitarian on purpose, non-technical operator and zero training. This case shows the product decision and the discovery behind it, with the real screens as evidence.