W-04 · Case study
CardanoTreasuryExplorer
The focused, shippable piece that came out of a broader research effort into Hydra L2 microtransactions — after that effort hit limits no amount of code could fix.
- Shipped as a CLI. Live posting needs a funded X API account.
- Blockprint — Cardano tooling
- Cardano mainnet via Blockfrost
- Dry-run mode previews every post
- TypeScript · Node.js · Blockfrost API · X API v2 · node-cron · chalk + cli-table3

Thesis
Descoping is an engineering decision, not a retreat.
§ 01
Where it came from
The original question was whether posts on X could trigger ADA microtransactions on a Hydra Head. That research ran into hard constraints — node sync time, Hydra's liveness requirement, X API pricing and regulatory exposure — documented in the sibling project, x-hydra-tweet-engine.
The treasury monitoring half worked. So I cut the project down to that: something that runs against real data and can be shipped.
§ 02
The problem it solves
Cardano's treasury and governance activity is public, but in practice it is invisible — it sits behind APIs rather than anywhere a person would casually see it. A readable, recurring summary makes it legible.
§ 03
The system
A scheduler polls Blockfrost for treasury, reserves, epoch activity and governance withdrawals; core logic computes the change against the previous epoch and flags anomalies; snapshots are stored locally; the display layer renders the dashboard; and a posts module produces four kinds of update, each within X's 280 characters. A backfill script loads historical epochs.
Diagram 01
One polling cycle
A new epoch starts.
The scheduler triggers a poll.
Every stage, in words
- 01Tick (scheduler.ts · node-cron) — The scheduler triggers a poll.
- 02Read (blockfrost/) — Treasury, reserves, epoch stats and governance withdrawals from mainnet.
- 03Compare (core/) — Change since the previous epoch, plus an anomaly flag.
- 04Store (db/ · treasury.db) — Keep the epoch snapshot for history and future deltas.
- 05Display (display/ · chalk, cli-table3) — Render the live terminal dashboard.
- 06Post (posts.ts → twitter.ts) — Format one of four post types (≤ 280 chars). Dry run prints it; live mode sends it.
§ 04
Constraints
The free Blockfrost tier doesn't include the governance proposals endpoint. That read is isolated in its own try/catch, so the rest of the bot keeps working without it. Live posting needs a dedicated account with a funded X API credit balance, so the default mode is a dry run.
§ 05
Next
- A dedicated bot account with funded API credit for live posting.
- Possibly revisiting Hydra for microtransaction-level treasury tracking.