A self-hosted, real-time dashboard for bloccs — mount it into your Phoenix app and watch your running networks: topology in the bloccs hexagon notation, live per-node metrics, and coverage. Modeled on oban_web: a separate package, mounted with one router macro, shipping precompiled assets (no Node build in your app).

Experimental. bloccs_web tracks the bloccs library closely and its API may change between minor versions while both are pre-1.0.

It is observe-only — the dashboard reads the library's Bloccs.Introspect API and the [:bloccs, …] telemetry stream; it never drives the runtime.

Install

# mix.exs
def deps do
  [
    {:bloccs, "~> 0.3"},
    {:bloccs_web, "~> 0.1"}
  ]
end

Mount

# lib/my_app_web/router.ex
defmodule MyAppWeb.Router do
  use MyAppWeb, :router
  import Bloccs.Web.Router

  scope "/" do
    pipe_through [:browser, :require_admin]   # your existing auth
    bloccs_dashboard "/bloccs"
  end
end

Visit /bloccs. The dashboard inherits auth from the pipeline you pipe it through. See the installation guide for the resolver (per-feature authorization) and asset details.

The four panels

  1. Networks — every running network, with node/edge counts and uptime.
  2. Topology — the network graph drawn in the bloccs hexagon notation, node state lighting up live.
  3. Metrics — per-node throughput, latency, error rate, and queue back-pressure, on a rolling window.
  4. Coverage — which ports and edges a run actually exercised, plus a .bloccs-trace viewer.

License & Pro

bloccs_web is Apache-2.0-licensed and free. Some advanced features may later be offered under a bloccs Pro license; the dashboard ships the gating seam (a Bloccs.Web.Resolver) but no license logic — in the open build every feature is on.

Try it locally

From a checkout of this repo:

$ mix deps.get
$ mix dev
# → open http://localhost:4000/bloccs

mix dev boots a standalone Phoenix endpoint with the dashboard mounted, starts a sample orders network, and drives a trickle of traffic so the live metrics and topology animate. (The precompiled app.js bundle is committed, so no Node build is needed; rebuild it with mix assets.build if you change assets/.)