Skip to content

Operator hub

Last green main: b583462 · 2026-06-15T17:57:18.151Z
Shadow cost

$928.07

$648.02 measured; $280.05 estimated
Actual cost

$0.00

Provider or gateway-reported spend when present.
Usage

1,048,018,082 tokens

4,013 events across 4,013 requests
Coverage

62%

4,013 priced events; 0 missing prices
ModelTokensMeasuredEstimatedTotal
anthropic:claude-opus-4.7:standard505,353,223$517.35$0.00$517.35
openai:gpt-5.5541,844,729$130.46$280.05$410.51
openai:gpt-5.4-mini820,130$0.21$0.00$0.21

How this price is calculated

This is a shadow API cost, not a provider invoice. It estimates what the imported usage would cost under API-style token pricing so model, cache, and workflow choices can be compared consistently across subscriptions and local runs.

cost =
input_tokens          * input_rate
+ cached_input_tokens   * cache_read_rate
+ cache_write_5m_tokens * cache_write_5m_rate
+ cache_write_1h_tokens * cache_write_1h_rate
+ output_tokens         * output_rate
+ reasoning_tokens      * reasoning_rate

Rates are per one million tokens. Token classes matter because a cached input token can be much cheaper than a fresh input token, while output tokens are usually more expensive. Tokens with a known class are counted as measured. Aggregate-only tokens are counted as estimated after inferring their input/cache/output mix from the measured sessions.

ProviderTokensShadow cost
anthropic505,353,223$517.35
openai542,664,859$410.72
SourceTokensShadow costUnclassified
claude:local sessions341,987,354$333.090
codex:worker sessions393,091,991$280.05393,091,991
claude:worker sessions163,365,869$184.260
codex:local sessions149,572,868$130.670

Current assumptions: Codex/OpenAI usage is imported from local Codex telemetry; Claude usage is imported from Claude Code project logs; Claude cache reads and cache writes are priced separately when present; Codex worker sessions expose only aggregate tokens, so that portion is estimated; subscription invoices, browser/chat usage, local hardware cost, discounts, regional pricing, and enterprise terms are not included unless supplied as explicit cash assumptions or a runtime pricebook.

Runtime pricebook: bundled fallback; override with AI_COST_PRICEBOOK or --pricebook
Snapshot: last 24h imported Codex/OpenAI and Claude telemetry generated 2026-05-24T10:39:22.227Z; Codex worker sessions are aggregate-only.

Browse articles

Editor browse and search surface for EB-NeRD articles.

Route served by the TypeScript editor against FastAPI /articles.
Docs-site

Astro/Starlight tutorial and operator hub served from the public docs domain.

http://127.0.0.1:4321/
corepack pnpm --filter docs-site dev

Static build passes Astro check and Cloudflare Pages serves the current main artefact.
Editor interface

Express + HTMX editor interface that consumes the FastAPI app contract.

http://127.0.0.1:3007/
npm run dev --workspace=editor

Editor dev server responds on port 3007 and can browse articles through the app contract.
FastAPI Swagger

Swagger UI for the FastAPI app contract served by tutorial-serving.

http://127.0.0.1:8010/docs
uv run --package tutorial-serving uvicorn serving.app:create_app --factory --port 8010

Swagger UI responds locally and the OpenAPI app-contract reference can be regenerated.
Dagster

Dagster OSS asset graph for the serving tutorial data-platform materialisation.

http://127.0.0.1:3000/
make -C tutorial/orchestration dagster-dev

Dagster webserver responds on localhost:3000 or the Spark systemd service is active.
Observable

Observable Framework production static analytical surface selected by ADR-0025.

http://127.0.0.1:3000/dashboard/
corepack pnpm --filter analytical-surfaces-tier1-observable dev

Observable build publishes the analyst dashboards under /dashboard/ on the docs domain.
Evidence.dev

Evidence.dev incumbent analyst dashboard implementation retained as a comparison artefact.

http://127.0.0.1:3000/
corepack pnpm --filter analyst-dashboards dev

Evidence dev server starts after sources are generated against the serving warehouse.
Quarto

Quarto Tier 1 static-surface comparison artefact over the same analytical contract.

http://127.0.0.1:4200/
corepack pnpm --filter analytical-surfaces-tier1-quarto dev

Quarto preview renders the reference views after regenerating the shared JSON data.
Metabase

Metabase Tier 2 BI winner running against the local DuckDB analytical contract.

http://127.0.0.1:3001/
docker compose -f tutorial/analytical-surfaces/tier-2/metabase/docker-compose.yml up

Metabase responds on port 3001 and the seeded Tier 2 dashboard is available.
Rill

Rill Tier 2 metrics-as-code comparison surface retained beside Metabase.

http://127.0.0.1:9009/
docker compose -f tutorial/analytical-surfaces/tier-2/rill/docker-compose.yml up

