Repository navigation
Commit 1636137
authored
feat(leaderboard): add votes, sort/filter, preview modal, scoring updates (#7)
* feat(security): add content scanning for SKILL.md files
Implement security scanning layer for SKILL.md content with risk labels,
sanitization, and UI warnings. Includes database schema updates, API
integration, CLI warnings, and comprehensive documentation.
* test: add vitest setup and unit tests for content-scanner and parseIdentifier
- Add vitest configuration (vitest.config.ts) with workspace support
- Implement 30 unit tests for content-scanner (prompt injection, encoding, payloads, edge cases)
- Implement 8 unit tests for parseIdentifier (slug parsing, GitHub format detection)
- Add vitest devDependency and test scripts to package.json
- Security fix: Add bidirectional override characters (U+202A-U+202E) to content scanner regex for defense against Unicode direction spoofing
- Export parseIdentifier from use.ts for testability
- Update pnpm-lock.yaml with vitest dependencies
* docs: update CLI README, CLAUDE.md, and project docs for Phase 3+4 completion
- Update packages/cli/README.md: document publish command, security scanning details, identifier format guidelines
- Update CLAUDE.md: clarify CLI identifier resolution strategy and content security warnings
- Update code-standards.md: add content security scanning section with risk labels and sanitization procedures
- Update codebase-summary.md: document security-focused content scanner with regex patterns for injection detection
- Update system-architecture.md: add content security layer architecture and defense mechanisms
- Mark Phase 3 (Integration Testing) as complete with test coverage summary
- Mark Phase 4 (Docs & Deploy) as complete with all documentation updates
- Update plan.md with overall redesign completion status and next milestones
* feat(leaderboard): add votes, sort/filter, preview modal, scoring updates
- Add votes table with upvote/downvote (migration 0007)
- Add vote API endpoint with rate limiting (10/min per user)
- Add user interactions API for batch favorites+votes fetch
- Expand leaderboard API with description, category, netVotes, category filter
- Add sort tabs (best/rating/installs/trending/newest) and category dropdown
- Add skill preview modal with description, stats, and CTA
- Add vote arrows and favorite heart to leaderboard rows
- Implement optimistic UI with revert on error
- Make author names clickable GitHub links (with username validation)
- Update search boost scoring: 8 signals (votes at 7%, RRF 50%→43%)
- Update leaderboard composite: 7 signals (votes 10%, rating 35%→30%, installs 25%→20%)
- Update recompute pipeline with maxNetVotes normalization
- Add auth state to home page for interaction overlay
* docs: update plans and project docs for leaderboard enhancements completion
- Mark all 4 phases complete in plan.md
- Update phase files with checked TODOs
- Update codebase-summary.md with votes table and new endpoints
- Update system-architecture.md with 8-signal scoring1 parent ef47ca4 commit 1636137
74 files changed
Lines changed: 42804 additions & 235 deletions
File tree
- apps/web
- app
- components
- lib
- db
- leaderboard
- search
- security
- routes
- drizzle/migrations
- docs
- research
- packages/cli
- src/commands
- plans
- 260213-1233-skillx-use-identifier-redesign
- 260213-1558-leaderboard-enhancements
- reports
- scripts
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
| 56 | + | |
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| 68 | + | |
| 69 | + | |
68 | 70 | | |
69 | 71 | | |
70 | 72 | | |
| |||
88 | 90 | | |
89 | 91 | | |
90 | 92 | | |
| 93 | + | |
91 | 94 | | |
92 | 95 | | |
| 96 | + | |
93 | 97 | | |
94 | 98 | | |
95 | 99 | | |
96 | 100 | | |
97 | 101 | | |
98 | | - | |
| 102 | + | |
99 | 103 | | |
100 | 104 | | |
101 | 105 | | |
| |||
109 | 113 | | |
110 | 114 | | |
111 | 115 | | |
112 | | - | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
113 | 121 | | |
114 | 122 | | |
115 | 123 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
3 | 5 | | |
4 | 6 | | |
5 | 7 | | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | 8 | | |
16 | 9 | | |
17 | 10 | | |
| 11 | + | |
| 12 | + | |
18 | 13 | | |
19 | 14 | | |
20 | 15 | | |
21 | 16 | | |
22 | 17 | | |
| 18 | + | |
| 19 | + | |
23 | 20 | | |
24 | 21 | | |
25 | 22 | | |
26 | 23 | | |
27 | | - | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
28 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
29 | 34 | | |
30 | 35 | | |
31 | 36 | | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
32 | 62 | | |
33 | | - | |
34 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
35 | 77 | | |
36 | 78 | | |
37 | 79 | | |
38 | 80 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
50 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
51 | 101 | | |
52 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
53 | 108 | | |
54 | 109 | | |
55 | 110 | | |
56 | 111 | | |
57 | 112 | | |
58 | 113 | | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
59 | 210 | | |
60 | 211 | | |
| 212 | + | |
61 | 213 | | |
62 | 214 | | |
63 | 215 | | |
| |||
75 | 227 | | |
76 | 228 | | |
77 | 229 | | |
78 | | - | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
79 | 255 | | |
80 | 256 | | |
81 | 257 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
0 commit comments