What we ship
Liquid State ships continuously — new free crypto tools, live-data surfaces, and product improvements. This log is built straight from our release record. 100 recent updates.
2026-06-30
Product3-step in-app checklist (profile→guide→brief) on /the-edge
Market intelcurated newsjack seed: Ethereum Foundation cuts 54 jobs / 40% budget, shifts to endowment model — drains into the autonomous Brief pipeline
NewBitcoin Whale Transaction Feed — live $1M+ unconfirmed-tx ticker, embeddable, free blockchain.info+Binance data
Designhover states on /indicators card grid — gold left-accent + micro-lift + arrow nudge (matches /tools treatment)
NewSolana Network Stats Dashboard — live TPS/slot-time/epoch/fee widget; ~30K/mo keyword cluster; embeddable; free Solana JSON-RPC
SEOadd FAQPage JSON-LD (4 Q&A pairs) — bitcoin rainbow chart ~50K/mo, eligible for Google rich results + AI citations
NewETH/BTC Ratio Live Chart — /tools/eth-btc-ratio: live ETHBTC ratio, 365d SVG chart with 90d SMA overlay, rotation signal label (5-zone percentile rank), embed code, NewsletterCTA; Binance ETHBTC klines free/no-key; targets ~31K/mo "eth btc ratio" searches
NewFree embeddable /tools/eth-gas: live EIP-1559 base fee (gwei), Slow/Standard/Fast tiers with USD per tx type (ETH/ERC-20/Uniswap), 50-block sparkline, congestion label, 60s auto-refresh, embed mode; OG card; FAQ JSON-LD; public Ethereum JSON-RPC + Binance ETHUSDT; ~60K/mo keywords; board 3/3 SHIP
Market intelUK FCA final crypto framework — mandatory licensing Sep 2026–Feb 2027, effective Oct 2027; trading venues/custodians/stablecoins in scope
NewDynamic OG preview cards for 49 tool pages — /api/og/[slug] returns 1200×630 branded PNG with live market data; gated NEXT_PUBLIC_DYNAMIC_OG_ENABLED=1; fail-soft redirect to /og-card.png on render failure
NewBitcoin vs Gold (PAXG) Correlation & Performance Tracker — 90d rebased perf chart + rolling 30d Pearson correlation; corrLabel narrative; embed mode; FAQPage + JSON-LD; free Binance BTCUSDT+PAXGUSDT data
NewDiscord Market Intelligence Bot — 4 slash commands (/market-state, /regime, /funding-rate, /barometer) via HTTP Interactions endpoint; zone-based embed colors; UTM-tagged links; /discord-bot landing page with JSON-LD schema; ships
NewQuizPromoCard between cards 2+3 on /guides + /playbooks → links /quiz email-capture funnel
NewDeFi TVL & Protocol Rankings Dashboard — 180-day TVL chart, top-15 protocols, category breakdown (liquid staking/lending/DEX/yield), regime label (Expansion→Compression), embed mode, FAQPage schema; free DefiLlama API
NewContextual NewsletterCTA on all 28 tool pages — source + headline props on every non-embed path → ~45 leads/mo targeted
NewETH/BTC Ratio & 90-Day Performance Chart — rebased dual performance + ratio sub-chart + regime label + embed; free Binance 1D klines
Distributiongenerate.js trigger endpoint closes repurpose pipeline gap — finds newest unqueued article, calls generateVariants(), queues X/Telegram/Shorts/recap variants
New3-stat Live Now strip on /access (regime+brief+BTC signal) lifts checkout-start rate; ships
NewBitcoin Pi Cycle Top Indicator — daily 111DMA vs 2×350DMA convergence chart with regime label (Top Signal/Caution/Bull/Accumulation), crossover detection, historical top table, embed mode, FAQPage schema; free Binance 1D klines
Market intelBinance EU MiCA suspension seed — deadline-day execution spike; regulatory intelligence on world's largest exchange losing EU market access July 1; 27-member-state impact, MiCA passporting mechanics
New/welcome conversion page — LOCKED label fix + smoke route + backlog closure; gold CTA → /access fires at peak-intent 90s after email submit
NewBTC Weekly Returns Distribution — SVG histogram of 520+ Binance weekly candles, current-week percentile rank, median/mean stats, embed mode, FAQPage schema; free Binance 1W klines
Newrepurpose_queue drain hardened: added isCronAuthorized guard + vercel.json cron entry (0 */4 * * *) + FEATURE-FLAGS docs — queue-and-drain infra now production-ready; ships
2026-08-22
DistributionAdded `BreadcrumbList` + `ItemList` JSON-LD to `components/assets/AssetsDirectory.js` — the view behind `/assets` and `/assets/page/2..N` (up to 1000 ranked crypto assets), which had ZERO structured data even though every individual `/assets/<slug>` detail page it links to already carries FAQ schema. Same pattern as the 2026-08-21 `/embed` ship (b2f6f4d): the directory-level `WebPage`/meta tags told a crawler the page exists but nothing about what's on it. Each row becomes a `schema.org/Thing` ListItem (`name`, `identifier`=symbol, canonical `url`) — deliberately NO price/market-cap/volume in the JSON-LD, since those refresh client-side every 60s while the page is ISR-cached (`revalidate:300`), so embedding them would go stale inside the cache window; used `Thing` rather than `Product`/`FinancialProduct` to avoid any implied price claim. `ItemList` is null-guarded on `rows.length` so a data-fetch failure (e.g. this sandbox's CoinGecko 403) renders no malformed script tag, verified both via `npm run build`/`next start` (empty-data path) and a standalone Node reproduction of the mapping logic against mock rows (populated-data path). Independent adversarial reviewer: SHIP — confirmed `jsonLdSafe` used for both new script tags, all referenced row fields (`asset.name/symbol/slug`, `rank`) already consumed elsewhere in the same file with no undefined risk, `from`/`to` pagination math is always a clean multiple of 100 so no partial-page edge case, no duplicate `ItemList`/`BreadcrumbList` elsewhere on the route. `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN, `node scripts/tests/run.mjs` GREEN 60/60.
2026-08-20
DistributionAdded the Systems Desk public paper-strategy record (`/systems`, `/api/systems/summary`) to the "Citable data" section of `pages/llms.js` (CITABLE array) and `scripts/generate-llms-txt.mjs` (which regenerates `public/llms.txt` on every build via `prebuild`) — the site's own CLAUDE.md calls this record "the one non-reproducible asset" and it was built + linked from the homepage/OG cards on 2026-08-19, but the AI-agent-facing citation manifest (the surface ChatGPT/Perplexity/Claude actually read to decide what to cite) never mentioned it. Copy is honest-by-construction: "paper, not live capital", "losses are shown, never hidden", no return/performance figures asserted. Independent adversarial reviewer verified the new copy against `pages/systems/index.js`/`pages/api/systems/summary.js` (claims all true), confirmed `public/llms.txt` regenerates byte-identical from the script (no drift), and confirmed the diff is additive-only (3 files, +6/−2 lines). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (incl. `/systems`, `/systems?embed=1`, `/api/systems/summary`, `/llms.txt`), `node scripts/tests/run.mjs` GREEN 58/58.
2026-08-11
NewBarometer New-Tab Takeover — added a Manifest V3 `chrome_url_overrides.newtab` page (`extension/newtab.html`/`.js`/`.css`) to the already-shipped browser extension, converting the low-frequency toolbar-badge mechanic into a high-frequency ambient one (3-8 new-tab opens/day per install). Reads `chrome.storage.local` only (zero new fetch, mirrors `popup.js`'s exact `REGIME_COLORS`/`escapeHtml`/loading-guard/render pattern), includes a working Google-search `<form>` so replacing the default new tab doesn't break the user's workflow. `manifest.json` bumped to `1.1.0` with `chrome_url_overrides.newtab` added; `permissions`/`host_permissions` byte-identical (no permission creep). Two new UTM CTAs (`utm_source=extension_newtab&utm_medium=newtab&utm_campaign=barometer-newtab`, distinct from the popup's `extension` bucket) to `/tools/dashboard` and `/tools/market-barometer` — `lib/bot-detect.js`'s `deriveChannel()` passes `extension_newtab` through with zero code change, so it will appear as a new `viewsByChannel7d` key once traffic flows. One copy-only line added to `pages/extension.js` (existing `NEXT_PUBLIC_EXTENSION_PAGE_ENABLED` gate untouched); `extension/background.js`/`popup.js`/`popup.html` byte-identical. Regenerated `public/liquid-state-barometer-extension.zip` (9 entries, `unzip -t` clean). No runtime flag on the new-tab files themselves — an explicit, documented exception (they're static assets inside a self-hosted "Load unpacked" zip, not a live site path; nothing server-side to gate). Blueprint `docs/loops/briefs/extension-newtab-takeover.md`. Self-grade (fresh-context grader) 96/100 MEETS-BAR yes, GAPS: none. Panel unanimous 4/4 SHIP (correctness verified every DoD line directly incl. zero Supabase touch; security confirmed every dynamic value in `newtab.js` passes through `escapeHtml()`, `permissions`/`host_permissions` genuinely unchanged via raw diff, no `externally_connectable` so no page can poison storage; brand/UX confirmed the new-tab layout reads as a faithful larger-canvas extension of the popup's design language, search box is a genuine working `<form>` not decorative; thesis/mechanism confirmed the full chain — install → new tab → two tagged CTAs → `deriveChannel()` passthrough — exists in-diff). `npm run build` GREEN (after a fresh `npm install` — `node_modules` was missing at session start), `node scripts/loops/smoke.mjs` GREEN (no new routes — static extension bundle, not Next.js). No checkout added — Gate 2b n/a. Post-merge healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure). **Known limitation, spec-acknowledged:** existing "Load unpacked" installs will NOT auto-update — Chrome only auto-updates Web-Store-installed extensions, so this only compounds for new installs from this point forward. **Measurement honesty:** this is a reach/distribution thesis on an extension with a near-zero external install base (self-hosted zip only, no Chrome Web Store listing yet) — `viewsByChannel7d.extension_newtab` is expected to read neutral/absent at the ≥7-day mark until installs accumulate; that is the expected state, not a failure.
2026-08-05
NewNurture Sequence Final Touch (Step 7) — closes the dead-end after the existing 6-step free-list nurture sequence: `lib/lead-emails.js` appends `{ step: 7, afterDays: 10 }` to `NURTURE_STEPS` (~day 21 from signup), bumps `FINAL_STEP` 6→7, adds a `FINAL_TOUCH` campaign-tag helper (`campaign: 'nurture-final'`) mirroring the five existing siblings, and adds `BUILDERS[7]` — a two-branch (personalized via `pickGuide(profile)` / fallback to `/access`) honest recap email in step-2's value-tips tone, no fake urgency ("last scheduled email... then we go quiet unless there's real signal"). `pages/api/newsletter/nurture.js` widens the profile-prefetch filter (`nurture_step` 5 → `[5,6]`) and the `opts` assembly condition (`next===6` → `next===6
2026-08-02
NewIn-App First-Login Product Tour for New Paid Members — new `components/dashboard/FirstLoginTour.js`, a one-time skippable spotlight overlay for a brand-new PAID member's first Desk session, distinct in mechanic from the existing email drip and passive `OnboardChecklist`. Candidate 3-step list (`concierge`/`liquid-state-index`/`trader-profile`, all verified real ids in `components/dashboard/registry.js`) is DOM-verified at runtime — filtered to ids present in the member's saved `state.widgets` layout AND resolvable via a live `[data-wid]` node (added in a self-grade round 2 fix: the first pass only checked list-membership, which could mount a broken spotlight if `DESK_SIDEBAR_ENABLED` were ever off) — zero resolved targets means no mount at all, never a broken/empty overlay. Deliberately excludes `daily-read` (confirmed off by default) and the Reserve-tier-only `volume-profile`/`mtf-trend` from the default candidate set. Gated on `gate.isMember === true` (explicit, never falsy — `isMember` is `undefined` while resolving) reusing the Desk's existing `gate` const, no new hook call; flat no-PII `ls_first_login_tour_v1_seen` localStorage flag (fail-toward-hidden on storage errors) mirrors `traderProfileWidget.js`'s convention. Mounted in `components/dashboard/DashboardApp.js` right after the `AiOrb` block, wrapped in `{FIRST_LOGIN_TOUR_ENABLED && state && (...)}`. Spotlight ring/scrim/tooltip use only `C.*` theme tokens (a raw `rgba()` shadow literal from the first pass was replaced with `C.elev3` in round 2), `scrollIntoView` for below-the-fold targets, Escape-to-skip. No new schema/checkout/cron/AI cost/route — pure client-side. Blueprint `docs/loops/briefs/paid-member-first-login-tour.md`. Self-grade round 1: 70/100 MEETS-BAR no (DOM-verification gap + non-token shadow); both fixed; round 2: 92/100 MEETS-BAR yes. Panel unanimous 4/4 SHIP (correctness confirmed the fixes land and no existing call-site/route breaks, zero Supabase touch; security confirmed no new route/endpoint, no PII in the storage key, and a forged client-side `isMember` at worst reveals generic onboarding copy — not gated data; brand/UX confirmed the scrim+ring+card chrome matches `DeskAlertCapture`'s established Desk visual language and the 3 copy lines are concrete, not generic SaaS boilerplate; thesis/mechanism confirmed the `activeSubs`-readiness mechanism — flag+gate+DOM-verified spotlight — is fully present in-diff). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (no new route — Desk isn't in the generic smoke sweep). No checkout added — Gate 2b n/a. Post-merge healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure). Flag `NEXT_PUBLIC_FIRST_LOGIN_TOUR_ENABLED` confirmed unset anywhere in `.env.production`/`.env.example` — ships dark, inert until the owner confirms copy/widget selection and flips it. **Measurement honesty (per the blueprint's §0):** `activeSubs` reads 0 today (no live payer) — this ship cannot move that number this cycle; it's a readiness investment that proves itself the next time a real payer's first Desk session happens, not a KPI-moving row this week.
2026-07-30
NewAEO fix — added `FAQPage` JSON-LD (4 Q&A pairs) + a matching visible "Frequently asked questions" card to `/tools/market-breadth`, pushed as the 3rd element of the page's existing single-array `jsonLdSafe([...])` JSON-LD call (not a new script tag, matching this page's own established convention). FAQ answers cross-checked against `REGIME_COPY` and the page's existing educational blurb for zero factual drift; descriptive/historical framing only, no advice language. Also regenerated + committed `public/llms.txt` with `NEXT_PUBLIC_MARKET_BREADTH_ENABLED=1` set so the committed copy matches what real Vercel deploys already generate (repo hygiene — confirmed the live site's llms.txt self-heals on every deploy via the existing `prebuild` script regardless). No flag needed (page already always-on), no schema/checkout/cron. Self-grade round 1: 80/MEETS-BAR yes, one gap (llms.txt regenerated but not committed in the first commit) — fixed same round via a second explicit `git add public/llms.txt` commit, re-gated GREEN. Panel unanimous 4/4 SHIP. `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (`/tools/market-breadth` already in the route list). No checkout — Gate 2b n/a. Post-merge healthcheck GREEN. Judged externally by `loop-aeo`'s next 2-3 re-probes of "crypto market breadth indicator" (CITED = success), not a kpi-latest.json field.
NewPersona-sharpened lead-capture headline copy on the two highest-intent surfaces — the Desk's `NewsletterCTA` (`/tools/dashboard`, keyed off the visitor's own saved widget layout via the existing `loadState()`: derivatives ids `pro-orderbook`/`pro-trades`/`liq-heatmap`/`liq-tape`/`funding-rates`/`funding-heatmap` → trader copy, any `pi-*` Portfolio Intelligence widget → holder copy) and the Brief article-exit `DeskPlate`'s `askEmail` headline (`/brief/<slug>`, keyed off the article's existing `category` field — Derivatives Positioning/Fed Watch/Technical Analysis → trader, On-Chain/DeFi-Macro → holder). Ambiguous/no signal falls back to the exact original generic copy on both surfaces (byte-identical). Zero new capture logic/endpoint/schema — only a new pure `lib/persona-capture-copy.js` classifier + a headline-value swap at 2 existing call sites. Flag `NEXT_PUBLIC_PERSONA_CAPTURE_COPY_ENABLED`, default ON per spec (instant kill switch), FEATURE-FLAGS GROUP 3p. Self-grade 95/MEETS-BAR yes. Panel unanimous 4/4 SHIP (correctness confirmed byte-identical fallback + zero schema touch; security confirmed no XSS/no gating change; brand/UX confirmed non-hype specificity upgrade with sound fallback discipline; thesis/mechanism confirmed the unchanged capture form renders inside the same block as the new headline on both surfaces). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (both surfaces manually verified via `next start` — generic fallback confirmed at `/tools/dashboard` SSR, persona classifier logic unit-verified for all 5 signal states). No checkout — Gate 2b n/a. Post-merge healthcheck GREEN.
2026-07-26
NewToken Unlock & Vesting Calendar — new `/tools/token-unlocks` + `/api/tools/token-unlocks`, a cross-project token-unlock calendar (30-day window, ranked by est. USD value) sourced from DefiLlama's free `/emissions` list (zero new external call — reuses the same cache `getLlamaUnlocks` already fetches) joined against the site's own asset-price snapshot. Resolves the roadmap's longest-standing "researched, not yet buildable" candidate. Flag `NEXT_PUBLIC_TOKEN_UNLOCK_CALENDAR_ENABLED` (default off). Board 3/3 SHIP, self-grade 84/MEETS-BAR yes.
2026-07-24
Market intelCurated newsjack event seed appended to `data/newsjack-events.json`: Senate CLARITY Act (crypto market-structure bill) passage odds fell ~46%→38% on Polymarket after Senate Republicans' revised draft drew Democratic opposition over ethics-provision gaps, with Majority Leader Thune saying it likely misses the summer-recess window. Non-duplicative of 5 prior newsjack passes on this same bill (2026-07-02→07-17), all of which stopped at "still speculative" — this is a genuinely new, resolved development. Strictly information-not-advice, all figures attributed to CoinDesk 2026-07-23. Existing autonomous Brief pipeline (`monitor-curated` → `process-events` → `generate`) drains the seed on its own cadence. Independent reviewer confirmed scope/brand/non-advice/non-duplication, SHIP. `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN, self-grade 92/100 MEETS-BAR yes. Post-deploy healthcheck GREEN.
2026-07-20
NewFixed the blog "Related Guide" CTA (rendered on all 49 posts): every `GUIDE_INFO` entry's `href` was the literal string `/guides` (generic hub, never the matched guide) with zero UTM tagging and zero `trackCtaClick` instrumentation. `pages/blog/[slug].js` — all 10 `GUIDE_INFO` entries now point to their real `/guides/<slug>` route (verified byte-correct against `data/guides-config.js`); the Related Guide `<Link>` gained `onClick={() => trackCtaClick('Guide Cross-Sell', `blog-${post.slug}`)}` + a UTM-tagged href (`?utm_source=blog-<slug>&utm_medium=tool-cta&utm_campaign=guide-crosssell`), mirroring the already-shipped tool-page `GuideCrossSellCTA` UTM shape exactly. Took the blueprint's recommended path B (hand-add to the existing box) over swapping in `GuideCrossSellCTA` wholesale, since that component renders different copy/pricing text — reuse would have broken the spec's own "no copy change" guardrail; verified zero copy/style delta in the diff. No new flag (correctness+instrumentation fix to an already-live CTA, not new gated functionality), no schema, no checkout. Self-grade 97/100 MEETS-BAR yes, GAPS: none. Independent 4-reviewer panel unanimous SHIP (correctness, security, brand/UX, thesis/mechanism all confirmed the mechanism is genuinely new and in-scope). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN — no checkout, Gate 2b n/a. Manually verified via `next start`: rendered HTML for `/blog/chainlink-oracle-defi-guide` shows the corrected href `/guides/crypto-macro?utm_source=blog-chainlink-oracle-defi-guide&utm_medium=tool-cta&utm_campaign=guide-crosssell` and unchanged box copy. Post-deploy healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure).
Market intelCurated newsjack event seed appended to `data/newsjack-events.json`: US federal regulators (six agencies incl. Federal Reserve, OCC, FDIC, NCUA, Treasury) missed the GENIUS Act's July 18, 2026 statutory deadline to finalize stablecoin-issuer rules. Cleared every newsjack
2026-07-17
New**Tier-Fit Guide + Value Comparison on `/access`.** New page-agnostic `components/pricing/TierFitGuide.js` (3-question client-side quiz, no DOM/network/localStorage) + `components/pricing/ValueComparisonNote.js` (static, WebSearch-reverified July 2026 sourced copy: Glassnode ~$49–$999/mo, CoinGlass $29–$699/mo vs. The Reserve $149/mo), wired into `pages/access.js`'s `#pricing` section — the quiz's `onSelectTier` → a new `handleTierFit` scroll+highlight into the matching `[data-tier="intel"
2026-07-14
NewAdded a fenced `curl` + trimmed JSON request/response example for each of the 6 `/api/agent/*` REST routes plus one `tools/call` JSON-RPC pair for the flagship `get_market_state` MCP tool, on both `public/llms.txt` (edited the template literal in `scripts/generate-llms-txt.mjs`, regenerated) and `pages/llms.js` (new `example` field per `AGENT_ENDPOINTS` entry + a shared `PRE_STYLE` const reused across all 8 `<pre>` blocks). WebSearch-confirmed differentiator vs. CoinGecko/Kraken developer docs, which both ship example snippets alongside their endpoint lists. `/api/agent` (index) and `/api/agent/guides` examples are REAL — live-captured off a local dev server; the guides catalog is the static `data/guides-config.js` catalog (no Supabase call). The other 4 REST examples (market-state/briefs/derivatives/market) are shape-illustrative — this build sandbox's egress-restricted proxy blocks both Supabase and OKX, so live capture wasn't possible; every field name/shape is traced verbatim from `lib/agent-data.js`, and — a deliberate, disclosed deviation from the blueprint's 'hide the caveat in a code comment' instruction — each illustrative block carries a VISIBLE 'illustrative — call live for current numbers' note in the rendered output, favoring the charter's 'no fabricated numbers presented as real' guardrail over snippet purity. The MCP `tools/call` example preserves the real double-encoded envelope (`result.content[0].text` as a JSON string, not flattened), the one shape a developer would otherwise learn only by calling blind. Blueprint `docs/loops/briefs/agent-docs-example-snippets.md`. Self-grade 93/100 MEETS-BAR yes (one cheap gap fixed pre-panel: imprecise 'Supabase-backed' ledger wording). Independent 4-reviewer panel unanimous SHIP; correctness reviewer flagged one non-blocking fidelity gap post-panel (the `pages/llms.js` guides example omitted `description`/`notice` present in `public/llms.txt`) — fixed before merge (`a368c8e`), re-ran Gate 1/2 green. No new route/schema/flag/checkout/AI/PII/mass-email — pure content on already-live, always-on public surfaces (`pages/llms.js` still gates on the pre-existing `NEXT_PUBLIC_LLMS_PAGE_ENABLED`, untouched). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (added `/llms.txt`, `/api/agent`, `/api/agent/market-state`, `/api/agent/market` to the smoke list; excluded `/api/agent/briefs` + `/api/agent/derivatives?symbol=BTC` — they hard-fail 500/502 with no local fallback when Supabase/OKX are unreachable, the same sandbox-egress exclusion class already used for `/api/tools/liquid-state-index` and the gamma-exposure family, unrelated to this diff). Post-deploy healthcheck GREEN.
NewNew nurture-sequence step 3 (`lib/lead-emails.js`) pitches the free Liquid State account ("your own Desk, saved" — layout/watchlist/trader-profile persistence) to Brief email leads, landing between the existing framework email (step 2) and tier-overview email (now step 4); CTA `withUtm('/join', {source:'email', medium:'email', campaign:'lead-nurture-bridge'})`, measured via the existing `access_log` `free_account_created` action + the new unique `utm_campaign` tag. Sequence renumbered 5→6 steps (`FINAL_STEP` 5→6), cadence 2/2/2/3/2 — every pre-existing gap preserved, only the new step's insertion adds a day. Blueprint `docs/loops/briefs/lead-nurture-free-account-bridge.md`. Self-grade 95/100 MEETS-BAR yes. Gate 3 correctness reviewer HELD on round 1 — a real cross-file regression: 3 other crons (`vault-metric-drip.js`, `brief-teaser.js`, `brief-teaser-recurring.js`) gated on `nurture_step >= 4` meaning "received the upgrade-nudge email," which the renumbering silently shifted two emails earlier; fixed by bumping all 4 occurrences to `>= 5`, re-ran Gate 1/2 + a fresh unanimous 4-reviewer panel (round 2, all SHIP). No new file/schema/endpoint/cron/checkout/AI/flag — inherits `NEXT_PUBLIC_FREE_ACCOUNT_ENABLED` transitively via `/join`. `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (no new route — pure lib/cron edit). Post-deploy healthcheck GREEN.
2026-07-11
NewNew weekly "Sector Rotation" Brief (piggybacks the existing Sunday `daily-snapshots-fanout.js` slot, zero new `vercel.json` entry) narrating the already-shipped 5-sector (Layer 1/Layer 2/DeFi/AI/Memes) market-cap-weighted 24h/7d/30d snapshot into an honest, descriptive-never-predictive weekly `/brief/[slug]` article — a new indexable page targeting the unclaimed "crypto sector rotation" search-intent cluster (REACH thesis). Extracted `SECTORS`/`fetchSector` out of `pages/api/tools/sector-rotation.js` into new `lib/sector-rotation-data.js` (byte-identical behavior, now shared by the live route and the new cron). New `lib/sector-rotation-brief.js` does a read-before-write week-over-week diff against a new `sector_rotation_snapshots` table (migration `supabase/migrations/20260711_sector_rotation_snapshots.sql`), explicitly distinguishing "genuinely first tracked week" from "read/write failed" (2026-07-07 STOP-SHIPPING learning) — the narrative always publishes, honestly, even if the migration hasn't run yet. Cross-links to `/tools/sector-rotation` via a live `toolEmbedSlug` embed (already-registered `data/embed-tools.js` catalog entry + already-activated `BRIEF_LIVE_SIGNALS_ENABLED` flag) — zero new UI/CSS. Blueprint's fresh repo read found the spec's own sitemap-edit step unnecessary (`getBriefArticles()` already indexes every published Brief article unconditionally). No new flag on the article (ships through the standard ungated Brief path, matching the reach thesis), no checkout, no new AI cost beyond the existing ~1 Haiku call/week. Self-grade 95/100 MEETS-BAR yes. Independent 4-reviewer panel unanimous SHIP (correctness: traced the extraction is byte-identical and the new table is never in a shared query; security: confirmed public-data-only, cron-authorized, RLS service-role-only, no PII/premium surface; brand/UX: prompt reads honest/premium/non-hype, matches the derivatives-positioning sibling's quality bar, zero new CSS; thesis/mechanism: verified both the sitemap auto-index and the toolEmbedSlug cross-link are genuinely wired end-to-end, not dead parameters). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN. Post-deploy healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure). Blueprint: `docs/loops/briefs/brief-sector-rotation-weekly.md`.
2026-07-10
New**BTC & ETH Volatility Risk Premium** (`/tools/volatility-premium`) — first DERIVED-METRIC surface: the gap between Deribit implied volatility (DVOL) and Binance-derived 30-day realized volatility, banded into a 5-zone premium regime (Inverted → Compressed → Fair Value → Elevated → Rich) with a 90-day history chart. Zero new external dependency — pure aggregation over the already-shipped `/api/tools/implied-volatility` + `/api/tools/realized-volatility` routes (`Promise.allSettled` per-symbol resilience, same pattern as `signal-scorecard.js`). Self-grade 87/100 (fixed the one gap — swapped `Promise.all`→`allSettled` so one upstream symbol failing doesn't drop the other). 3-reviewer board (safety/floor, cost/subscription, scope/quality/brand): 3/3 SHIP. `npm run build`/smoke GREEN. See `docs/loops/inventions/LOG.md`.
SEORewrote `<title>`/meta description/`seoKeywords` in `data/blog-posts.json` for `/blog/link-staking-explained` (pos 7.5, 2 imp, 0 clicks) — replaced a "next big trade"/sector-rotation pitch with intent-matched "staking explained" framing (also closes a soft compliance drift, same pattern as the 2026-07-04/07-09 striking-distance fixes). Metadata-only; post body's pre-existing trade-positioning language flagged separately for `loop-feedback`/owner. See `docs/loops/seo/REPORT-2026-07-10.md`.
2026-07-09
NewDesk consolidation Phase 3 (owner-directed spec, docs/ideas/specs/desk-consolidation.md): "tier the registry — introduce the `tier` field + locked teaser rendering across existing premium-worthy widgets," now that Phase 1 (widget migration) and Phase 2 (Daily Read panel) are shipped. Brief-builder's own audit found this literally NOT done despite ~19 widgets already Reserve-gated: the registry only ever had an ad hoc `reserve:true` boolean, and the spec's named "account" (signed-in free) tier existed only as a duplicated, private implementation in `components/dashboard/proWidgets.js` (`ProGate`/`LockTeaser`, bypassing the registry entirely). This ship formalizes a canonical `tier: 'free'
NewDesk consolidation Phase 1 (cont.): the last two concretely-named Edge Live-Terminal widgets from target-state item 1 migrated into the Desk registry as Reserve widgets, each
2026-07-08
NewNew dismissible in-context upgrade banner on /the-edge (components/FreeTierUpgradeBanner.js) — shows only to a confirmed signed-in free account (`gate.isMember === false` strict check, never loading/unknown/anonymous/paying), mounted between the Analytics-row VaultLock close and the Liquidation Heatmap section, linking to the existing /access checkout with a distinct utm_medium=edge-nudge and firing trackCtaClick('free_account_upgrade','edge_nudge'). Dismissible for the session (new sessionStorage key freeTierUpgradeBannerDismissed, distinct from onboardChecklistDismissed), reappears next session. Zero new schema/cron/checkout; reuses the page's existing useMemberTier() gate object (no duplicate hook call). Also added /the-edge to scripts/loops/smoke.mjs's ROUTES (a pre-existing smoke-coverage gap, unrelated to this feature but directly touched by this diff). Flag-gated dark: NEXT_PUBLIC_FREE_TIER_UPGRADE_BANNER_ENABLED. Self-grade 96/100 MEETS-BAR yes (no gaps; one cosmetic nit — try/catch sessionStorage guard instead of the codebase's more common typeof check — functionally equivalent). Independent 4-reviewer panel unanimous SHIP (correctness/security/brand-UX/thesis-mechanism). Build+smoke GREEN (added /the-edge route). Post-deploy healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure).
NewNew Reserve-tier-gated Signal Confluence panel on /terminal — aggregates Donchian(20), Market Barometer (BTC-only), and funding-rate regime into one "do my signals agree right now" score (lib/signal-confluence.js, pages/api/terminal/confluence.js), gated SERVER-SIDE mirroring daily-read.js's teaser/full shape (no CSS-blur); ETH honestly runs 2-of-3 confluence (Barometer is BTC-only, never fabricated). Flag-gated dark: NEXT_PUBLIC_SIGNAL_CONFLUENCE_ENABLED. Self-grade 95/100 MEETS-BAR yes. Independent 4-reviewer panel unanimous SHIP (correctness/security/brand-UX/thesis-mechanism). Build+smoke GREEN. Post-deploy healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure).
SEOAdded FAQPage JSON-LD + visible "Frequently asked questions" section (4 Q&A pairs: what NVT Signal is, high/low reading meaning, zone thresholds, standalone reliability), sourced from the same faqItems array feeding the JSON-LD (lib/seo.js faqPage()) — continuing the Option E FAQPage rotation (sopr, puell-multiple precedent). Metadata/JSON-LD/static-JSX only, no data-fetching/chart/state touched. Self-grade 96/100 MEETS-BAR yes. Independent reviewer SHIP. Build+smoke GREEN. Post-deploy healthcheck GREEN (403 probes — sandbox egress restriction, not a real-site failure).
NewNew monthly "How Our Systematic Calls Did in `<Month Year>`" Brief article — narrates the already-resolved Brief Call Track Record data (wins AND losses, equal prominence) into a shareable article, auto-publishing (unlike the draft-only regulatory digest, since every fact here is already-verified first-party data, not an unverifiable outside-world claim) through the standard `/api/brief/generate` HTTP pipeline, exactly like `pages/api/brief/schedule.js` does for every hourly window. New `getMonthlyRecapFacts(monthStart, monthEnd)` in `lib/brief-calls.js` is the SOLE aggregation point over the existing `getTrackRecordRows()`/`classifyCallOutcome()` — never recomputes outcome, so the recap can never disagree with `/track-record` itself. New `pages/api/cron/track-record-recap.js` piggybacks `daily-snapshots-fanout.js`'s day-3-of-month UTC slot (net `vercel.json` diff 0, still 38/38); skips cleanly on a zero-resolved-calls month (`{skipped:'no_resolved_calls_this_month'}`) rather than publish a hollow recap, and dedups via an `alreadyCreatedThisMonth`-style guard on `category`+`created_at` (mirrors `regulatory-context-digest.js`'s shape). Zero new UI (renders through the unedited `BriefArticleView.js`/`/brief/[slug]` template); zero new distribution code — rides the existing `/api/repurpose/generate`+`drain` polling pipeline automatically since `getPublishedArticles()` has no category filter. Blueprint: `docs/loops/briefs/track-record-recap-brief.md`. Self-grade 93/100 MEETS-BAR yes, no blocking gaps (noted non-blocking: the notable-calls list order is chronological, not outcome-balanced — the equal-prominence guarantee rests on an explicit prompt instruction with no code-level structural backstop). 4-reviewer panel unanimous SHIP round 1 (correctness, security, brand/UX, thesis/mechanism) — correctness confirmed the exact `classifyCallOutcome` output strings ('read confirmed'/'read missed'/'neutral') are matched verbatim (no silent-all-zero-tally typo risk) and UTC month-boundary arithmetic is correct across a Dec→Jan rollover. `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (no route added — cron-only, correctly excluded from the smoke sweep per this repo's established convention). No checkout, no new schema, no new flag, no mass email. **Known limitation, flagged transparently (not a defect):** `/api/repurpose/generate`'s newest-unqueued-first pick order means distribution pickup is not a guaranteed same-day SLA if faster-publishing ordinary Brief articles win the race in a given 4-hour poll window — out of scope to fix here (would touch shared repurpose-picking logic). Post-deploy healthcheck GREEN (prod probes returned 403 — this sandbox's known egress restriction, not a real-site failure).
NewNew monthly cron (`pages/api/cron/regulatory-context-digest.js`, piggybacking `daily-snapshots-fanout.js`'s 01:00 UTC slot on day-of-month 5 — net `vercel.json` diff 0, still 38/38) that synthesizes a "Crypto Regulatory Context: <Month Year>" Vault Answers piece from a new, hand-vetted, git-versioned facts bank (`lib/regulatory-facts.js`, seeded with the two facts the precedent `ai-trading-agents-systematic-risk-brief` piece's own build-time WebSearch already verified: the EU AI Act's Aug-2-2026 high-risk-system enforcement date and FINRA's 2026 Regulatory Oversight Report). Key design resolution: a Vercel cron has no WebSearch access at runtime, so — unlike the one-off precedent, which had a human/agent catch a fabricated citation pre-publish — this cron never asks the model to assert fresh sources; generation is hard-constrained to the facts bank only, and the row is saved via `createAnswer(...)` as `status:'draft'` (never `publishAnswer()`), surfacing in the existing `/admin/answers` Drafts tab for owner review before it ever goes live. Reuses `lib/vault-answers.js`'s `checkCompliance()` gate (the same one the target table's own pipeline uses everywhere), the unedited `/vault-answers/[slug].js` render + `NewsletterCTA` pipeline (already wired, zero edit), and the `run<Name>()`+thin-handler shape of `regime-debate-digest.js`/`signal-divergence-digest.js`. Small cosmetic `CLUSTER_LABELS`/`CLUSTER_OPTIONS` additions in 3 files (`pages/vault-answers/[slug].js`, `pages/vault-answers/topic/[cluster].js`, `pages/admin/answers.js`). Blueprint: `docs/loops/briefs/regulatory-context-monthly-digest.md`. Self-grade 95/100 MEETS-BAR yes, no gaps. 4-reviewer panel unanimous SHIP round 1 (correctness, security, brand/UX, thesis/mechanism). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN. **Known gap, flagged transparently:** no `ANTHROPIC_API_KEY` in this sandbox, so the live generation call could not be dry-run end-to-end — verified instead: the flag-off no-op, the missing-key fail-soft path, `checkCompliance()` rejecting a deliberately-bad test string, and the month-to-month `leadIndex` rotation logic, all directly executed against the real repo code. Dark behind `REGULATORY_CONTEXT_DIGEST_ENABLED` (server-only, no `NEXT_PUBLIC_` prefix — no new page ships). No checkout, no new schema, no mass email, no tier gate. Post-deploy healthcheck GREEN (prod probes returned 403 — this sandbox's known egress restriction, not a real-site failure). **Facts-bank staleness is a known, deliberate follow-up** (§8 of the blueprint): the 2-fact seed needs periodic (e.g. quarterly) expansion by a human or a future build-loop session with real WebSearch access — do not let a thin seed read as a design flaw.
NewNew flagship `/quarterly-outlook` email-gated PDF lead magnet — a bigger, rarer, more citable quarterly sibling of the existing weekly report, synthesizing the calendar quarter that just ended: Vault Systematic Barometer regime history (day-mix + notable shifts via the existing `deriveRegimeSeries`), Donchian(20) signal-flip activity (seed rows correctly excluded from the tally) + current BTC/ETH state, a point-in-time on-chain composite read, and the honest Brief Call Track Record tally (wins AND losses, never cherry-picked). 100% reuse of the proven `/weekly-report` PDF/email-gate pipeline (`lib/weekly-report-pdf.js`'s COLORS/ensureSpace/docToBuffer copied verbatim); new `lib/quarterly-outlook-data.js` + `lib/quarterly-outlook-pdf.js` + `lib/quarterly-outlook-store.js` (private Supabase Storage bucket, dedup-on-period via the object path — no new table) + `pages/api/cron/quarterly-outlook.js` + `pages/api/quarterly-outlook/download.js` + `pages/quarterly-outlook.js`. Generation piggybacks `daily-snapshots-fanout.js`'s existing `isQuarterlyRefreshDay` gate verbatim — net `vercel.json` diff 0 (still 38/38). Blueprint: `docs/loops/briefs/quarterly-systematic-outlook-report.md` — corrected the spec's claimed on-chain "quarter trend": `lib/on-chain-pulse-data.js` has no persisted history (6h in-memory cache only), so the on-chain section is honestly framed as a point-in-time read ("as of {date}"), never a fabricated delta — a real no-fabricated-numbers compliance catch, not a data nuance. Small flag-gated cross-links added on `/weekly-report` and `/the-brief`'s footer. Self-grade 95/100 MEETS-BAR yes. 4-reviewer panel unanimous SHIP round 1 (correctness, security, brand/UX, thesis/mechanism). `npm run build` GREEN, `node scripts/loops/smoke.mjs` GREEN (including a live `/quarterly-outlook` 200); manual PDF-buffer generation verified via a temporary (uncommitted, deleted before merge) debug route — produced a valid, non-corrupt `%PDF-` buffer even against this sandbox's fully-degraded/no-network data (every section renders its designed honest empty state rather than crashing). No checkout, no new schema, no mass email, no tier gate. Dark behind `NEXT_PUBLIC_QUARTERLY_OUTLOOK_ENABLED`. Post-deploy healthcheck GREEN (prod probes returned 403 — this sandbox's known egress restriction to liquidstate.tech, not a real-site failure).
2026-07-07
NewNew opt-in "🔔 Alert me" push-alert toggle on each `/member/watchlist` row — a member can set a price-crosses-above/below threshold or a Donchian(20) regime-flip condition per ticker; a new hourly check (piggybacked flag-gated into the existing `/api/crons/address-watch` cron slot, since `vercel.json` is already at its 38-entry policy ceiling) evaluates conditions against live Binance/Donchian data and fires a real browser push via `sendToEndpoint` linking back to `/member/watchlist` — turning the previously passive, read-only Watchlist into a returning-member surface. New table `watchlist_alert_prefs` (own `endpoint` column; deliberately does NOT reuse Signal Watch's `sendToTopic`/`push_subscription_topics` — that table's CHECK constraint and shared-payload semantics don't fit per-member thresholds, per the blueprint's §2 correction to the spec). Blueprint: `docs/loops/briefs/watchlist-ticker-push-alerts.md` — corrected two spec assumptions (the reusable Donchian signal function is `lib/donchian-signals.js`, not the chart-overlay renderer in `lib/indicators.js`; and the push-delivery model is Address Watch's per-endpoint `sendToEndpoint`, not Signal Watch's `sendToTopic`). Self-grade round 1: 82/100, one real gap (removing a watched symbol orphaned its alert prefs) — fixed by adding a companion cleanup delete to `pages/api/watchlist/items.js`'s existing DELETE handler, re-ran Gate 1 (build) + Gate 2 (smoke) GREEN. 4-reviewer panel unanimous SHIP round 1 (correctness, security, brand/UX, thesis/mechanism). No checkout, no new cron slot, no mass email, no tier gate (any active member). Post-deploy healthcheck GREEN.
SEOAdded FAQPage JSON-LD + matching visible "Frequently asked questions" section to `/tools/puell-multiple` (4 Q&A pairs: what the Puell Multiple is, what high/low readings mean, the 5 zone thresholds, reliability-as-standalone-signal) — continues the sopr/fear-greed/mayer-multiple/stock-to-flow FAQPage rotation (Tier 3, Option E; Tiers 1-2 empty this run, refreshed `docs/loops/seo/striking-distance.md`'s data window with no new actionable rows). All facts sourced verbatim from the page's own existing explainer + zone table — no fabricated numbers. Metadata/JSON-LD/static-JSX only, no data-fetching/chart logic touched. Self-grade 96/100 MEETS-BAR yes. Independent reviewer SHIP. Post-deploy healthcheck GREEN.
New"From The Vault" appendix on `/guides/[slug]` surfaces 3-5 already-published `vault_answers` rows matched to the guide's tags, each linking to `/vault-answers/[slug]` — dark behind `NEXT_PUBLIC_GUIDE_ANSWERS_APPENDIX_ENABLED`. Blueprint's vocabulary audit found guide tags and vault_answers category/topic_cluster only overlap on "risk-management" today — most guides will render nothing until a follow-up tag-alias map narrows the gap (non-blocking per spec). Live 27-guide match-rate spot-check NOT run (no Supabase creds in this cloud sandbox) — fail-soft try/catch verified instead. Panel unanimous SHIP (correctness/security/brand/thesis-mechanism); self-grade 89/100.
NewNew Reserve-tier ("vault") Desk terminal panel — Strategy Backtest Playground — lets a member pick one of 3 built-in templates (Donchian breakout(N), SMA crossover(fast,slow), RSI mean-reversion(period,oversold,overbought)), adjust its numeric parameters, and run an honest backtest (equity curve + CAGR/max-drawdown/win-rate/vs-buy-and-hold) against real BTC daily candles via the already-shipped generic `runIndicatorBacktest` engine — the same engine powering the free fixed-Donchian(20) `/tools/trend-backtest` tool, but now with member-controlled inputs. New `lib/tools/backtest-templates.js` (parameterized entry/exit predicate builders, following the same coding pattern as `lib/tools/trend-backtest.js`'s `rollingDonchian` without touching that file), new `POST /api/tools/backtest-playground` (hard-gated `requireMember(req,{vaultOnly:true})` → 401 before any compute, per-member rate-limited 20/hr, server-side param clamping), new `components/dashboard/BacktestPlaygroundPanel.js`. One additive registry entry in `components/dashboard/registry.js` (`reserve:true`, own independent flag — not folded into the unrelated `FENCE_ENABLED` group) inherits the existing generic Reserve-locked upsell card with zero new lock-UI code. Blueprint: `docs/loops/briefs/terminal-backtest-playground.md`. Self-grade 88/100 MEETS-BAR yes (one gap fixed pre-panel: disclosure copy made verbatim to `trend-backtest.js`, restoring the Binance-attribution line). 4-reviewer panel round 1: security HELD on a real bug — `TEMPLATES[template]` bracket lookup let `template:"__proto__"`/`"constructor"`/`"toString"` resolve to a truthy `Object.prototype` value, bypassing the 400-guard and crashing uncaught outside the try/catch when `clampParams` was then called on it. Fixed by validating `TEMPLATE_KEYS.includes(template)` (and hardening the `asset` lookup via `hasOwnProperty`) before any lookup; re-ran Gate 1 (build) + Gate 2 (smoke) GREEN and a fresh 4-reviewer panel — unanimous SHIP round 2. No checkout, no schema, no cron, no AI cost. Post-deploy healthcheck GREEN.
2026-07-06
NewAdded Mastodon (ActivityPub/fediverse) as a 7th delivery channel on the existing "generate once, deliver everywhere" repurpose pipeline: new `lib/mastodon-poster.js` (`postToMastodon()`, single bearer-token POST to `/api/v1/statuses`, fail-soft, 500-char check-and-skip), a `mastodon_post` key added to `lib/repurpose-variants.js`'s batched LLM schema + template fallback, and a `drainMastodonPost()` case in `pages/api/repurpose/drain.js` gated by `REPURPOSE_MASTODON_ENABLED`. Opens a distinct tech/developer/data-nerd-skewed audience from Bluesky's, additive not overlapping reach; zero new AI cost (rides the existing single batched Haiku call), zero new cron, zero new schema. Build+smoke GREEN, self-grade 97/100 MEETS-BAR yes, 4-reviewer panel unanimous SHIP, health GREEN post-deploy.
NewTagged every X-persona-generated site mention with `?utm_source=x&utm_medium=persona&utm_campaign=<wellseee\
2026-07-05
NewAdded a 4th step (+14d) to the existing `guide_upsell_drip` sequence (`lib/guide-upsell-emails.js`) — the first automated touchpoint ever to pitch The Reserve ($149/mo) to a one-time guide buyer, reusing the proven benefit copy from `upgrade-nudge-emails.js` behind a `utm_campaign=guide-reserve-upsell`-tagged CTA to `/the-edge`; also closes a latent bug by adding an active-subscriber re-check to the cron's per-row loop (all steps) plus a step-4-only opt-out route (`pages/api/guides/upsell-unsubscribe.js`). No schema migration, no new cron slot (38/38 unchanged), no checkout. Self-grade 96/100 MEETS-BAR yes. Independent 4-reviewer panel unanimous SHIP (correctness/security/brand-UX/thesis-mechanism). `npm run build` GREEN, smoke GREEN. Post-deploy healthcheck GREEN. Rides existing `GUIDE_UPSELL_DRIP_ENABLED` flag — no new owner action needed.
NewNew `/tools/dev-activity` — Core Protocol Developer Activity Index, Liquid State's first ENGINEERING/fundamentals data surface (4-week commit trend, open issues, repo stats for 8 curated CANONICAL protocol repos: Bitcoin Core, go-ethereum, Agave/Solana, Cardano Node, Polkadot SDK, AvalancheGo, Cosmos SDK, Chainlink — never a fork, sidestepping the commit-inheritance distortion Santiment's own methodology warns about). Data: GitHub public REST API, free/keyless, request-driven TTL cache (no new cron, respects the ≤38 vercel.json floor). Self-grade 90/100 MEETS-BAR yes. Independent 3-reviewer board unanimous SHIP (safety/floor, cost/subscription, scope/quality/brand). `npm run build` GREEN, smoke GREEN. Post-deploy healthcheck GREEN. Flag `NEXT_PUBLIC_DEV_ACTIVITY_ENABLED` (dark by default).
Market intelAppended one curated event seed to `data/newsjack-events.json` (category `On-Chain`) covering CZ's proposal to freeze Satoshi's ~1.1M dormant BTC ahead of a quantum-computing threat, riding the fresh July 4 CoinDesk/TechTimes/Bitcoinist coverage. Self-grade 85→re-fixed (named the Google Quantum AI March 2026 source for the "~20x" qubit-reduction figure instead of vague "2026 research"), re-gated GREEN. Independent reviewer SHIP (scope-limited to the seed+report, on-brand, information-not-advice, non-duplicative). `npm run build` GREEN, smoke GREEN. Post-deploy healthcheck GREEN. Seed drains via the existing `monitor-curated`→`process-events` pipeline once `MONITOR_CURATED_ENABLED=1` (currently dark — queue now 12 pending, flagged to owner in the report).
NewNew `/brief/weekly-charts` — "This Week in Charts" shareable weekly chart gallery, dark behind `NEXT_PUBLIC_BRIEF_WEEKLY_CHARTS_ENABLED`. ISR page (revalidate 3600) structurally cloned from `pages/brief/topic/[category].js`: queries this week's published `brief_articles` via `getPublishedArticleSummaries()` (same source `lib/weekly-report-pdf.js` already uses), dedupes by primary coin tag (`tags[0]`, newest-first — matches the subject-first convention at `lib/x-content.js:826-834`), and reconstructs each tile's chart URL directly (`/api/brief/chart-image?symbol=...&bar=4H&d=<article date>`, mirroring `chartResult()` in `lib/image-selector.js` — deliberately NOT `article.featuredImage`, which is frequently an unrelated cover/stock photo under the current `selectImage()` flow). Each tile is a real backlink to `/brief/[slug]`. `ShareLinks` (reusing the already-live `NEXT_PUBLIC_SHARE_LINKS_ENABLED` flag) sits at the top as the reach-thesis measurement instrumentation; `NewsletterCTA source="weekly-charts"` at the footer. `scripts/loops/smoke.mjs` documents the dark-route exclusion (same convention as `/brief/topic/<category>`); `docs/loops/FEATURE-FLAGS.md` gets a new `GROUP 2n` entry. Blueprint: `docs/loops/briefs/brief-weekly-charts-gallery.md`. Self-grade 95/100 (MEETS-BAR yes; one cheap cosmetic gap — a duplicate FEATURE-FLAGS.md group label — fixed before the panel, re-gated). Panel unanimous SHIP (correctness, security, brand/UX, thesis/mechanism); correctness reviewer additionally rebuilt with the flag on and confirmed live HTML contains the chart-grid backlink tiles + ShareLinks row with correct UTM params, and the designed empty state (no published articles in this sandbox's DB). `npm run build` GREEN (flag off and flag on), smoke GREEN. Post-deploy healthcheck GREEN. Zero new schema/cron/checkout/AI/dependency.
NewGuide Completion Checkpoint — end-of-guide 4-6 question comprehension quiz on the already-public, already-crawlable guide pages (`pages/guides/[slug].js` renders full guide markdown with zero content gate today). Free client-side scoring + per-question explanations (no email required), then an optional "email me my results + a personalized next-guide recommendation" action captures a lead via the proven `upsertLead()` pattern (`source='guide-quiz-<slug>'`) — a new, distinct lead-capture channel on existing high-intent traffic, exactly what the 2026-06-30 STOP-SHIPPING learning asks to prioritize over another new page. New additive files: `supabase-schema-guide-quiz-2026-07-05.sql` (`guide_quiz_results` table), `data/guide-quizzes.js` (30 hand-authored comprehension questions across the 6 "Original 6" guides — journaling-mastery, building-personal-strategy, trading-with-the-trend, market-structure, risk-management, mastering-market-heatmaps), `lib/guide-quiz-results.js`, `lib/guide-quiz-recs.js` (pure tag-overlap next-guide matcher, separate from the trading_style-based `lib/activation/guide-recs.js`), `pages/api/guide-quiz/submit.js`, `components/GuideQuizCheckpoint.js`. Only edit to `pages/guides/[slug].js` is additive (new prop + one flag-gated JSX block between the free content and the existing paywall card) — `handleBuy`/`BuyButton`/`canBuy`/checkout untouched. Flag: `NEXT_PUBLIC_GUIDE_QUIZ_ENABLED` (dark until owner runs the migration + sets it). Blueprint: `docs/loops/briefs/guide-completion-quiz-lead-capture.md`. Panel unanimous SHIP (correctness, security, brand/UX, thesis/mechanism — security noted the new table has no DB-level CHECK constraints on score/total/email, matching the sibling `vault_answers_questions` precedent, non-blocking since app-level validation already enforces the bounds). `npm run build` GREEN, smoke GREEN (new POST route documented as excluded, no ROUTES change), live-rendered verification with the flag on confirmed the checkpoint renders on an authored guide and stays absent on an unauthored one; the API's Supabase writes could not be exercised live in this sandbox (missing service-role credentials — the same pre-existing gap that also 500s the proven `vault-answers/submit-question` route under identical conditions), so the leads/guide_quiz_results write path is verified by code trace + panel review, not a live sandbox round-trip. Post-deploy healthcheck GREEN. No checkout, no AI, no mass email, no PII beyond an optional user-submitted email.
2026-07-04
ProductPlaced the existing factual data-provenance proof asset (`data/proof-library.js` / `components/DataProvenanceStrip.js`, reused unchanged) on `/pricing` directly below the 3-card pricing grid — the purchase-decision page had zero credibility signal before this run; third placement of the same true, non-fabricated claim across the funnel (after `/access`, `/index`). Additive JSX only, checkout button/handler/prices untouched, still dark behind `NEXT_PUBLIC_PROOF_LIBRARY_ENABLED`. Build+smoke GREEN. Healthcheck GREEN (prod probes returned 403 — sandbox egress restriction, not a real-site failure).
SEOStriking-distance CTR fix (`docs/loops/seo/striking-distance.md` row #1): rewrote `<title>` + meta description on `/blog/sol-vs-sui-vs-avax-comparison` (pos ~7.3, 13 impressions, 0 clicks) to match comparison-intent keywords, and added an above-the-fold "Quick Comparison" table using only figures already stated elsewhere in the post — no new page, no fabricated numbers. Build+smoke GREEN. Healthcheck GREEN (prod probes returned 403 — sandbox egress restriction, not a real-site failure, consistent with the 2026-07-04 sector-rotation-heatmap row's diagnosis).
NewNew free, embeddable `/tools/sector-rotation` page + `/api/tools/sector-rotation` — Layer 1/Layer 2/DeFi/AI/Meme crypto sector performance across 24h/7d/30d as a market-cap-weighted, color-coded heatmap (CoinGecko `/coins/markets` per category, 15-min cache, partial-tolerant). Mirrors `funding-heatmap.js`'s embed/UTM/JSON-LD pattern with per-column color clamps (8/20/40%) to avoid one shared clamp washing out or saturating a timeframe. Additive-only: new page/API + one entry each in `data/tools-registry.js`/`data/embed-tools.js`/`docs/loops/FEATURE-FLAGS.md`; ships dark behind `NEXT_PUBLIC_SECTOR_ROTATION_ENABLED` (owner-activation required). Self-grade round 1 (77/100, MEETS-BAR:no) caught the CoinGecko "AI" category id lacking verification evidence — fixed by documenting a WebSearch cross-check of CoinGecko's own category-page URL-slug convention (this sandbox's proxy blocks a live `/coins/categories/list` call). 4-reviewer panel unanimous SHIP (correctness, security, brand/UX, thesis/mechanism — verified EmbedAttribution+UTM, Dataset/BreadcrumbList JSON-LD, and zero-interaction full render are all genuinely present in the diff). Build+smoke GREEN (manually verified live render + embed mode + graceful "No data available" degradation with the flag temporarily enabled in a local rebuild, then reverted before the official gate run). Healthcheck GREEN (prod probes returned 403 — sandbox egress restriction, not a real-site failure, per this session's earlier direct diagnosis).
NewNew sibling tool page `/tools/stablecoin-flows` (`NEXT_PUBLIC_STABLECOIN_FLOW_ENABLED`, dark default OFF) — per-stablecoin supply, 7d/30d net mint-vs-burn (both $ and %), top-8 chain breakdown, and a distinct "Flow Regime" label (Strong Minting → Strong Burning), sourced from DefiLlama's per-asset `stablecoins` endpoint (the existing stablecoin-ssr route only wires the aggregate `stablecoincharts/all` endpoint, which can't produce per-asset/chain data). Embeddable (`?embed=1` clean iframe view + working copy-embed-code button) and OG-shareable (new `pages/api/og/[...slug].js` `'stablecoin-flows'` entry) — the reach/backlink mechanism for a new macro-flows audience segment the SSR ratio page doesn't serve. Zero diff on `pages/tools/stablecoin-ssr.js` / `pages/api/tools/stablecoin-ssr.js` (that page's `?embed=1` iframe is already distributed in the wild at a fixed height — this is why the artifact is a separate page, not an edit). `data/tools-registry.js`, `pages/api/og/[...slug].js`, `scripts/loops/smoke.mjs` are pure appends. DefiLlama field-name risk flagged in the blueprint (sandbox network policy blocks `stablecoins.llama.fi`, so live JSON shape was never captured) — coded defensively (optional chaining, `Array.isArray` guards, fail-soft to empty/null, never a hard 500), confirmed via correctness review. Self-grade round 1: 74/100 (MEETS-BAR no — missing copy-embed button + pct-delta rendering); fixed both, round 2: 96/100 (MEETS-BAR yes). 4/4 review panel unanimous SHIP (correctness/security/brand-UX/thesis-mechanism). Build+smoke GREEN. Healthcheck GREEN (prod probes returned 403 — sandbox egress restriction to liquidstate.tech, not a real-site failure). NO checkout, NO AI, NO new dependency.
NewPublic, anonymous AI Portfolio Stress-Test (`/tools/portfolio-stress-test`, `NEXT_PUBLIC_STRESS_TEST_ENABLED`, dark default OFF): visitor picks asset (BTC/ETH/SOL) × position (long/short/spot) × size (small/medium/large), submits email, gets a Haiku-generated bull/base/bear non-advice narrative. Lead-capture mechanism is server-verified before any scenario text renders — `upsertLead({email, source:'ai-stress-test'})` then a re-`select` of the `leads` row confirming `status==='subscribed'`, mirroring `flagship-unlock.js`'s discipline. Combination space closed at exactly 27 (strict enum validation) and cached 24h/combination in new `stress_test_cache` table, capping cost at ≤27 Haiku calls/day (~$1/mo); `checkArticleCompliance()` runs as a hard backstop before any cache write. Reuses `ai-scenarios.js`'s badge/card language and `barometer-explainer.js`'s Anthropic call pattern verbatim. Self-grade 90/100 (MEETS-BAR yes); 4/4 review panel unanimous SHIP. Build+smoke GREEN. Healthcheck GREEN (prod probes returned 403 — consistent with this sandbox's known egress restriction to liquidstate.tech, not a real-site failure). OWNER ACTION: run `supabase/migrations/20260704_stress_test_cache.sql` in the Supabase SQL editor before setting `NEXT_PUBLIC_STRESS_TEST_ENABLED=1`.
NewFarcaster Mini App Frame on /tools/market-barometer — adds `fc:miniapp` (current spec) + `fc:frame` (legacy-compat) meta tags via new lib/farcaster-frame.js, reusing the existing OG image/icon/theme token; new distribution channel, ships
2026-07-03
ProductExtended the existing (07-02-shipped) factual data-provenance proof strip from /access to the homepage final-cta section, directly below the "Go Liquid" button — same cleared factual entry (no new member candidate arrived), reused DataProvenanceStrip.js verbatim, same NEXT_PUBLIC_PROOF_LIBRARY_ENABLED flag (still dark). Self-grade 82/100 MEETS-BAR yes (gap noted: no concrete measurement plan for this specific placement); independent compliance reviewer SHIP; build+smoke GREEN; health GREEN (403 probes — sandbox egress restriction, healthcheck script exited GREEN, no rollback)
SEOAdded FAQPage JSON-LD + matching visible "Frequently asked questions" section to /tools/mayer-multiple (4 Q&A pairs restating already-established page facts: 200-day SMA definition, 2.4×/3.8× zone thresholds, non-advice framing, update cadence), mirroring the fear-greed.js FAQ pattern exactly — continues the Option E rotation (rainbow-chart, stock-to-flow, fear-greed) since GSC strikingDistance remains empty; no data-fetching/chart/state logic touched. Self-grade 92/100 MEETS-BAR yes; independent reviewer SHIP; build+smoke GREEN; health GREEN (403 probes — sandbox egress restriction, healthcheck script exited GREEN, no rollback)
NewPlaced the already-live, higher-converting QuizPromoCard → /quiz → /quiz/result email-capture funnel (previously only on /guides + /playbooks) on the 12 highest-traffic free tool pages (market-barometer, rainbow-chart, cycle-phase, halving-countdown, funding-rates, altcoin-season, open-interest, fear-greed, position-calculator, market-rotation, mvrv-zscore, crypto-screener), directly below each page's existing (flat-converting) NewsletterCTA — pure placement, no changes to the already-shipped component's props/copy/tracking; new independent flag NEXT_PUBLIC_TOOLS_QUIZ_CTA_ENABLED (defaults OFF); attribution: leads.source='tool-<slug>' via the existing last-touch va_attr→subscribe.js mechanism, no new attribution code; also fixed a pre-existing smoke.mjs gap (/tools/funding-rates was untested, correctly left /tools/crypto-screener excluded since it's
Market intelCurated newsjack seed queued to `data/newsjack-events.json`: US spot Bitcoin ETFs snapped a 10-day outflow streak with a ~$222M net inflow on 2026-07-02 (Fidelity FBTC-led ~$166M, BlackRock IBIT still -$40.4M), coinciding with a soft June jobs report (+57K payrolls, unemployment 4.2%) and BTC reclaiming $60K; follow-on to the already-queued 2026-07-01 record-June-outflow seed; strictly attributed, non-advice; independent review SHIP; build+smoke GREEN, health GREEN; MONITOR_CURATED_ENABLED still dark — 10 seeds now undrained (flagged for owner)
NewFAQPage schema rollout to 7 tool pages — added schema.org FAQPage JSON-LD + a matching visible "Frequently asked questions" section (sourced from one shared array per page so markup and visible copy can never drift, per the lib/seo.js:126-129 reuse contract) to cycle-phase, altcoin-season, nupl, halving-countdown, market-rotation, funding-rates, open-interest (fear-greed already had it — backlog note was stale); every FAQ answer traces to grounded existing on-page copy (weights/formulas/zone thresholds/data sources), zero fabricated claims; followed the fear-greed.js pattern (schema + visible copy), explicitly avoiding the schema-only gap found on mvrv-zscore.js/market-barometer.js (left untouched, out of scope); reach/visibility-class thesis (AEO/rich-result lift on existing traffic, not a new lead mechanism) — same class as the 3 reference pages' precedent; no checkout, no AI, no flag; self-grade 96/100 MEETS-BAR yes; independent 4-agent panel (correctness/security/brand-UX/thesis-mechanism) unanimous SHIP; build+smoke GREEN, health GREEN
NewX Weekly Market Regime Thread Auto-Poster — Monday 09:00 UTC cron posts a 7-tweet reply-chain thread synthesizing 5 live signals (Barometer, Donchian, funding, open interest, on-chain MVRV/NUPL, realized vol) into a data-driven synthesis sentence ("Donchian is long + funding is negative + OI is compressed = diverging signals") + UTM CTA to /tools/market-barometer; new `postThread()` reply-chain primitive added to lib/x-poster.js (prior posting only did single-tweet + 1 reply); fail-soft floor: refuses to post below 4 composable tweets; zero new deps, zero AI; self-grade 72/100 round 1 (generic synthesis, fixed to reference real signal values); independent 4-agent panel (correctness/security/brand-UX/thesis-mechanism) HELD once on thesis/mechanism (CTA-tweet truncation was silently cutting the UTM query string off the last tweet — the exact mechanism the thesis depends on), fixed via a reserved-budget `ctaTweet()` helper that truncates only the descriptive prefix, never the URL, re-verified unanimous SHIP; build+smoke GREEN, health GREEN
NewBulk Data Export (CSV) — new consumption shape: every prior syndication surface (Public Signal API, RSS, ICS, SVG badges) serves the latest value or a live feed; this is the first that hands a visitor the FULL historical time series as a downloadable file. `/tools/data-export` + always-on `GET /api/data/export?dataset=` (4 datasets: regime history from `market_barometer_snapshots`, options PCR history from `options_pcr_snapshots`, BTC/ETH daily OHLCV from Binance) + new reusable `lib/csv-export.js` primitive; hub card + `/developers` promo section, both UTM-tagged; zero new external dependency, zero AI, fail-soft to a header-only CSV on error; self-grade 92/100 MEETS-BAR yes; independent 3-reviewer board (safety/cost/scope-brand) unanimous SHIP; build+smoke GREEN, health GREEN
NewBrief articles at /brief/[slug] can now embed one live tool widget inline (admin dropdown sourced from `data/embed-tools.js`'s public catalog, new nullable `brief_articles.tool_embed_slug` column) rendered as a chrome-less `?embed=1` iframe positioned before the existing, unmodified `BriefGateOverlay` soft-gate — thesis is an indirect/secondary mechanism (engagement upstream of an existing capture point, not a new capture form, flagged explicitly in the blueprint's §0); no checkout, no AI, no new deps, zero DOM change for briefs that don't set the field; self-grade 94/100 MEETS-BAR yes; independent 4-agent panel (correctness/security/brand-UX/thesis-mechanism) unanimous SHIP; build+smoke GREEN, health GREEN; owner must run supabase/migrations/20260703_brief_tool_embed.sql
NewGitHub-README-style SVG status badges — new `lib/badge.js` (shields.io-style flat SVG builder, no deps) + `GET /api/badge/[metric]` (friendly URL `/badge/<metric>.svg`, 5 metrics: regime/cycle-phase/funding/ssr/dvol) wrapping the already-shipped Signal Scorecard aggregation, zero new external data source; the first plain-`<img>` embed format on the site (every prior embed is an iframe or JS/JSON feed, which GitHub READMEs and most forums don't allow); UTM-tagged copy-Markdown snippets on a new `/developers` "Status badges" section (`NEXT_PUBLIC_BADGES_ENABLED`) — badge route itself always-on/read-only/fail-soft (stale-cache-first on a transient miss, never a broken image); self-grade 88/100 MEETS-BAR yes (one gap fixed pre-review: stale-cache fallback on transient signal miss); independent 3-reviewer board (safety/cost/scope-brand) unanimous SHIP; build+smoke GREEN, health GREEN
2026-07-02
SEOAdded FAQPage JSON-LD + a matching visible "Frequently asked questions" section to `/tools/fear-greed` (4 Q&A pairs: what the Fear & Greed Index is, what the Liquid State Barometer is + how it differs, what a divergence means, whether F&G is a reliable signal) — targets the high-volume "crypto fear and greed index" query cluster, same Option-E pattern as the rainbow-chart (06-30) and stock-to-flow (07-01) wins; content reuses facts already established on-page (methodology table, divergence copy), no fabricated numbers; metadata/JSON-LD/static-JSX only, no data-fetching or state logic touched; self-grade 92/100 MEETS-BAR yes; independent reviewer SHIP; build+smoke GREEN, health GREEN
Market intelCurated event seed: SBI Crypto shutting down its Bitcoin mining pool (~2% network hashrate, 20.9 EH/s, 12th-largest globally) on July 31, 2026 — appended to data/newsjack-events.json for the autonomous monitor-curated/process-events pipeline to drain (still
New/member/alert-preferences lets members opt which of 4 alert types (regime-change, Donchian flip, signal watch, address watch) they receive, filtered by trading_style with genuine hint copy (neutral state for no-profile members); Reserve-only Donchian-flip row renders locked with an explicit-benefit upgrade CTA to /access#pricing for Intel/Feed members; new `member_alert_preferences` table (default-true every column — zero regression for the 100% of members who never visit); 2 existing crons (regime-change-alert.js, donchian-signal-flip.js) filtered via new lib/alert-preferences.js, fail-soft to today's exact behavior until the owner runs the migration; Signal Watch/Address Watch deliberately left untouched (push-endpoint-keyed, not member-email-keyed — scope correction from the spec, documented in the blueprint); self-grade 89/100 MEETS-BAR yes (2 cheap gaps fixed pre-panel); panel: security/brand/thesis SHIP on first pass, correctness HELD once (missing neutral-hint state for no-profile members) — fixed + re-verified SHIP; health GREEN; gate NEXT_PUBLIC_ALERT_PREFERENCES_ENABLED (+ owner must run supabase-schema-alert-preferences.sql)
ProductRefined the first-session guide-rec panel (`NEXT_PUBLIC_ONBOARD_GUIDE_REC_ENABLED`) to use `primary_focus` (already captured, already fetched, previously unused) as a secondary signal: `getGuideRecs(trading_style, primary_focus)` swaps in `guide-altcoin-season` for alts-focused members across all 3 trading styles, no behavior change for btc_eth/both; pure-function change in `lib/activation/guide-recs.js` + one-line call-site update in `pages/the-edge.js`; no new flag, no new endpoint, no new dependency; deferred twice by the 2026-06-29 and 2026-06-30 onboard reports before landing this cycle; self-grade 92/100 MEETS-BAR yes; independent reviewer SHIP; health GREEN
NewNew `components/GuideCrossSellCTA.js` inserted between the existing Reserve-upgrade CTA and `NewsletterCTA` on 14 verified tool pages (altcoin-season, bollinger-squeeze, cycle-phase, donchian-channel, eth-btc-ratio, market-barometer, on-chain-pulse, open-interest, position-calculator, price-heatmap, realized-volatility, seasonality, social-sentiment, stress-test) — a topic-matched one-time guide offer ($19-29) filling the gap between "free email" and "$149/mo Reserve"; reads title/price/pages live from `data/guides-config.js` by `guideSlug` (no drift risk), UTM-tagged link (`utm_campaign=guide-crosssell`) rides the existing `va_attr`→checkout-metadata attribution pipe with zero new tracking code; `market-barometer.js` correctly suppressed in embed mode; ships dark behind `NEXT_PUBLIC_TOOL_GUIDE_CROSSSELL_ENABLED`; self-grade 87/100 MEETS-BAR yes (1 cheap gap fixed: link tap-target padding); panel 4/4 SHIP (correctness, security, brand/UX, thesis/mechanism); health GREEN
NewBTC & ETH Options Max Pain (nearest-expiry strike-level positioning view) — Deribit public API (zero new dependency, same endpoint as Options PCR), call/put OI-by-strike chart + max-pain marker; closes the derivatives cluster's last gap (PCR + DVOL + max pain); self-grade 93/100 MEETS-BAR yes; reviewer board 3/3 SHIP; health GREEN
Market intelCurated event seed queued in data/newsjack-events.json: California's Digital Financial Assets Law entered force July 1, 2026 — state-level crypto licensing enforcement begins, up to $100K/day civil fines for unlicensed activity; purely descriptive, sourced to Decrypt/TechTimes/DFPI 2026-07-01 coverage; drains via the existing (dark) monitor-curated → process-events → generate pipeline once the owner enables MONITOR_CURATED_ENABLED; self-grade 94/100 MEETS-BAR yes; reviewer SHIP; health GREEN
Market intelCurated event seed queued in data/newsjack-events.json: US spot Bitcoin ETFs closed June 2026 with a record $4.5B monthly outflow (29% above the prior record, IBIT ~79% of redemptions); purely descriptive, sourced to CoinDesk's 2026-07-01 coverage; drains via the existing (dark) monitor-curated → process-events → generate pipeline once the owner enables MONITOR_CURATED_ENABLED; self-grade 92/100 MEETS-BAR yes; reviewer SHIP; health GREEN
NewNew /extension: Manifest V3 Chrome/Edge/Firefox extension (extension/) shows the live Liquid State Barometer regime score as a color-coded toolbar badge, polling the already-public GET /api/tools/current-regime every 15 min (fail-soft, matches its 15-min server cache); popup renders regime + 1-line non-advice description + 2 UTM-tagged CTAs (→/tools/market-barometer, →/access); zero competing extension shows a systematic regime read (confirmed via WebSearch, every top result is a raw price ticker); landing page /extension explains it + serves a self-built zip (scripts/build-extension-zip.mjs, hand-rolled PKZIP via node:zlib, no new dependency) so it's installable today with no Chrome Web Store review needed; hub card + sitemap entries added purely additively; ships
2026-07-01
NewFixed `/refer`'s ~0% referral-signup conversion: added a real (non-fabricated) aggregate share-count strip (floor-gated, only shows once ≥5 real shares exist) + reused the existing personal progress bar, plus 2 new peak-intent CTA placements linking to `/refer?src=...` on `/welcome` (post-subscribe) and `/download-success` (guide-purchase confirmation, all 4 ready-state branches); new `GET /api/refer` (no PII) serves the cached aggregate (`lib/referrals.js` `getTotalReferrals()`, 5-min `withCache`); `src` attribution captured via a best-effort `access_log` row on first-time code creation only; no new table, no checkout, no AI; self-grade 95/100 MEETS-BAR yes, panel 4/4 SHIP; health GREEN
NewAsset Comparison Tool at /tools/asset-compare — first PICKER-driven comparison surface on the site: pick any 2 of 24 curated assets, get a 90-day rebased performance overlay + rolling 30-day Pearson correlation reading; every prior compare page (btc-eth-compare, btc-gold) is a fixed pair, correlation-matrix is a fixed grid with no chart; reuses lib/tools/binance.js binanceKlines() (same helper as 10+ shipped tools, free/no-key) and the btc-eth-compare chart/layout pattern almost entirely; per-pair 4h in-memory cache; embeddable + UTM-tagged; self-grade 91-94/100 MEETS-BAR yes (2 trivial nits: missing explicit GET-method guard, 400 vs 200 on invalid-symbol validation — both harmless, left as-is), board 3/3 SHIP; health GREEN; flag NEXT_PUBLIC_ASSET_COMPARE_ENABLED=1
New"Ask The Vault" question-submission form (components/AskVaultForm.js) on /vault-answers + every /vault-answers/[slug] page — direct lead-capture mechanism (source='vault-answers-question') independent of whether the question is ever answered, targeting the flywheel's 2026-06-30 STOP-SHIPPING finding (view→lead conversion, not more content, is the bottleneck); new vault_answers_questions table + admin "Submitted Questions" queue in pages/admin/answers.js with a "Publish as Answer" prefill that fires a one-off transactional email via lib/resend.js sendEmail() on publish (source_question_id passthrough on the existing action=publish, backward-compatible); extracted the existing lead-upsert logic out of pages/api/newsletter/subscribe.js into lib/leads.js upsertLead() (behavior-identical refactor) so both surfaces share one path; no flag (always-on, matches tool-signal-alert-optin precedent), no checkout, no metered AI; self-grade 95/100 MEETS-BAR yes (one nit fixed: duplicate formatDateTime helper deduped), panel 4/4 SHIP (security noted a low-severity non-blocking nit: visitor question text is interpolated unescaped into the notification email HTML, self-XSS-into-own-inbox risk, admin-reviewed before publish); health GREEN
NewNew /tools/crypto-screener: first sortable/filterable multi-asset table on the free tool suite — 24 major perpetuals, click any column to sort (price, 24h %, funding rate, annualized funding, 24h volume), filter chips (Top Movers/Long-Heavy/Short-Heavy); every prior multi-asset view (funding-heatmap, correlation-matrix) is a fixed non-interactive grid, this is a client-driven query surface closing a named CoinGlass-screener gap; zero new data source (Binance spot 24hr ticker batched + futures premiumIndex via existing lib/tools/binance.js), API route fails soft to HTTP 200 (whale-alerts.js convention, not funding-heatmap.js's 503, since this route is in the smoke allowlist); hub card + sitemap + smoke + FEATURE-FLAGS.md updated; ships
Market intelcurated newsjack seed: Nasdaq distributes its flagship TotalView order-book data feed through the Pyth Network oracle for the first time — TradFi/crypto data-infrastructure convergence story, drains into the autonomous Brief pipeline
NewFree developer API-key registration for the Public Signal API (`POST /api/v1/register` → key-aware rate limit on `GET /api/v1/signals`, 1,000/hr vs 120/hr anonymous; `/developers` UI section behind `NEXT_PUBLIC_API_KEY_REGISTRATION_ENABLED`); re-attempt of a round-1 HELD build — fixed the scope/brand bug where `subscribe.js`/`preview-gate.js`/`trader-assessment-submit.js` silently reclassified `status:'developer'` leads into the full Brief nurture sequence by narrowing their resubscribe branch to `existing.status === 'unsubscribed'` explicitly; self-grade 96/100, board 3/3 SHIP; health GREEN
NewAdded one vercel.json cron entry (`/api/repurpose/generate`, `30 */4 * * *`, 30min ahead of the existing `drain` cron) to unblock the already-built, dark-flagged repurpose content-multiplication pipeline that has been inert since merge because nothing ever called `generate`; no route code touched, REPURPOSE_GENERATE_ENABLED stays unset; self-grade 98/100, panel 4/4 SHIP; health GREEN
NewFree embeddable /tools/trend-backtest — Donchian(20) long-only backtest vs buy-and-hold for BTC, reusing lib/donchian-signals.js's exact rolling-window convention; CAGR/max-drawdown/win-rate/trade-count stats + log-scale dual-line equity chart; 1Y/3Y/5Y timeframe selector; 6h per-timeframe Supabase cache (compute-on-read, graceful degrade without Supabase/Binance); guide-conversion CTA into Training Terminal's "Trading with the Trend" guide (fixed a dead #guide-trend-mastery anchor found in self-grade by adding id={book.id} to pages/guides.js) + embed/backlink mechanism; targets ~16K/mo "bitcoin trend following"/"donchian channel backtest" search cluster; self-grade 82/100, panel 4/4 SHIP; health GREEN; gate NEXT_PUBLIC_TREND_BACKTEST_ENABLED=1
NewMarket Regime Alert RSS feed at /feeds/regime.xml — push-style, no-email alt to email SignalAlertCTA; one item per Barometer regime flip, pure read of existing market_barometer_snapshots; new reusable lib/rss.js + lib/regime-series.js infra; UTM-tagged; board 3/3 SHIP; health GREEN
2026-06-29
NewFunding Rate Regime Score — composite 0-100 from 8 major perps (BTC/ETH/SOL/BNB/XRP/DOGE/ADA/AVAX); tanh-normalized per-coin scores, market-cap-weighted; SVG gauge + 30-day sparkline + per-coin breakdown + embed mode; free Binance fapi
DistributionRepurpose staging queue infra: repurpose_queue table (SQL), lib/repurpose-variants.js (batch LLM+template generator, compliance-gated), pages/api/repurpose/drain.js (X+Telegram+Shorts+recap card delivery, all
NewNewsletterCTA added to 18 tool pages missing it — contextual headline per tool (e.g. "Get free funding rate alerts for perpetual traders"), backward-compatible headline prop on component, all embed modes guarded
NewBitcoin Stablecoin Supply Ratio (SSR) — SSR = BTC mcap ÷ stablecoin mcap; 90-day chart; regime label + velocity; embeddable; free CoinGecko + DefiLlama data; ~2-3K/mo underserved keyword cluster; flag NEXT_PUBLIC_STABLECOIN_SSR_ENABLED
NewCurated event queue (data/newsjack-events.json) + monitor-curated drain cron → brief_events_log; enables loop-newsjack to publish timely Briefs from repo-committed events (dark: MONITOR_CURATED_ENABLED=1)
NewCrypto Market Breadth & Advance-Decline Dashboard — top 100 alts vs BTC over 24h/7d/30d; breadth score 0–100; regime label; top 5 winners/losers; embeddable; free CoinGecko data; 29K/mo keyword cluster; flag NEXT_PUBLIC_MARKET_BREADTH_ENABLED
ProductDismissible personalized guide-rec panel on /the-edge: 3 guides matched to member's trading_style (swing/position/day) via deterministic lookup; ships
SEOAdded realized-volatility glossary entry (HV30/90/180 definition, variance risk premium, bidirectional link to volatility); targets "realized volatility crypto" / "historical volatility bitcoin"
THE BRIEF · FREE
Get new Liquid State tools + market reads in your inbox
Free market reads — plus the Three-Lens Framework the desk runs on every chart. No spam. Unsubscribe anytime.
Explore the free tools · Liquid State Index · The Edge. Information, not financial advice.