Stale Detection:
- Detect skills removed/moved from GitHub (3 consecutive 404s threshold)
- Hide stale skills from browse/search, show warning banner on detail page
- Serve cached files with isStale flag when GitHub returns 404
- Add stale-check crawler command for batch verification
- CLI shows warning when installing stale skills from cache
Sentry & Error Handling:
- Filter browser extension errors and add denyUrls
- Anti-inflation measures and sentinel recalibration for curation
Claim & Removal:
- Enhanced ClaimForm with repo-level removal support
- Add repo-removal-request API endpoint with tests
- Improved owner page with bilingual content
Review Pipeline:
- Review version and reviewer tracking in submit API
- Source format filter for pending reviews
- Updated review tests
Other:
- Updated i18n strings (en/fa)
- BrowseFilters improvements
- Dockerfile updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- feat(review): add skill_reviews table, review API endpoints (pending/submit/stats), admin auth
- perf: parallel file fetching in skill-files API (was sequential → timeout)
- fix: handle Date serialization from Redis cache
- fix: align curation batch scripts with current browseReadyFilter
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Redis caching to browse search results and skill detail API
- Show progress bar on homepage search
- Default sort to stars
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Redis caching to all pages and uncached API routes
- Rewrite progress bar with direct DOM manipulation for search/filters/navigation
- Filter generic network errors from Sentry client reporting
- Fix non-null assertion for repo.owner in popular-repos strategy
- Remove next-nprogress-bar dependency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Downloads represent real user actions and should not be filtered by
browse-ready criteria. Skills count and contributors remain filtered.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Preserve 'all' value in format filter URL param so "All Formats"
selection persists correctly
- Filter AbortError from client-side Sentry error reporting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Automate curation:
- Add runPostCrawlCuration() to DB queries — runs after every
full and incremental crawl (classify, dedup, category counts)
- No more need for manual curate.mjs runs after each crawl
Quality messaging:
- Homepage stats label: "Skills" → "Curated Skills" (en/fa)
- Add curation note: "deduplicated and quality-filtered from X+ repos"
- Update fallback counts from 172K to 16K across all touchpoints
(BetaBanner, getting-started prompts, email templates)
- getting-started skill count query now uses browse-ready filter
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add comprehensive data curation system to clean up the 197K skill
dataset and show only quality browse-ready skills to users.
Phase 1 — Database exploration:
- Explore scripts (explore.ts, explore.mjs, explore.sql) for analysis
- Discovered: 69% duplicates, 77% aggregator/fork noise
Phase 2 — Data cleanup and classification:
- Schema: 6 new curation columns + 4 indexes
- curate.mjs: 8-step pipeline (classify, dedup, fork detection, etc.)
- Result: 197K → 60K unique → 16K browse-ready skills
- Bug fix: securityStatus was computed but never stored during crawl
Phase 3 — UI browse-ready filters:
- browseReadyFilter applied to 17+ query functions
- Homepage stats show accurate browse-ready counts
- Stats API filtered (previously had no WHERE clause)
- Category counts recalculated (e.g. 45K → 3.1K)
- Featured skills exclude duplicates and aggregators
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sitemap was generating /en/* URLs which redirect to unprefixed paths
due to localePrefix: 'as-needed', causing Google Search Console
"Page with redirect" warnings and wasting crawl budget.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Lower exhaustion threshold from <10 to <2 (stop wasting remaining tokens)
- Refresh ALL tokens after wait instead of only one
- Fix token/Octokit mismatch by returning token from getBestInstance()
- Add budget checking (20% reserve) to deep-scan, discover-repos, awesome-lists,
and full-enhanced commands
- Add rate limit error handling with retry in DeepScanCrawler
- Sync translation and query changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Generate sitemap.xml with all skill URLs for search engine discovery
- Return empty sitemap on mirror servers to prevent duplicate indexing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- fetchWithCsrf now awaits token initialization before sending requests
- Sync crawler and worker updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Open-source marketplace for AI Agent skills.
Features:
- Next.js 15 web app with i18n (en/fa)
- CLI tool for skill installation (npx skillhub)
- GitHub crawler/indexer with multi-strategy discovery
- Security scanning for all indexed skills
- Self-hostable with Docker
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>