Inspiration
Data platforms don't have a discovery problem anymore — they have a trust problem. Catalogs like DataHub list every dataset, dashboard, model, and pipeline, but the second a new asset lands, someone asks in Slack: "Can I actually use this?" No owner, unchecked PII, half-resolved lineage. We wanted the thing that watches the graph so people don't have to air-traffic control for metadata.
What it does
Beacon; streams new and changed assets in real time and scores each one (0–100) across six governance factors; ownership, lineage, PII sensitivity, documentation, freshness/SLA, and schema stability:
$$ \text{Trust} = \sum_{i=1}^{6} p_i, \qquad \sum m_i = 18+20+22+15+13+12 = 100 $$
An optional autonomous agent you can arm then acts on that judgment computing a separate confidence from trust, lineage $\ell$, and freshness $f$:
$$ \text{conf} = \left\lfloor 100\left(0.5\cdot\tfrac{s}{100} + 0.3\,\ell + 0.2\,f\right)\right\rceil $$
It auto-certifies high-confidence assets, quarantines risky ones, and skips the rest to a human — all gated by a finite action budget so it fails safe. Six screens: Launch Feed, Governance Agent, Watchlist, Alert Rules, Source Health, and a Slack/Telegram alert preview.
How we built it
A design-to-code port. Beacon started as a prototype in Claude's design tool (Beacon.dc.html, Nocturne design system), which we re-implemented as a real Vite + React + TypeScript app — domain logic (scoring, agent policy, generators) in a framework-agnostic module, the Nocturne tokens carried over verbatim, and mock assets streaming client-side every ~2.8s.
Challenges
- Porting a class component's imperative
setStateinto hooks without stale closures insidesetInterval— solved with a merge-stylesetStatebacked by a hotref. - Carrying hundreds of inline
stylestrings into React via a tinycss()parser instead of rewriting each by hand. - Verifying render (not just compile) with a
renderToStaticMarkupsmoke test.
What we learned
Separate the judgment from the view, give autonomy a budget so it feels safe, and treat confidence ≠ trust that split is what makes automated governance defensible.
What's next
Wire the scoring and connect/writeback flow to a live DataHub graph over MCP.
Built With
- acryl-datahub
- apache-kafka
- claude
- cloudflare
- css
- datahub
- docker
- docker-compose
- git
- github
- graphql
- html
- javascript
- mysql
- nginx
- node.js
- opensearch
- react
- typescript
- vercel
- vercel-functions
- vite
- vitest
Log in or sign up for Devpost to join the conversation.