Skip to content
Growth & content enginesLive2026

Atum

A self-hosted platform that scores social content against each creator's own baseline for real outliers, then turns validated winners into original, similarity-checked scripts.

33,727
content items scored in the intelligence corpus
334
tests passing across the workspace, lint and typecheck clean
39
database tables across five RLS-protected schema modules
24
scripts drafted by the transmutation pipeline
ArchitecturePrivate internal tool
  1. 01
    Interface
    • TypeScript
    • Next.js + React
  2. 02
    Edge
    • Cloudflare Tunnel
  3. 03
    Application
    • Redis + BullMQ
    • Anthropic API
    • YouTube Data API v3
  4. 04
    Data
    • PostgreSQL with pgvector
    • Drizzle ORM
  5. 05
    Operations
    • Docker Compose
    • launchd
  6. 06
    Supporting
    • Zod

Atum holds live data, so this shows the verified technology stack by layer rather than a screenshot. Layers, not connections — which service calls which is not something a dependency list can prove. Hosts, ports and topology are deliberately absent.

Problem

Content creators and small teams have no low-cost way to know, each morning, what topic is both timely and unsaturated in their niche. Manual trend-watching means scrolling platforms, guessing why something worked, and starting content from a blank page days after a trend already peaked. Existing social-listening tools report vanity totals (views, likes) without a creator's own historical baseline, so a video that looks big in isolation may be entirely normal for that channel, and a video that looks small may be a genuine outlier. None of them turn a validated trend into a usable script; they stop at the dashboard. Atum was built to close that loop for a single operator: score content against a creator's own baseline, decide with deterministic math rather than a vibe whether something is really unusual, and carry a validated idea through to an original, similarity-checked script instead of leaving synthesis to the human every time.

What was built

Atum runs as a pnpm monorepo: a Next.js product UI, a BullMQ worker, and shared packages for the domain schema, deterministic scoring engines, platform connectors, and AI provider abstractions. Discovery, baselining, outlier detection, trend clustering, cross-platform migration tracking, and the daily opportunity brief are all pure, tested functions in packages/core, with no AI dependency, so the numbers a user sees are computed, not generated. Postgres, with the pgvector extension, holds 39 tables across five schema modules, every tenant table carrying row-level security policies shipped in the same migration, with SECURITY DEFINER functions as the only sanctioned cross-tenant path. A YouTube Data API v3 connector, gated by a per-platform compliance ledger recording quota math and ToS constraints, feeds real content into the pipeline; Instagram and TikTok connectors exist in code but are not connected to a live account. An AI layer handles Virality DNA extraction and script generation behind a cost gate: no hosted key means a no-op provider that refuses rather than fabricates. The system is deployed on a single machine behind a Cloudflare tunnel, running as four launchd services (web, worker, tunnel, and a nightly backup), and by the last recorded handoff had scored a corpus of 33,727 real content items.

Technical approach

