Skip to content

Repository files navigation

Splash

Human-gated visual journalism for AI agents

Turns reporting material into web, video, scrollytelling, and static visuals — storyboard approval, real rendered drafts, and per-output delivery, all in a journalist-owned story directory. 17 skills, 4 formats, local-first.

Workflow | Delivery | Install | Story Directory

License: MIT17 Skills4 FormatsLocal-first

StarsIssuesLast CommitContributors

Built by Buried Signalstom@buriedsignals.com


Splash turns reporting material and data into finished visual journalism. It freezes the supplied reporting material, develops a storyboard, produces real rendered drafts, waits for human approval, and exports a format-specific handover — while source files, editorial decisions, rendered drafts, approvals, and delivery artifacts stay in a journalist-owned working directory.

It is a skill pack used through an AI assistant rather than a hosted application. The implementation is local-first: stories and newsroom configuration live outside the replaceable Splash checkout, credentials stay in the operating system's protected store through Engine, and every delivery is a file or directory the newsroom controls.

What Splash Does

  • Freezes supplied reporting material into an immutable story source before any production starts.
  • Develops a storyboard and waits for editorial approval of the angle, format, and visual approach.
  • Produces real rendered drafts — charts, maps, scrollytelling, video, and static graphics — not mockups or descriptions.
  • Waits for human approval on every rendered output before delivery.
  • Delivers per approved output: owned local files, a CMS insertion package, or an automatic Cloudflare Pages publish with embed code.
  • Keeps editable production source and delivered exports strictly separated per output, so editor feedback reopens production without touching the delivered form.
  • Ranks and selects the smallest craft skill that fits the approved editorial intent; ranking informs agent judgment, it does not replace it.

Workflow

Intake
  -> Storyboard                    [gate: editorial approval]
  -> Beats: chart / map / image / video / scrolly
  -> Render + human approval       [gate: visual approval]
  -> Deliver: local files / CMS package / Cloudflare Pages
  -> Editor feedback -> reopen beat -> re-render -> re-deliver

Every gate is explicit. Splash does not auto-advance through storyboard approval, rendered-output approval, or the delivery decision. Craft-skill selection is ranked, but the journalist's confirmed takeaway always wins.

Story Directory

Each story gets a journalist-owned working directory:

stories/
  .splash-instance-id                local deployment namespace; never commit
  <story>/
    AGENTS.md                         revision instructions for a fresh session
    source/                           frozen reporting material
    STORYBOARD.md                     editorial decisions and producer choice
    beats/<outputId>/                 canonical editable visual source
      renders/                        current review target
      spec.json                       Datawrapper source spec, when delegated
      DATAWRAPPER.json                reusable Datawrapper chart ID, when delegated
    export/<outputId>/                current delivered form; never edit as source
      HANDOVER.md
      DEPLOYMENT.json                 hosted deployment → editable beat link
      EMBED_URL.txt
      EMBED_CODE.html

beats/<outputId>/ is editable production source; export/<outputId>/ is the current delivery, never the source. For editor feedback, start with the story's AGENTS.md, edit the matching beat, render and approve again, then materialise the same delivery form.

Delivery and delivery

Delivery is selected per approved output:

  • Owned files — source bundles and rendered assets stay local.
  • CMS insertion — produces a local insertion package; Splash never calls a CMS itself.
  • Deploy and receive embed code — publishes the web output to Cloudflare Pages automatically. Each hosted output gets a stable per-output project URL, an iframe snippet, and a deployment receipt. A later approved revision updates the same URL.

Cloudflare is an implementation detail, not another editorial question. Local delivery keeps the prior export intact until replacement completes.

Credentials

Credentials are stored through Engine's operating-system credential broker — never in MCP arguments, model context, or committed files. The Splash studio is a loopback-only page: Goose opens it with open_splash, other harnesses run apps/goose/studio/open.mjs. It links to each provider's key page and accepts values on a separate setup page. Map craft's provider-bearing bake is a fixed Engine operation: each beat supplies a strict story-local MAP-BAKE.json, and Engine verifies camera, GeoJSON/data digests, managed browser, and installed runtime before hydrating MAPTILER_KEY.

Install

Managed journalist install is Indicator Labs on Mac or Windows. Join at buriedsignals.com/join. Indicator Labs adds guided setup, credential management, repair, and automatic updates.