Rill preview responds on port 9009 using the shared serving warehouse fixture.
Editor interface

Express + HTMX editor interface that consumes the FastAPI app contract.

https://spark-0cf9.tail6a168b.ts.net/editor
npm run dev --workspace=editor

Editor dev server responds on port 3007 and can browse articles through the app contract.
Dagster

Dagster OSS asset graph for the serving tutorial data-platform materialisation.

https://spark-0cf9.tail6a168b.ts.net/dagster/
make -C tutorial/orchestration dagster-dev
systemctl --user status fos-workbench-dagster-webserver.service

Dagster webserver responds on localhost:3000 or the Spark systemd service is active.
Observable

Observable Framework production static analytical surface selected by ADR-0025.

https://spark-0cf9.tail6a168b.ts.net/fos-surfaces/observable/
corepack pnpm --filter analytical-surfaces-tier1-observable dev

Observable build publishes the analyst dashboards under /dashboard/ on the docs domain.
Evidence.dev

Evidence.dev incumbent analyst dashboard implementation retained as a comparison artefact.

https://spark-0cf9.tail6a168b.ts.net/fos-surfaces/evidence/
corepack pnpm --filter analyst-dashboards dev

Evidence dev server starts after sources are generated against the serving warehouse.
Quarto

Quarto Tier 1 static-surface comparison artefact over the same analytical contract.

https://spark-0cf9.tail6a168b.ts.net/fos-surfaces/quarto/
corepack pnpm --filter analytical-surfaces-tier1-quarto dev

Quarto preview renders the reference views after regenerating the shared JSON data.
Metabase

Metabase Tier 2 BI winner running against the local DuckDB analytical contract.

https://spark-0cf9.tail6a168b.ts.net/fos-surfaces/metabase/
docker compose -f tutorial/analytical-surfaces/tier-2/metabase/docker-compose.yml up

Metabase responds on port 3001 and the seeded Tier 2 dashboard is available.
Rill

Rill Tier 2 metrics-as-code comparison surface retained beside Metabase.

https://spark-0cf9.tail6a168b.ts.net/dashboards
docker compose -f tutorial/analytical-surfaces/tier-2/rill/docker-compose.yml up

Rill preview responds on port 9009 using the shared serving warehouse fixture.
Surface review hub

Tailnet review hub for the catalogued analytical surfaces running on Spark.

https://spark-0cf9.tail6a168b.ts.net/fos-surfaces/
static Tailscale Serve route

Tailnet-only Tailscale Serve route for the Spark-hosted analytical surface bundle.
Spark interface catalogue

Spark live interface inventory generated from fos/platform/interfaces/interfaces.json.

https://spark-0cf9.tail6a168b.ts.net/
npm run interfaces:probe

External FOS-hosted catalogue route is reachable on the Spark tailnet.
Model bench report

Local GB10 model evaluation report and artifact browser hosted outside this repo.

https://spark-0cf9.tail6a168b.ts.net/model-bench/
docker --context rootless compose up in fos/infrastructure/model-bench-report

External model-bench report responds on the Spark tailnet route.
Langfuse

LLM trace and token observability UI hosted outside this repo.

https://spark-0cf9.tail6a168b.ts.net:8448/
docker --context rootless compose up in fos/platform/models/observability

External Langfuse UI responds on the Spark tailnet service port.
LiteLLM gateway

OpenAI-compatible gateway for local and hosted models hosted outside this repo.

https://spark-0cf9.tail6a168b.ts.net:8444/v1/models
requires an API key; 401 means the route is alive

External LiteLLM models endpoint may require an API key; 401 still means the route is alive.

Tailnet-only - URLs active when the service is running on Spark. Analytical surface review covers Observable, Evidence.dev, Quarto, Metabase, and Rill. The richer inventory lives in fos/platform/interfaces/interfaces.json and drives the Spark dashboard catalogue.

recent_deliveries: unknown

ADR index

Architecture decision record index for the data platform.

Azure deployment target

Per-component mapping of the local-first platform onto Azure services with Bicep, GitHub Actions, and operator runbook targets.

Mapping doc | ADR-0028 | Azure artefacts

make -C deploy/azure azure-validate
make -C deploy/azure azure-up
make -C deploy/azure azure-cost
make -C deploy/azure azure-down

Azure is a mapped deployment target for the existing local-first platform, not an Azure-native migration. Routine verification uses Bicep validation and Make dry-run output; live azure-up runs only in an operator subscription.
ADR-0031 model lifecycle

Register, evaluate, promote, and roll back embedding model candidates.

build-time fetch: the main deploy job waits for the editor and serving CI jobs to pass, downloads their generated artefacts, writes docs-site/src/data/status.json, and then builds the docs site. The deployed hub is static HTML with no API keys and no live client-side JavaScript.