Agentic validator alerting service
Running · preprod
An always-on, self-hosted service that watches a Substrate telemetry feed, detects validator
anomalies, and posts factual alerts to Discord. It replaces a browser-tab-bound webhook that
only fired while someone had a dashboard open, and automates the always-on detection step of a
human-staffed off-hours support tier.
- A model never decides whether to page. Detection is deterministic - thresholds ported from a tested dashboard fork, with edge-triggered deduplication. A self-hosted open model composes only the human-readable summary line, behind output guardrails, and was adversarially tested.
- ~4,300 lines of TypeScript across 22 source and 7 test modules, 85 tests, Dockerised, with a status page, live reasoning view and daily digest.
- Emits action tiers (PAGE NOW / NOTIFY / LOG) rather than P-levels, so the alert says what to do rather than how bad someone thinks it is.
- Runs at roughly $56/month in self-hosted infrastructure with no per-token API cost. Four deployment defects were found and fixed in local VM validation before any cloud spend.
- Ships as an infrastructure-as-code leaf with a digest-pinned image. Webhook URL and the per-validator contact roster never enter the repository - only a template with empty arrays.
- TypeScript
- Node.js
- Docker
- Ollama
- OpenTofu
- GCP
- Substrate telemetry
- Multipass
Validator node module with WireGuard overlay
Local-tested
An OpenTofu/Terraform module for a GCP validator that adds what the existing shared module
lacks entirely: a trusted WireGuard overlay configured on the host, not just a firewall rule.
- The private key never enters instance metadata. cloud-init ships a config template without it; a boot script fetches the key from Secret Manager at first start.
- Re-runs use
wg syncconf, not wg-quick down/up - so a config change cannot partition a live validator mid-apply.
- No autoscaler, deliberately. Scaling out a keyed validator produces a duplicate block producer. Metrics firewall is closed to health-check probe ranges instead of the internet.
- Placed as a CI-visible subdirectory consumed by nothing, so iteration produced five no-op plans and zero risk to mainnet. Gated on a two-VM Multipass mesh test before any cloud work.
- OpenTofu
- GCP
- WireGuard
- cloud-init
- systemd
- Secret Manager
- Bash
Signed chain-snapshot distribution
Design of record
A design for weekly, cryptographically signed, publicly verifiable chain snapshots. It exists
because syncing a node from genesis was measured at ~0.2 blocks/sec against a chain advancing
at 10 blocks/min - an unaided bootstrap that effectively never converges.
- Allowlist, never exclude-list, when packaging. The node's base path also holds its keystore and network secret. An allowlist fails closed; an exclude-list fails open and publishes a node key.
- Both database trees or nothing. The chain store and the ledger store are siblings and must be captured at one instant; a partial artifact is silently broken.
- A signature proves publication, not correctness. The signature proves who published the bytes; a published chain attestation - height, block hash, state root, cross-checkable against the live chain - is what makes forged state detectable even under key compromise.
- Publish order is upload, sign, verify from a clean host, human approval, then flip
latest. Never the reverse.
- cosign
- Cloud KMS / HSM
- GCS + CDN
- ParityDB
- Threat modelling
Feasibility spike: replacing a heavyweight data dependency
Verdict delivered
Node operators are told to provision 500 GB NVMe and 32 GB RAM, and the guide names Cardano
sync as the long pole. That pole is cardano-db-sync plus PostgreSQL.
Could a lighter Cardano data node (Dolos,
documented under 2 GB RAM) take its place?
- Answer: not by configuration today - and here is precisely the seam. Ruled out three integration paths by reading source, with citations, before launching a single VM.
- The node reads db-sync over raw SQL, so there is no RPC layer to intercept; and the candidate has no PostgreSQL surface at all, which rules out a wire-protocol shim.
- Upstream already ships a data source for it - but unreleased and stalled, absent from the latest tag, with a divergence found in a consensus-critical query. The vendored fork predates all of it and returns "not implemented yet". That match arm is the seam.
- Stated the honest ceiling on my own result: a second db-sync-bound component sits outside the upstream toolkit, so a green result must not be reported as "the dependency can be dropped".
- Rust (source analysis)
- PostgreSQL
- Docker Compose
- Multipass
- Ouroboros / CBOR
Infrastructure platform plan
Plan of record
The platform-level plan for a multi-environment validator estate on GCP and how it is deployed
and governed through infrastructure as code - project topology, secret model, boot nodes,
snapshots, data-source topology, ephemeral environments and agentic operations, as ten
workstreams with stable identifiers.
- Killed a proposed design by verifying it. The node has zero KMS integration - keys are plaintext files - so a KMS-as-signer model was unreachable. Redirected KMS to artifact signing, where the signer is KMS-aware, and met the actual goal (security owns keys, operators cannot read them) with a separate project using Secret Manager and customer-managed encryption keys.
- Merging is deploying, and a change to the shared module fans out to every environment including mainnet - so node changes stay leaf-only. Documented as a blast-radius rule.
- Agent-readiness starts with a docs-truth pass. Roughly a dozen claims in the repository's own documentation contradicted its code. A human skims past that; an agent asserts it.
- Authority ceiling for any agent in the plan: propose a change, never merge. Automated remediation is explicitly out of scope.
- OpenTofu
- GCP
- Secret Manager
- Cloud KMS / CMEK
- Architecture review
Operations portfolio as supervised AI workflows
In daily use
Ten operational workstreams - operator communications, leadership reporting, SLA review,
off-hours incident handover, roadmap, platform planning and more - run as AI-assisted workflows
rather than ad-hoc prompting.
- Each workstream has a written protocol, a confidentiality tier and an approval gate. Nothing publishes, sends or posts without explicit human approval.
- Facts are verified against read-only clones of the source-of-truth repositories rather than paraphrased from memory - the rule that catches stale versions and invented flags.
- Includes a monthly classification of my own function on an agentic-versus-AI-resistant grid, to decide what to automate and where human effort is genuinely irreplaceable.
- Claude Code
- Agentic workflow design
- Ollama
- Human-review gates
- Markdown protocols
Zero-cost job-market pipeline
Running weekly
Rather than searching aggregators, enumerate the employers worth working for and poll their
applicant-tracking systems directly. Python standard library only - no dependencies, no API
keys, no paid calls anywhere in the loop.
- Normalises three different ATS payload shapes into one schema, tracks seen postings, then scores against a weighted profile behind a hard location gate. ~1,100 postings down to ~15.
- Two scoring defects found and fixed on the first run, both instructive: description-based domain scoring inflates every posting at a crypto company, so domain words now score at full weight in the title and one third in the body; and a loose location term matched the prose "allows us to", passing a posting from the wrong continent.
- Tuned to over-include rather than miss, with the threshold exposed as configuration and the limitations written down rather than glossed.
- Python 3 (stdlib)
- Greenhouse / Lever / Ashby APIs
- JSON
- Deterministic scoring
Midnight Contributor Hub
Public
A GitHub-based community bounty program I created, turning a Discord community into people who
ship. More than 50 bounties published.
- Founded the Midnight Discord community, now roughly 50,000 members, and advised the ambassador cohort on building on the network.
- Represented Midnight at 15+ conferences including Consensus and Blockchain Rio; judged and mentored hackathons in Argentina, with activations designed to convert attendees into active contributors.
- GitHub
- Community programs
- Developer advocacy
Developer and operator documentation
Maintained
I started my career as a technical writer and never stopped owning the docs. Restructured
developer onboarding around a new Getting Started path built from real developer feedback.
- Onboarded a private alpha cohort of roughly 700 developers, managing API access programmatically and driving 100+ feedback issues into product and engineering - many of which shipped as features.
- Owned documentation delivery from closed alpha through public devnet and testnet milestones.
- Launched ETC Signal, an ecosystem newsletter carrying network changes to 200+ exchange, wallet, validator and security-operations stakeholders at a ~51% open rate.
- Technical writing
- Docs-as-code
- Developer onboarding
- API programs