--- /** * `/progress`: the live campaign dashboard — five LeetCode-style React cards * over GET /api/stats (lib/stats.ts), hydrated on load. A custom page like * `/changelog` and `/appendix`, linked from the header's `navigation.tabs`, * so it enters neither the sidebar tree nor prev/next. The cards live in * components/progress/, not islands/: they are imported here, never used from * MDX, so Blume has no reason to register them as global MDX components. */ import PageLayout from "blume/components/layout/PageLayout.astro"; import data from "blume:data"; import RecentSolves from "../components/progress/RecentSolves"; import SolvedRing from "../components/progress/SolvedRing"; import SubmissionChart from "../components/progress/SubmissionChart"; import SubmissionHeatmap from "../components/progress/SubmissionHeatmap"; import TopicBubbles from "../components/progress/TopicBubbles"; const { config } = data; const description = "Live campaign progress — solved by difficulty, recent attempts, the year by difficulty, topic coverage, and the most recently solved problems, fetched from the SRS Worker."; ---

Progress

{description}