Back to Labs
    Scenaryo · Labs · Signalwaves

    How Signalwaves works.

    Every hour, Signalwaves reads around 8,000 articles from 500+ sources, groups them into stories, and shows how differently source camps frame the same event. This page explains the architecture behind it.

    500+
    Sources
    ~8,000
    Articles per hour
    ~500
    Live stories
    14
    Interface languages
    01Overview

    Files, not requests.

    The pipeline and the interface never talk to each other while someone reads. A Python pipeline writes its results as static files every hour; the web app and the store apps only serve and read those files. A failed pipeline run freezes the data for an hour. The app stays up.

    01Sources
    • 500+ RSS feeds, community and API streams
    • 6 source tiers, 12 world regions
    02Hourly pipeline
    • Fetch, deduplicate, classify
    • Cluster into stories, sort into lenses
    03Snapshots
    • Static JSON for the interface
    • SQLite for time series
    04Interfaces
    • Web app (PWA, works offline)
    • iOS and Android apps
    02The hourly cycle

    One cycle, under ten minutes.

    A scheduled job starts the cycle every hour. Segment widths show the real duration of a run.

    0 minTotal ≈ 9 minutes
    015 % · 0.5 min

    Fetch feeds

    500 RSS feeds in parallel, with timeouts per feed. A feed that keeps failing is skipped for the run.

    0247 % · 4.3 min

    Other sources

    Platform, aggregator and community APIs, queried with the day's biggest stories so coverage grows around them.

    0330 % · 2.8 min

    Enrich

    Niche lenses are refilled; every link gets outlet region, language, media kind and reader emotion.

    044 % · 0.4 min

    Write

    Snapshot for the interface, hourly archive, and the unfiltered firehose of all articles.

    0513 % · 1.2 min

    Build stories

    A separate step clusters the last three days into stories and sorts them into lenses.

    03From articles to stories

    Today's news, not last month's topics.

    Stories are rebuilt every hour from fresh coverage instead of being kept as long-lived topics.

    1. 1

      Take every article from the last three days.

    2. 2

      Embed each headline with a multilingual sentence model, so a German, Spanish and English article on the same event land together.

    3. 3

      Cluster greedily, newest first: an article joins a story when it is close enough to the story's centre.

    4. 4

      Keep only events covered by at least two independent outlets.

    5. 5

      Carry a story's identity across hours while it develops; end it after seven days so names can't go stale.

    6. 6

      Name it after the headline closest to the centre, preferring primary sources.

    7. 7

      Sort it into 60+ thematic lenses by topic and by fit to each lens profile.

    04Signals per article

    What gets measured.

    Every classification is heuristic and disclosed as such. No editorial judgement is involved.

    SignalValuesHow
    Source tierOfficial · Wire · Editorial · Platform · Aggregator · CommunityHow a source works, corrected by a curated domain list.
    Outlet region12 world regionsWhere the outlet is published, not what the article is about.
    LanguageISO language codeScript detection, then a statistical detector. Headlines appear in your language first.
    Media kindMainstream · IndependentCurated domain lists; platforms stay unclassified.
    Reader emotionConcerning · Hopeful · Curious · OutrageousA lexicon first, a transformer model for ambiguous cases.
    DivergenceConsensus · Mixed · ContestedHow far source camps pull apart in emotional framing; contested needs at least four sources.
    05Interface

    Built for comparison.

    Briefing

    The most contested stories of the day, the broad consensus, and today's mood compared with a normal day.

    Perspectives

    Every story, sortable by divergence, with a viewpoint matrix that lays the camps side by side.

    Newsiverse

    The unfiltered firehose, strictly by time, filterable by tier, region, emotion and media kind.

    Lenses

    Thematic perspectives from geopolitics to niche sports; favourites follow you across the app.

    The store apps load the live web app, so every improvement reaches all platforms at once.

    06Principles

    Small system, clear rules.

    Diversity over prestige

    Many camps, tiers and regions make the pool resistant to single-publisher bias.

    Degrade gracefully

    A dead feed, a missing key or an unavailable model never stops the rest of the run.

    Disclose the method

    Tiers, emotions and regions are algorithmic and labelled that way.

    No account needed

    Preferences stay on the device. Analytics only with consent.

    Pythonsentence-transformersSQLiteNext.jsReactPWACapacitor