Agent-led manual installation uses the same Engine through its public signed standalone release. Fetch the JSON response for the host platform:

https://navigator.indicator.media/api/artifacts/bootstrap/bsig/<platform>

<platform> is darwin-arm64, darwin-amd64, linux-arm64, linux-amd64, or windows-amd64. Download the returned archive, checksum, signature, and public key; verify both SHA-256 and Minisign before extracting or executing bsig. Then run bsig catalog sync.

Windows 11 amd64 is a prepared host: Engine does not install Goose Desktop, Git, Bun, Docker, or Node. Missing tools fail at plan time. An agent installs the catalog-pinned release with bsig plan install splash, reviews the emitted plan, and applies that exact plan.json. After doctor is green, launch Goose from the Start menu. Do not run install.sh on Windows.

Contributor / development checkout on macOS or Linux:

git clone https://github.com/buriedsignals/splash.git
cd splash
bun install --frozen-lockfile
bash installer/install.sh --bsig /absolute/path/to/bsig

installer/install.sh adopts the checkout through one Engine transaction, installs the dependency and browser payload, runs the no-value smoke check, projects the shipped skills, and registers Splash with Goose when present. Stories and newsroom configuration remain outside the replaceable checkout.

For the canonical manifest, runtime, data-path, and Goose-registration health check, run bsig doctor --product splash.

Skills

Skill Purpose
intake Freezes reporting material into the story source.
storyboard Editorial decisions, format choice, visual approach.
chart-beat / chart-web / chart-video Chart production per delivery format.
map-beat / map-web Map production with Engine-verified bakes.
image-beat Static and illustrated outputs.
scrolly Scrollytelling production.
dw-beat / dw-chart Datawrapper-delegated charts.
analyst Dataset profiling before visual selection.
palette Newsroom palette and visual identity.
newsroom-charter Newsroom configuration and constraints.
doctrine Visual and editorial doctrine.
splash Orchestration and human-gated workflow.
deliver Delivery forms, safeguards, and handover contract.

Documentation

Doc For
AGENTS.md Repository workflow and product constraints.
skills/splash/SKILL.md Orchestration and human-gated workflow.
skills/deliver/SKILL.md Delivery forms, safeguards, and handover contract.
skills/doctrine/SKILL.md Visual and editorial doctrine.
Interactive setup verification Durable implementation evidence and release blockers.
Residual findings Completed delivery hardening and outstanding verification.

What Belongs Where

  • Splash is visual journalism: storyboards, rendered visuals, approvals, and delivery.
  • Spotlight is active OSINT casework: leads, evidence, fact-checks, and review artifacts.
  • Anomaly is structured-data investigation: detectors, replay, reviewed findings, and portable cases.
  • Splash consumes reviewed material from either and produces the visual form readers see.

Attribution

Splash's human-gated production redesign adapts selected ideas from Qinghong Lin et al.'s Data2Story paper and the Data2Story open-source project — especially evidence traceability, explicit planning, and quality review. Splash uses Data2Story as a design reference only: it does not install, invoke, or require Data2Story skills at runtime, and it does not adopt the project's fixed role topology or article-only workflow.

Acknowledgements

Splash stands on open work — open-source projects and open methods. A sincere thank-you to every project below. (Listing does not imply affiliation or endorsement.)

Category Projects we're grateful to
Runtime Bun (Bun Software, MIT)
Rendering React (Meta, MIT) · Remotion (Remotion — video rendering) · D3 (Mike Bostock, ISC — chart geometry and scales) · Resvg (linebender, MIT — SVG rendering) · Puppeteer (Google, Apache-2.0 — browser rendering and proofs)
Maps MapLibre GL (BSD-3.0 — interactive maps) · MapTiler (map tiles)
Charts Datawrapper (Datawrapper GmbH — delegated chart production)
Delivery Cloudflare Pages (Cloudflare — hosted output publishing)
Methodology Data2Story by Qinghong Lin, Batu EI, Yuhong Shi, Pan Lu, Philip Torr, James Zou (arXiv:2606.11176 — design reference for evidence traceability and human-gated production)

Built something here we should credit, or want a listing changed or removed? Open an issue or PR — we'll fix it fast.

License

Splash is available under the MIT License.

About

Splash — Local-first visual journalism for newsrooms

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages