Worldloom

Elixir · Phoenix LiveView · Canvas 2D

The world is weaving itself.

A persistent living tapestry woven in real time from Wikimedia edits, Bluesky activity, RIPE routing motion, Solana slots, drand rounds, earthquakes, global weather — and three small anonymous gestures from whoever is watching. The present lives at the luminous right edge.

the present
Weaving. Hover or tab a formation to inspect it.

Three gestures, no account and no name — the same three the live loom accepts. Here they are woven in your browser only.

Seven signals, one cloth

Every source keeps its own hand

Each public source becomes a distinct formation with its own colour family, so the cloth stays legible as it thickens. These are the shapes and the materials the loom actually uses.

    On this page the earthquake ruptures and the drand crystals are fetched live from their public endpoints; the other five families are drawn from a fixed seed for illustration. The status beside each name says which is which right now.

    Your hand

    Three gestures, and nothing about you

    There are no accounts, names, chat messages, uploads or visitor profiles. Anonymous browser and network values exist only long enough to enforce contribution limits, and are never written to loom events or public output.

    TUG

    Bend the living edge

    A warm intervention that pulls the present strand out of true.

    KNOT

    Join what is there

    Ties the edge together where two formations meet.

    ILLUMINATE

    Light it

    Brightens a region so later visitors see where attention fell.

    Every formation is stored before it is broadcast. Two connected browsers see the same committed artifact, and a restart reconstructs the cloth from PostgreSQL rather than from memory. What you add is permanent and shareable by link; browsing an earlier UTC chapter never changes its history.

    How it holds together

    Commit first, then broadcast

    The browser draws compact, versioned instructions. It never receives raw upstream payloads.

    01

    Normalise and bound

    Seven upstream sources are normalised and independently bounded.

    02

    Bounded buffer

    A single bounded signal buffer absorbs bursts without unbounded growth.

    03

    One coordinator

    A single loom coordinator decides what becomes a formation.

    04

    Transaction

    PostgreSQL commits the formation. Only on success does it exist.

    05

    Broadcast

    Phoenix PubSub fans the committed instruction out to LiveView clients.

    Source posture

    All seven run by default. Each environment switch is an operator circuit breaker: turning one off removes that source and its upstream connection while the rest of the world keeps weaving.

    SourcePublic freshnessRecovery posture
    WikimediaQuiet after 20 secondsAt most 60 seconds from a durable event ID
    USGSQuiet after 3 minutesIdempotent rolling-feed polling with a private ETag
    Open-MeteoStale after 30 minutesKeep the last ambient state; retry locally
    drand QuicknetStale after 12 secondsAt most 20 exact rounds; report a larger gap
    Bluesky JetstreamQuiet after 20 secondsFive-second overlap within a 60-second horizon
    RIPE RIS LiveQuiet after 20 secondsRejoin the live edge; never claim replay
    Solana slotsQuiet after 20 secondsRejoin the live edge; preserve observed gaps

    Reduced motion is a renderer

    Not a disabled feature. The reduced-motion path draws the same cloth without losing controls, and a textual live summary describes formations for screen readers.

    Every pointer act has a key

    Semantic controls, visible focus, non-colour signal shapes and responsive touch targets throughout — inspect a formation with pointer, touch or keyboard.

    Deliberately single-instance

    v1 runs one loom coordinator. The invariants, recovery paths and bounds that choice buys are written down in ARCHITECTURE.md rather than implied.

    Proven at launch capacity

    The heavy suite runs 100 independent Chromium contexts with real LiveView snapshot progress, WebSocket stability, aggregate Presence cleanup, and one server-owned connection per streaming source.

    7public sources, independently bounded
    3anonymous visitor gestures
    8colour families in the cloth
    100browser contexts in the capacity proof
    0accounts, names or profiles

    Run it

    Public source, local experience

    Worldloom is available as public source and a local experience. A hosted demo link appears in the repository only once public infrastructure is configured and verified.

    Live

    Connect to all seven

    Needs Elixir 1.20.2 on OTP 29.0.4, Node 24.18.0 and PostgreSQL 14+. Development connects to every public source by default.

    git clone https://github.com/romankhadka/worldloom.git cd worldloom mix setup npm ci mix phx.server

    Then open localhost:4000.

    Offline

    A repeatable hour

    Disable the feed workers and seed one deterministic hour. The seed task is idempotent — rerunning it does not duplicate its 120 demo signals.

    WORLDLOOM_FEEDS_ENABLED=false mix worldloom.seed_demo WORLDLOOM_FEEDS_ENABLED=false mix phx.server

    Verify

    The gates

    Source normalisation, transactional persistence, retry and checkpoint behaviour, LiveView interaction, deterministic rendering, keyboard and touch operation, reduced motion, two-browser convergence and reload reconstruction.

    mix precommit npm test npm run test:e2e

    Read first

    What it is not

    An artistic aggregate — not an alerting, forecasting, operational, social, cryptographic-verification, financial or scientific analysis service. Upstream activity is best-effort and may be delayed, revised, incomplete or unavailable.