About

The portfolio's error tracker, traces plane, and alert plane — built once, shared by everyone.

CodeRadar is the operating shell on top of the open CodeWatch Apache 2.0 core. It replaces Sentry for portfolio-internal use and serves as the single observability surface for fourteen Goodventures products.

Why CodeRadar exists

The Goodventures portfolio has fourteen ship products. Every one of them needs error tracking. Every one of them needs distributed traces. Every one of them needs alerting that doesn't bury the on-call. Sentry would happily charge us for that — somewhere between $26 and $89 per project per month, plus per-event overage, plus per-user fees once you scale members. Datadog APM is even more expensive, with a per-host meter that punishes high-throughput agent fleets.

The math doesn't work for a venture studio. We already operate the GCP project, the database fleet, the Clerk org, and the Cloud Run cluster these products run on. Adding one more service — an error tracker — costs us almost nothing in marginal infrastructure and a non-trivial amount in vendor licensing. So we built it.

What it actually is

An ingest pipeline (Hono + TypeScript), two databases (Postgres for metadata, ClickHouse for events), a Next.js dashboard, an alert engine, and four SDKs (Node, Browser, Python, Go). Every product is a project under one Goodventures org. Members are added to projects, not orgs. Everything is single-tenant from the SDK's point of view (you only see your own project's data) but multi-tenant from the operator's point of view (one ingest pipeline, one ClickHouse cluster).

The whole pipeline is also the open CodeWatch repo. We didn't fork it; we deploy it. CodeRadar is the brand and the operating shell on top, with a portfolio-aware project model and the alerting workflows we actually use day-to-day.

What it isn't

It isn't trying to be Sentry. Sentry has more depth on session replay, more depth on issue grouping heuristics, more depth on integrations (one-click Jira, Linear, Asana, etc.). We are at v0.x and our integration list is short on purpose: Slack, email, generic webhook. Pagerduty, Microsoft Teams, SMS are on the roadmap.

It isn't trying to be Datadog. Datadog has APM, infra metrics, log management, RUM, security monitoring, and a dozen other products in one suite. We are only doing error tracking, distributed traces, and alerting. Logs go elsewhere. Infra metrics go elsewhere. RUM is on the long roadmap.

It isn't open to external customers yet. The open CodeWatch core is Apache 2.0 and you can self-host the same pipeline. A managed CodeRadar tier for portfolio-adjacent companies (Goodventures alums, partners) is on the roadmap, but priority is portfolio-internal stability first.

The org model

One Goodventures org. [email protected] is admin. Every product is a project under that org with its own DSN, its own quota, its own alert rules, and its own member list. There isn't an option to create a second org — that would be the wrong shape for this tool.

Member assignment is at the project level. Joining the Goodventures Clerk org gets you sign-in to app.coderadar.app but not automatic access to every project. Project owners (typically the product lead) add team members from the project settings.

The data path

Errors fired by your application become events captured by the SDK. Events are buffered locally for up to 5 seconds (or 100 events) and shipped in batches to ingest.coderadar.app. Ingest fingerprints the event, dedups against existing fingerprints in ClickHouse, writes the row, and emits a Redis pub/sub message. The dashboard's SSE stream picks it up and renders it in the live feed in under a second. Alert rules evaluate every minute (or instantly for fingerprint:new rules) and dispatch to your channels.

Distributed traces follow a similar path. Spans are captured by the SDK with W3C tracecontext propagation, batched, and shipped to /v1/traces. Trace tree assembly happens at query time so you can pick any trace_id from an event and view the full waterfall.

What ships in v0.x

  • Ingest pipeline — Hono on Node, accepts batched events, writes ClickHouse, publishes Redis. Live.
  • Query backend — Postgres for metadata, ClickHouse for events. Live.
  • Dashboard — Next.js 15, App Router, SSE live feed, search and filter, saved queries, pinned queries. Live.
  • SDKs — Node, Browser, Python, Go all live. Auto-instrumentation for Express, Hono, Next.js, FastAPI, net/http. Manual capture in every SDK.
  • Source-map auto-resolution — Live. Upload via SDK release hook or CLI.
  • Distributed traces — W3C tracecontext, OTLP-compatible. Live.
  • Smart alerting — Threshold and pattern rules. Slack, email, webhook channels. Live.
  • Quotas + sampling — Per-project hard quota, adaptive sampling above threshold. Live.
  • AI fix pipeline (opt-in) — Triage, diagnosis, multi-pass voting, fix-test-fix iteration, PR creation via GitHub App / GitLab / Bitbucket. From the CodeWatch core. Off by default. Live.
  • Session replay — Roadmap. Lightweight DOM diff stream, off by default once shipped.
  • PagerDuty / Teams / SMS — Roadmap.

Portfolio

CodeRadar is one of the products in the Good Ventures Lab portfolio. The ones that compose most tightly:

  • RelayOne — Fleet governance. Deploy events surface as info-level CodeRadar events, so deployment correlation with errors is one query.
  • RelayGate — AI traffic gateway. Emits OTLP traces for every AI request; CodeRadar shows them in the same trace tree as the rest of your app.
  • TrueCom — Settlement network. Receipt failures and signature mismatches post as CodeRadar events under project:truecom.
  • Veritize — Drift detection. Drift events post to a Veritize CodeRadar project; alert rules fire on drift like they fire on TypeErrors.
  • CloudSwarm — Agent orchestration. Agent step events surface in CodeRadar with full plan + tool-call traces. (Roadmap.)
  • Heroa — Sovereign substrate. CodeRadar's BC-Canadian deployment option runs on Heroa. (Roadmap.)

Graceful degradation

Every portfolio seam in CodeRadar is optional. Run CodeRadar by itself and it still does what an error tracker should do. Pair with the rest of the stack to compound the value. None is required.

Contact

Sales, partnerships, security disclosure, anything else: [email protected]. Security disclosures additionally accepted at [email protected]; PGP key at /security.