01 — Product

A control plane for product teams.

Helix is four layers stacked into one quiet system. Sources stream in. Core normalises. Intelligence ranks. Surfaces breathe. Nothing in the experience is more complicated than what it absolutely needs to be.

02Architecture
01

Sources

layer 1/4

Six read-only adapters: Slack, Linear, GitHub, Figma, Notion, Calendar. No message storage. Cursor-based polling, never webhooks the user can't inspect.

02

Helix Core

layer 2/4

Normalises every event into a canonical Signal{actor, surface, severity, ownership}. Persists 30 days rolling. The only layer that touches PII, encrypted at rest.

03

Intelligence

layer 3/4

signal_score = recency × volatility × ownership × blast_radius. Rolling baselines per channel — a noisy team isn't the same as an alarming team.

04

Surfaces

layer 4/4

Three quiet UIs: Pulse Map, Risk Lens, Async Digest. Each reads from the same ranked stream. Nothing is computed in the surface layer.

stack · animated
live render
/architecture/layers
03Three surfaces
Surface 01

Pulse Map

Catch up on 48 hours in under five minutes.

A force-directed graph where every node is a team-owned surface — a channel, a repo, a board. Density grows with activity, color shifts with risk. You scan it the way you scan a sky.

mock · pulse-map
Surface 02

Risk Lens

Triage what just changed, with sources attached.

A ranked list of the three things that genuinely moved since you last looked. Every item shows the upstream signal, the owner, and the suggested next move. P1 escalations always require a human ack.

3 items moved
live
P1
auth-svc deploy stalled
platform · 3 retries failed
12m
P2
Linear backlog +24% wow
product · #pm-alerts
1h
P3
Slack #incidents quiet 4h
sre · verify monitor health
4h
mock · risk-lens
Surface 03

Async Digest

Replace the morning standup. Permanently.

A two-minute brief composed from the signal model. Skim, ack, or expand any line into the source thread. Sent to the channel, the inbox, or just left in-app — the team chooses.

Tue · Daily brief
2 min read
shipped
4 PRs merged · 2 incidents resolved · billing v2 in canary
blocked
design review · billing flow — pending since Mon
watch
#alerts +30% · auth-svc 3σ over baseline
→ #engineering
skimsend
mock · async-digest
04Intelligence model
scoring formulasignal_score =
recency × volatility × ownership × blast_radius
recency

How long ago the signal fired. Decays exponentially over 24 hours.

volatility

Standard deviation of activity in this surface over the last 14 days. A spike on a quiet channel matters more.

ownership

How many teams the surface touches. Cross-team ownership weights heavier — more people to notify, more places to break.

blast_radius

Estimated downstream impact if this signal becomes a real incident. Pulled from the dependency graph.

05Edge cases & guardrails

Privacy

Read-only OAuth scopes. No message storage past 30 days. Workspace admins can revoke any source in one click.

Signal noise

Channel-level dampening kicks in when activity exceeds 3σ over baseline. Helix gets quieter the louder a team gets.

False positives

Any P1 escalation is held in a 90-second human-in-loop window. Acked → ships. Ignored → quietly downgraded.

Want the full architecture write-up?

The Notion case study covers the data model, the signal-noise math, and the rejected designs in full.

Read it on Notion