feat(landing): add /skill-watch page wired to frames.ag dataset#16
Merged
Conversation
Adds a live Skill Watch page that pulls audited agent skills from the microchipgnu/skill-watch dataset on frames.ag (ISR, 1h revalidate) and displays them as sortable, filterable cards with snapshot stats, a severity + grade breakdown, an OWASP AST-10 distribution chart, and a paginated inventory grid. Replaces the "Examples" nav entry in the header and both footer columns with "Skill Watch" pointing at the new route; the /examples page itself stays in place. Inventory UX: 24 cards per page with "Show 24 more" + "Show all" load actions, sticky filter bar (search + grade + vuln + OWASP filter groups), sort row visible at all viewports, Reset filters affordance, ARIA pressed states on every toggle, and per-card grade/capability labels for screen readers. OWASP bars dispatch a custom event that auto-applies the OWASP filter and smooth-scrolls to #inventory. To unblock React hydration the server prop is slimmed via slimEntity() to drop the heavy per-field evidence block before serialization, shrinking the embedded HTML payload from ~3.8MB to ~600KB. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new Skill Watch page at
/skill-watchthat pulls audited agent skills from the microchipgnu/skill-watch dataset on frames.ag and renders them as a live, sortable, filterable inventory. The "Examples" link in the header and both footer columns now point at the new page; the existing/examplesroute stays in place for now.What's on the page
Inventory UX
top-[64px]with backdrop-blur so filters stay reachable while scrollinghidden md:flex)skill-watch:filter-owaspevent that the table listens for, then smooth-scrolls to#inventory. The bar count (e.g. AST05 = 260) matches the filter result exactlyaria-pressedon every toggle,role="img"+aria-labelon grade chips and capability badges,aria-live="polite"on the result counter,scroll-mt-24on#inventoryto clear the fixed headerPerformance note for reviewers
The upstream JSON is ~4.5 MB. Passing the raw response (including the per-field
evidenceblock with URLs + excerpts on every record) to the client component embeds the full payload in the page HTML and stalls React hydration — clicks become unresponsive. Fixed byslimEntity()inpage.tsxwhich dropsevidencebefore serialization, shrinking the inline payload from ~3.8 MB to ~600 KB. Next.js's fetch data cache also refuses the 4.5 MB response (>2 MB limit) — that's a non-fatal warning at build time; ISR still works, each revalidate hits the API fresh.Test plan
bun run build—/skill-watchroute emits at ~6.5 kB, static, 1h revalidatebun run lintclean/skill-watch🤖 Generated with Claude Code