Reverse-chronological, citation-first. Every entry links back to the source URL (commit, module path, endpoint) and to the in-product surface it shipped on.
Entries are sourced from src/content/changelog.ts — a checked-in TypeScript module that ships with the repo, so the list stays in sync with shipped work without touching the DB.
latest
opportunities-json-endpoint
/api/radar/opportunities JSON endpoint
api
opportunities
digest
json
Machine-readable mirror of the weekly Web3 Opportunity digest, exposed at /api/radar/opportunities. Downstream tools can pull the same cited signal rows the digest emails, the in-app table, and the JSON-LD surface all consume.
Pricing surface (/pricing) with FAQ + Product JSON-LD
pricing
billing
json-ld
seo
Five Tier ladder (Free, Founder, Pro, Radar, Team) — three client islands and a pair of server-rendered JSON-LD blocks (FAQPage + Service/Offer). Sitemap, intercom, and SEO all wired through the user-owned seo-routes.ts companion.
Article schema on /methodology and /opportunities rows; FAQPage + Service/Offer on /pricing. Per-row OG cards reachable via /api/opportunities/[type]/[slug]/og and /api/signals/[category]/[slug]/og so Google Rich Results Test resolves all discriminated URLs.
Cited public rows get their own permalink — discriminated envelope { kind: "public" | "radar" }, free side shows the citation line-up (org, claim, source URL, date, category) with the body cells redacted; the per-row OG card and Article JSON-LD are emitted from the client island.
Cited Stablecoin Intent rows get permalinks too — FACT cells visible everywhere, INFERENCE cells (likely need, stage, 0–100 score, outreach angle) gated on the Radar plan. Score-factor breakdown panel + per-row OG card + Article JSON-LD on every page.
Living Stablecoin Intent Radar lives behind better-auth and a per-user radar config — only signed-in users reach the dashboard, and every query is scoped with where: { userId: user.id }. No public listing, no shared admin cookie.
Monday-before-09:00-UTC digest is dispatched by the cron-scheduled jobs/digest-send.js — every row it sends lands in the digest-signup table and the digest-preferences table; email is delivered through the Polsia email proxy, never raw SMTP.
Every Intent score now flows through one rule-based scorer with a single canonical 0–100 rubric. The four score bands (noise / weak / actionable / high_intent) and the FACT vs INFERENCE field lists are exposed as the same canonicals the /methodology page renders.