Skip to content
Neto Alves
Back

Saturno Labs

Autonomous B2B marketing platform that measures a brand's authority inside AI answers.

Proprietary

Full-stack development, end to end · built in under 45 days

packages
14
cron jobs
13

01 Problem

B2B brands are already being cited — or ignored — by ChatGPT, Gemini, Claude and Perplexity whenever someone asks about a category, and there was no metric for it, no process, and no one approving a piece of content before it went out. What was missing was a platform that measured Share of Voice inside AI answers and automated the response without releasing media budget unsupervised.

02 Architecture

A monorepo with 14 packages and 3 apps. Fastify 5 API with Zod validating input, documenting the OpenAPI spec, and structuring the LLM output from the same schema. PostgreSQL 16 with pgvector for embeddings, Drizzle as the ORM, BullMQ over Redis for queues and 13 cron jobs, React front-end with three.js for the constellation scene. It runs on 60 tables, 240 endpoints and 1,102 test cases.

03 Hard decisions

Executable documentation gate in CI

An extractor derives a canonical inventory of routes, tables and jobs from the code; a verifier runs 9 checks that break the build, including one that confirms every number stated in the documentation prose matches that inventory. The documentation cannot lie because the build will not let it.

Fail-closed compliance barrier

Every piece passes a deterministic blocklist, then an AI judge that returns a structured verdict, then human approval. If the vetting step fails — LLM down, timeout — the piece stays in draft. Unavailability never turns into approval by default.

Five gates between the AI and the media budget

An action proposed by the AI only auto-applies if it passes five checks in sequence: schema validation, campaign in autopilot mode, kill switch off, eligibility approved, and creative approved. Failing any one of them blocks the action, and the system never re-enables anything on its own.

KPIs that prefer saying "I don't know"

When AI-provider battery coverage drops below 50%, the run is marked degraded instead of complete. A provider being down cannot show up on the chart as if the brand had lost authority — erring on the side of caution is the correct choice.

04 Stack

  • TypeScript
  • Fastify 5
  • Zod
  • PostgreSQL
  • pgvector
  • Drizzle
  • BullMQ
  • Redis
  • React
  • three.js

05 What changed

Research now comes before the piece: the system looks at what already ranks, where the competitor got to, and which question nobody has answered — and it is out of that gap that the article, the carousel and the Instagram and LinkedIn posts come. The article is published to the blog and returns to the system memory, indexed, so the next round starts knowing what the previous one did. The CRM is omnichannel: the conversation a piece starts does not get lost on the other side.