MMeridian

Docs

Meridian, in full

One trace, every rail. This page is the condensed technical reference — the source docs (PRD, ARCHITECTURE, SIGNOZ_LAYER) live in the repo.

What this is

A company running fiat-to-crypto payments can, for the first time, see a stuck payment as one connected story and tell instantly which system failed. Meridian instruments a Nigerian-merchant settlement pipeline — NGN payment → processor → FX → real Celo Sepolia transaction — end to end with OpenTelemetry, emitting one distributed trace per payment into self-hosted SigNoz. The blockchain leg is genuinely real; everything else is a mock service this project owns. No LLM sits in the diagnosis path — a published rule table maps observed signals to a named verdict, deterministically.

Tech stack

Next.js 16Frontend — landing, /pay, /dashboard
Express + tsxpayment-api, mock-processor, settlement, rpc-proxy
viemReal Celo Sepolia transactions — estimate gas, sign, send, wait for receipt
OpenTelemetry SDK (Node)Traces, metrics, and logs from every service
SigNoz (self-hosted via Foundry)Traces, Tracing Funnels, alerts, dashboards, logs — the primary interface
PostgresSettlement records
Celo SepoliaThe one real, un-fakeable leg of the pipeline

Deterministic diagnosis (no LLM)

A published rule table maps observed span signals to a named verdict with confidence and evidence. Same telemetry in, same verdict out — every time.

Observed signalVerdictConfidenceVisibilityEvidence
send ok, no receipt after N blocksconfirmation_timeoutlowinferredno mempool visibility from provider
estimate_gas returns revert datacontract_revert_pre_broadcasthighobservedrevert reason string
submitted nonce < pending account noncestale_noncehighobservedgetTransactionCount vs submitted nonce
provider.charge ok, no webhook after Tprovider_stallmediuminferredno visibility past processor boundary

The SigNoz layer

Tracing Funnel

receive_payment → provider.charge → on_confirmation → chain.settle → balance.update → merchant.notify. Shows conversion rate and drop-off point across many settlements — the fleet view.

Alerts

chain.wait_for_receipt p95 breach, provider.charge error-rate spike, and a business-framed alert: settlements delayed in the last 10 minutes.

Metrics dashboard

Per-provider p95 latency side by side, and a value-delayed gauge in NGN — the ₦ figure that makes a stall legible to a non-technical judge.

Logs correlated to traces

Structured logs at each stage carry the same trace ID, so SigNoz's trace-to-logs view connects them automatically.

MCP server

Deployed alongside SigNoz via Foundry, wired into this project's .mcp.json — used for direct trace/log investigation during development.

Reproducing this deployment

SigNoz is self-hosted via Foundry. The repo includes casting.yaml and casting.yaml.lock — running foundryctl cast against them reproduces this exact deployment, SigNoz app plus MCP server, in one step.