The scoring engine is intentionally boring: normalize, baseline, delta (velocity and acceleration from snapshot history), outlier (a multi-weight spec), cluster (lexical union-find over content), trend score with a state machine, migration analysis across platforms, and an opportunity score blending velocity, saturation, and relevance into bands. All of it is pure and parameterized on a passed-in clock value rather than calling the system time directly, so a hand-labeled golden dataset of 40 cases replays deterministically in CI and a backtest command diffs scoring changes against stored history before they ship. The outlier breakout threshold was moved during calibration to 65 (down from the spec's original 70) once the shipped normalization curves put a known spec example noticeably below where the spec expected it to land.

Multi-tenancy is enforced at the database layer, not the application layer. Every tenant table's row-level security policy reads the session's workspace id; a raw session with no tenant context set sees zero rows on any of them, and the only exceptions (global intelligence tables, worker-write tables) are read-all by explicit design. Derived tables such as snapshots and transcripts inherit visibility from their parent content row through EXISTS policies, so protection is not duplicated per table.

The pipeline runs on BullMQ over Redis, fanning out one discovery-to-brief chain per workspace on a recurring schedule, with hour-bucketed job IDs so idempotency survives overlapping runs and replays. A production incident found the queue's default job lock too short for the scoring stage once the corpus grew past roughly 26,000 items: a run that took 41 seconds got declared stalled mid-flight and its completed work discarded, leaving thousands of items holding industry tags the scoring stage had already rejected. Long stages now request an explicitly extended lock. The AI layer resolves providers in a fixed order (a hosted key, then a local model endpoint, then a no-op provider), resolved once per process and frozen, and every model call writes a per-tenant usage row (provider, model, tokens, computed cost) before generation is trusted with real spend. Generated scripts are stamped with a similarity score against their source and are refused below a guard threshold, so a script is provably not a reworded copy of the transcript it started from.

Creative approach

Craft

The product identity, a 'solar observatory' theme, is a deliberate rejection of typical growth-dashboard styling: a charcoal-blue ground, a single gold signal accent, and a dusk-blue for decline, paired with a display face for headings and a monospace face for every number, so data reads as measured rather than decorative. The signature element is the ScoreEye, an SVG eye whose lid opening and iris arc both encode the same 0-100 score redundantly, so a score is legible even to someone skimming rather than reading the digit. The interface defaults to desktop with a mobile bottom nav rather than a responsive afterthought, because the daily brief is meant to be read at a desk before the workday starts, not thumbed through on a commute. Every surface respects reduced motion and ships visible focus rings, decided during the same design pass that caught and fixed a chart silently encoding a constant value and sparklines sharing a column without a shared scale, defects a purely code-level review would not have surfaced.

Reframe

The reframe is separating idea from expression before generation ever starts. Most 'AI content tools' take a winning post and paraphrase it, which is a copyright and originality problem dressed up as a feature. Atum's transmutation pipeline instead extracts a Virality DNA object from a breakout: topic, angle, format, hook class, and audience reaction, evidenced by phrase-level analysis of the transcript and comments rather than vibes, and only then generates new concepts and scripts from that abstracted structure, in the operator's own configured voice and audience profile. A deterministic similarity guard checks every generated asset against its source before it is returned, so the system has a built-in circuit breaker against producing a derivative work, rather than a documented promise not to. The practical consequence is that the AI does interpretation, not measurement: every score, rank, and velocity number comes from deterministic engines, and the model's only job is to explain evidence and draft language, which is why a missing API key degrades the product to 'no drafting' rather than to fabricated numbers.

Process and what failed

Live data broke assumptions fixtures had hidden. Industry-relevance scoring, tuned against synthetic fixtures, read only a video's title and required every token of a multi-word keyword to match; against real YouTube content it returned near zero, so the fix now reads a bounded slice of the description and scores partial phrase coverage above a floor. A tracked creator's back catalogue inherited the industry tag of whatever search first found the creator, so a local news channel found through a housing story put weather and traffic segments into the breakout feed; those items still feed the creator's baseline but are excluded from scoring by a minimum relevance floor. The outlier threshold, calibrated on fixtures posting roughly 13,000 views an hour, idled forever against a real vertical peaking near 1,300, so downstream selection was rebuilt to use a corpus-relative percentile instead of the fixed absolute cut, while the calibrated threshold still governs the golden dataset unchanged. A planned full-transcript feature for competitor videos was designed for and then found unreachable: YouTube's caption API requires OAuth as the video's owner, so the feature was replaced with comment-thread analysis instead, with the reason recorded in the connector compliance ledger rather than silently dropped.

Outcome

As of the last recorded handoff, Atum is deployed and operating on real data: a corpus of 33,727 items, 9,870 of them carrying an industry tag. It has not yet closed its own loop: 24 scripts have been drafted through the transmutation pipeline, but zero have been sent to the connected publisher and zero published results have been measured back into the personalization engine, so the system is proven end to end on discovery and scoring but not yet on the publish-and-learn cycle it was designed to close. A shadow-mode window, which withholds any daily-brief recommendation from being marked actionable until it has run silently for a period, was still active at the time of that handoff.