quackscore 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/commands/leaderboard.d.ts +1 -1
  2. package/dist/commands/leaderboard.d.ts.map +1 -1
  3. package/dist/commands/leaderboard.js +12 -5
  4. package/dist/commands/leaderboard.js.map +1 -1
  5. package/dist/commands/mock-report.js +13 -13
  6. package/dist/commands/mock-report.js.map +1 -1
  7. package/dist/index.js +3 -3
  8. package/dist/index.js.map +1 -1
  9. package/dist/llm/prompts.d.ts.map +1 -1
  10. package/dist/llm/prompts.js +7 -2
  11. package/dist/llm/prompts.js.map +1 -1
  12. package/dist/report/generate.d.ts.map +1 -1
  13. package/dist/report/generate.js +32 -9
  14. package/dist/report/generate.js.map +1 -1
  15. package/dist/report/index.d.ts +1 -0
  16. package/dist/report/index.d.ts.map +1 -1
  17. package/dist/report/index.js +1 -0
  18. package/dist/report/index.js.map +1 -1
  19. package/dist/report/leaderboard.d.ts +3 -0
  20. package/dist/report/leaderboard.d.ts.map +1 -0
  21. package/dist/report/leaderboard.js +486 -0
  22. package/dist/report/leaderboard.js.map +1 -0
  23. package/dist/shared/technologies.d.ts +2 -2
  24. package/dist/shared/technologies.d.ts.map +1 -1
  25. package/dist/shared/technologies.js +38 -32
  26. package/dist/shared/technologies.js.map +1 -1
  27. package/dist/shared/types.d.ts +6 -0
  28. package/dist/shared/types.d.ts.map +1 -1
  29. package/dist/storage/index.d.ts +1 -1
  30. package/dist/storage/index.d.ts.map +1 -1
  31. package/dist/storage/index.js +1 -1
  32. package/dist/storage/index.js.map +1 -1
  33. package/dist/storage/leaderboard.d.ts +1 -0
  34. package/dist/storage/leaderboard.d.ts.map +1 -1
  35. package/dist/storage/leaderboard.js +93 -8
  36. package/dist/storage/leaderboard.js.map +1 -1
  37. package/dist/storage/paths.d.ts +1 -0
  38. package/dist/storage/paths.d.ts.map +1 -1
  39. package/dist/storage/paths.js +1 -0
  40. package/dist/storage/paths.js.map +1 -1
  41. package/dist/storage/user.d.ts.map +1 -1
  42. package/dist/storage/user.js +10 -2
  43. package/dist/storage/user.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1,486 @@
1
+ const DISPLAY_LABELS = {
2
+ ai: 'AI',
3
+ ai_coding_optimizations: 'AI Coding',
4
+ backend: 'Backend',
5
+ devops: 'DevOps',
6
+ mobile_frontend: 'Mobile Frontend',
7
+ qa: 'QA',
8
+ scripts: 'Scripts',
9
+ security: 'Security',
10
+ sre: 'SRE',
11
+ web_frontend: 'Web Frontend',
12
+ };
13
+ function escapeHtml(value) {
14
+ return value
15
+ .replace(/&/g, '&')
16
+ .replace(/</g, '&lt;')
17
+ .replace(/>/g, '&gt;')
18
+ .replace(/"/g, '&quot;')
19
+ .replace(/'/g, '&#39;');
20
+ }
21
+ function formatLabel(value) {
22
+ if (!value)
23
+ return 'Unspecified';
24
+ return DISPLAY_LABELS[value] ?? value.split('_').map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(' ');
25
+ }
26
+ function compactText(value, maxLength = 260) {
27
+ if (!value)
28
+ return 'Summary not available yet.';
29
+ const normalized = value.replace(/\s+/g, ' ').trim();
30
+ if (normalized.length <= maxLength)
31
+ return normalized;
32
+ return `${normalized.slice(0, maxLength - 3).trimEnd()}...`;
33
+ }
34
+ function formatDate(value) {
35
+ return new Date(value).toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric' });
36
+ }
37
+ export function generateLeaderboardHTML(entries) {
38
+ const PROFILES_PER_PAGE = 50;
39
+ const pageCount = Math.max(1, Math.ceil(entries.length / PROFILES_PER_PAGE));
40
+ const rows = entries.map((entry, index) => {
41
+ const preview = compactText(entry.summary, 170);
42
+ const fullSummary = compactText(entry.summary, 520);
43
+ const reportAction = entry.reportPath
44
+ ? `<a class="action-link" href="file:///${entry.reportPath.replace(/\\/g, '/')}" target="_blank" rel="noopener noreferrer">Open report</a>`
45
+ : '<span class="action-link disabled">Report missing</span>';
46
+ const page = Math.floor(index / PROFILES_PER_PAGE) + 1;
47
+ return `<details class="entry"${page === 1 ? ' open' : ''} data-page="${page}">
48
+ <summary class="entry-summary">
49
+ <div class="rank">${index + 1}</div>
50
+ <div class="entry-main">
51
+ <div class="entry-top">
52
+ <div>
53
+ <h2>${escapeHtml(entry.username)}</h2>
54
+ <div class="subtitle">${escapeHtml(entry.title ?? 'Generated profile')}</div>
55
+ </div>
56
+ <div class="xp-block">
57
+ <strong>${entry.totalPoints.toLocaleString()} XP</strong>
58
+ <span>Level ${entry.level}</span>
59
+ </div>
60
+ </div>
61
+ <div class="meta-row">
62
+ <span class="meta-pill">${entry.analyzedPRs} PRs</span>
63
+ <span class="meta-pill">${escapeHtml(formatLabel(entry.primaryArea))}</span>
64
+ <span class="meta-pill">Updated ${escapeHtml(formatDate(entry.lastUpdated))}</span>
65
+ </div>
66
+ <p class="summary preview">${escapeHtml(preview)}</p>
67
+ </div>
68
+ <div class="entry-side">
69
+ ${reportAction}
70
+ <span class="expand-hint">More</span>
71
+ </div>
72
+ </summary>
73
+ <div class="entry-details">
74
+ <p class="summary full">${escapeHtml(fullSummary)}</p>
75
+ <div class="detail-grid">
76
+ <div class="detail-box">
77
+ <span class="detail-label">Profile</span>
78
+ <strong>${escapeHtml(entry.title ?? 'Generated profile')}</strong>
79
+ </div>
80
+ <div class="detail-box">
81
+ <span class="detail-label">Strongest Area</span>
82
+ <strong>${escapeHtml(formatLabel(entry.primaryArea))}</strong>
83
+ </div>
84
+ <div class="detail-box">
85
+ <span class="detail-label">Scope</span>
86
+ <strong>${escapeHtml(entry.storageKey)}</strong>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </details>`;
91
+ }).join('');
92
+ const body = rows || '<div class="empty">No generated profiles found in ~/.quackscore yet.</div>';
93
+ const pagination = entries.length > PROFILES_PER_PAGE
94
+ ? `<div class="pagination" aria-label="Leaderboard pagination">
95
+ <button class="page-btn" type="button" data-nav="prev">Previous</button>
96
+ <div class="page-status" data-page-status>Page <strong>1</strong> of ${pageCount}</div>
97
+ <button class="page-btn" type="button" data-nav="next">Next</button>
98
+ </div>`
99
+ : '';
100
+ return `<!DOCTYPE html>
101
+ <html lang="en">
102
+ <head>
103
+ <meta charset="UTF-8">
104
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
105
+ <title>Quackscore Leaderboard</title>
106
+ <style>
107
+ @import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@500;700;800&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap');
108
+
109
+ :root {
110
+ color-scheme: dark;
111
+ --bg: #080808;
112
+ --panel: rgba(16, 16, 16, 0.95);
113
+ --panel-soft: rgba(24, 24, 24, 0.88);
114
+ --border: rgba(255,255,255,0.08);
115
+ --text: #f5f5f5;
116
+ --muted: #9a9a9a;
117
+ --amber: #f5b331;
118
+ --blue: #7da2ff;
119
+ --violet: #b380ff;
120
+ --green: #7dd3a7;
121
+ }
122
+ * { box-sizing: border-box; }
123
+ body {
124
+ margin: 0;
125
+ min-height: 100vh;
126
+ font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
127
+ color: var(--text);
128
+ background:
129
+ radial-gradient(circle at top left, rgba(245,179,49,0.12), transparent 30%),
130
+ radial-gradient(circle at top right, rgba(125,162,255,0.09), transparent 26%),
131
+ linear-gradient(180deg, #050505 0%, #0b0b0b 100%);
132
+ }
133
+ .shell {
134
+ width: min(1100px, calc(100vw - 32px));
135
+ margin: 0 auto;
136
+ padding: 32px 0 48px;
137
+ }
138
+ .hero {
139
+ display: grid;
140
+ grid-template-columns: minmax(0, 1fr) auto;
141
+ gap: 20px;
142
+ margin-bottom: 28px;
143
+ padding: 26px 28px;
144
+ border-radius: 28px;
145
+ border: 1px solid rgba(245,179,49,0.16);
146
+ background:
147
+ radial-gradient(circle at 12% 18%, rgba(245,179,49,0.15), transparent 26%),
148
+ radial-gradient(circle at 82% 12%, rgba(125,162,255,0.12), transparent 24%),
149
+ linear-gradient(180deg, rgba(14,14,14,0.96), rgba(10,10,10,0.98));
150
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.04);
151
+ }
152
+ .hero-copy {
153
+ display: grid;
154
+ gap: 10px;
155
+ }
156
+ .hero-topline {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 12px;
160
+ font-family: "JetBrains Mono", ui-monospace, monospace;
161
+ letter-spacing: 0.18em;
162
+ text-transform: uppercase;
163
+ font-size: 0.78rem;
164
+ color: var(--muted);
165
+ }
166
+ .duck-badge {
167
+ width: 48px;
168
+ height: 48px;
169
+ display: grid;
170
+ place-items: center;
171
+ border-radius: 16px;
172
+ background: linear-gradient(180deg, rgba(245,179,49,0.22), rgba(245,179,49,0.08));
173
+ border: 1px solid rgba(245,179,49,0.28);
174
+ font-size: 1.6rem;
175
+ box-shadow: 0 12px 28px rgba(0,0,0,0.28);
176
+ }
177
+ .hero h1 {
178
+ margin: 0 0 8px;
179
+ font-family: "Cinzel", ui-serif, Georgia, serif;
180
+ font-size: clamp(2rem, 4vw, 3.7rem);
181
+ line-height: 1;
182
+ color: #ffd36f;
183
+ text-shadow: 0 0 18px rgba(245,179,49,0.18);
184
+ }
185
+ .hero p {
186
+ margin: 0;
187
+ max-width: 760px;
188
+ color: var(--muted);
189
+ line-height: 1.7;
190
+ }
191
+ .count {
192
+ align-self: end;
193
+ min-width: 168px;
194
+ padding: 16px 18px;
195
+ border-radius: 18px;
196
+ border: 1px solid var(--border);
197
+ background: rgba(255,255,255,0.04);
198
+ font-size: 0.95rem;
199
+ color: var(--muted);
200
+ font-family: "JetBrains Mono", ui-monospace, monospace;
201
+ }
202
+ .count strong {
203
+ display: block;
204
+ color: var(--amber);
205
+ font-size: 1.6rem;
206
+ font-family: "Cinzel", ui-serif, Georgia, serif;
207
+ }
208
+ .board {
209
+ display: grid;
210
+ gap: 12px;
211
+ }
212
+ .entry {
213
+ border-radius: 22px;
214
+ border: 1px solid var(--border);
215
+ background: linear-gradient(180deg, var(--panel), var(--panel-soft));
216
+ overflow: hidden;
217
+ }
218
+ .entry[hidden] {
219
+ display: none;
220
+ }
221
+ .entry-summary {
222
+ list-style: none;
223
+ cursor: pointer;
224
+ display: grid;
225
+ grid-template-columns: 64px minmax(0, 1fr) auto;
226
+ gap: 16px;
227
+ align-items: center;
228
+ padding: 16px 18px;
229
+ }
230
+ .entry-summary::-webkit-details-marker,
231
+ .entry-summary::marker {
232
+ display: none;
233
+ }
234
+ .rank {
235
+ display: grid;
236
+ place-items: center;
237
+ width: 48px;
238
+ height: 48px;
239
+ border-radius: 16px;
240
+ background: linear-gradient(180deg, rgba(245,179,49,0.16), rgba(179,128,255,0.10));
241
+ color: var(--amber);
242
+ font-weight: 800;
243
+ font-size: 1.2rem;
244
+ font-family: "Cinzel", ui-serif, Georgia, serif;
245
+ }
246
+ .entry-top {
247
+ display: flex;
248
+ align-items: start;
249
+ justify-content: space-between;
250
+ gap: 16px;
251
+ }
252
+ .entry-top h2 {
253
+ margin: 0;
254
+ font-size: 1.18rem;
255
+ }
256
+ .subtitle {
257
+ margin-top: 4px;
258
+ color: var(--blue);
259
+ font-size: 0.88rem;
260
+ }
261
+ .xp-block {
262
+ text-align: right;
263
+ white-space: nowrap;
264
+ font-family: "JetBrains Mono", ui-monospace, monospace;
265
+ }
266
+ .xp-block strong {
267
+ display: block;
268
+ color: var(--amber);
269
+ font-size: 1.05rem;
270
+ }
271
+ .xp-block span,
272
+ .summary,
273
+ .meta-pill,
274
+ .action-link,
275
+ .disabled {
276
+ color: var(--muted);
277
+ }
278
+ .meta-row {
279
+ display: flex;
280
+ flex-wrap: wrap;
281
+ gap: 8px;
282
+ margin-top: 10px;
283
+ }
284
+ .meta-pill {
285
+ padding: 5px 9px;
286
+ border-radius: 999px;
287
+ background: rgba(255,255,255,0.05);
288
+ font-size: 0.78rem;
289
+ font-family: "JetBrains Mono", ui-monospace, monospace;
290
+ }
291
+ .summary {
292
+ margin: 10px 0 0;
293
+ line-height: 1.6;
294
+ font-size: 0.94rem;
295
+ }
296
+ .summary.preview {
297
+ display: -webkit-box;
298
+ -webkit-line-clamp: 2;
299
+ -webkit-box-orient: vertical;
300
+ overflow: hidden;
301
+ }
302
+ .entry-side {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 10px;
306
+ }
307
+ .action-link {
308
+ display: inline-flex;
309
+ align-items: center;
310
+ justify-content: center;
311
+ min-width: 112px;
312
+ padding: 10px 13px;
313
+ border-radius: 12px;
314
+ border: 1px solid rgba(125,162,255,0.22);
315
+ background: rgba(125,162,255,0.09);
316
+ color: #dbe5ff;
317
+ text-decoration: none;
318
+ font-weight: 600;
319
+ font-size: 0.88rem;
320
+ }
321
+ .disabled {
322
+ border-color: var(--border);
323
+ background: rgba(255,255,255,0.04);
324
+ }
325
+ .expand-hint {
326
+ min-width: 56px;
327
+ text-align: center;
328
+ padding: 8px 10px;
329
+ border-radius: 10px;
330
+ background: rgba(255,255,255,0.04);
331
+ color: var(--muted);
332
+ font-family: "JetBrains Mono", ui-monospace, monospace;
333
+ font-size: 0.76rem;
334
+ text-transform: uppercase;
335
+ letter-spacing: 0.08em;
336
+ }
337
+ .entry[open] .expand-hint {
338
+ color: var(--green);
339
+ }
340
+ .entry-details {
341
+ padding: 0 18px 18px 98px;
342
+ border-top: 1px solid rgba(255,255,255,0.06);
343
+ background: rgba(0,0,0,0.10);
344
+ }
345
+ .detail-grid {
346
+ display: grid;
347
+ grid-template-columns: repeat(3, minmax(0, 1fr));
348
+ gap: 10px;
349
+ margin-top: 14px;
350
+ }
351
+ .detail-box {
352
+ padding: 12px 14px;
353
+ border-radius: 14px;
354
+ border: 1px solid rgba(255,255,255,0.06);
355
+ background: rgba(255,255,255,0.03);
356
+ }
357
+ .detail-label {
358
+ display: block;
359
+ margin-bottom: 6px;
360
+ color: var(--muted);
361
+ font-size: 0.74rem;
362
+ font-family: "JetBrains Mono", ui-monospace, monospace;
363
+ text-transform: uppercase;
364
+ letter-spacing: 0.12em;
365
+ }
366
+ .detail-box strong {
367
+ color: var(--text);
368
+ font-size: 0.95rem;
369
+ }
370
+ .pagination {
371
+ display: flex;
372
+ align-items: center;
373
+ justify-content: space-between;
374
+ gap: 18px;
375
+ margin-top: 18px;
376
+ padding-top: 18px;
377
+ }
378
+ .page-btn {
379
+ min-width: 110px;
380
+ padding: 10px 14px;
381
+ border-radius: 12px;
382
+ border: 1px solid rgba(255,255,255,0.08);
383
+ background: rgba(255,255,255,0.04);
384
+ color: var(--text);
385
+ font-family: "JetBrains Mono", ui-monospace, monospace;
386
+ cursor: pointer;
387
+ }
388
+ .page-btn:disabled {
389
+ opacity: 0.45;
390
+ cursor: not-allowed;
391
+ }
392
+ .page-status {
393
+ color: var(--muted);
394
+ font-family: "JetBrains Mono", ui-monospace, monospace;
395
+ text-align: center;
396
+ flex: 1 1 auto;
397
+ }
398
+ .page-status strong {
399
+ color: var(--amber);
400
+ }
401
+ .empty {
402
+ padding: 32px;
403
+ border-radius: 22px;
404
+ border: 1px dashed var(--border);
405
+ text-align: center;
406
+ color: var(--muted);
407
+ }
408
+ @media (max-width: 900px) {
409
+ .hero,
410
+ .entry-summary,
411
+ .detail-grid {
412
+ grid-template-columns: 1fr;
413
+ }
414
+ .count {
415
+ min-width: 0;
416
+ }
417
+ .entry-side {
418
+ justify-content: start;
419
+ }
420
+ .entry-details {
421
+ padding-left: 18px;
422
+ }
423
+ }
424
+ @media (max-width: 720px) {
425
+ .entry-top {
426
+ flex-direction: column;
427
+ }
428
+ .entry-side {
429
+ flex-wrap: wrap;
430
+ }
431
+ }
432
+ </style>
433
+ </head>
434
+ <body>
435
+ <div class="shell">
436
+ <header class="hero">
437
+ <div class="hero-copy">
438
+ <div class="hero-topline"><span class="duck-badge" aria-hidden="true">&#129414;</span><span>Guild Hall Rankings</span></div>
439
+ <h1>Quackscore Leaderboard</h1>
440
+ <p>Generated from saved local profiles. This hall compares the reports already analyzed on this machine, including org-scoped cards, and lets you expand each profile only when you want the fuller manager summary.</p>
441
+ </div>
442
+ <div class="count"><strong>${entries.length}</strong> profiles</div>
443
+ </header>
444
+ <section class="board">${body}</section>
445
+ ${pagination}
446
+ </div>
447
+ <script>
448
+ (function() {
449
+ const entries = Array.from(document.querySelectorAll('[data-page]'));
450
+ const prevButton = document.querySelector('[data-nav="prev"]');
451
+ const nextButton = document.querySelector('[data-nav="next"]');
452
+ const status = document.querySelector('[data-page-status]');
453
+ if (!entries.length || !prevButton || !nextButton || !status) return;
454
+
455
+ const totalPages = ${pageCount};
456
+ let currentPage = 1;
457
+
458
+ const render = () => {
459
+ entries.forEach((entry) => {
460
+ const page = Number(entry.getAttribute('data-page'));
461
+ entry.hidden = page !== currentPage;
462
+ });
463
+ prevButton.disabled = currentPage === 1;
464
+ nextButton.disabled = currentPage === totalPages;
465
+ status.innerHTML = 'Page <strong>' + currentPage + '</strong> of ' + totalPages;
466
+ };
467
+
468
+ prevButton.addEventListener('click', () => {
469
+ if (currentPage === 1) return;
470
+ currentPage -= 1;
471
+ render();
472
+ });
473
+
474
+ nextButton.addEventListener('click', () => {
475
+ if (currentPage === totalPages) return;
476
+ currentPage += 1;
477
+ render();
478
+ });
479
+
480
+ render();
481
+ })();
482
+ </script>
483
+ </body>
484
+ </html>`;
485
+ }
486
+ //# sourceMappingURL=leaderboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/report/leaderboard.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export declare const TECHNOLOGY_TAXONOMY: readonly ["javascript", "typescript", "python", "java", "dotnet", "go", "rust", "cpp", "ruby", "php", "swift", "kotlin", "sql", "data", "react", "vue", "angular", "svelte", "nodejs", "docker", "kubernetes", "terraform", "cloud", "bash", "powershell", "pytorch", "tensorflow", "elixir", "dart", "solidity", "scala", "mobile", "api", "ci_cd", "testing", "game_dev", "css", "html", "markdown", "other"];
1
+ export declare const TECHNOLOGY_TAXONOMY: readonly ["javascript", "typescript", "python", "java", "dotnet", "go", "rust", "cpp", "ruby", "php", "swift", "kotlin", "sql", "data", "react", "vue", "angular", "svelte", "nodejs", "docker", "kubernetes", "terraform", "cloud", "bash", "powershell", "pytorch", "tensorflow", "elixir", "dart", "solidity", "scala", "mobile", "game_dev", "css", "html"];
2
2
  export type Technology = (typeof TECHNOLOGY_TAXONOMY)[number];
3
- export declare function normalizeTechnology(value: string): Technology;
3
+ export declare function normalizeTechnology(value: string): Technology | null;
4
4
  export declare function normalizeTechnologies(values: string[]): Technology[];
5
5
  //# sourceMappingURL=technologies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"technologies.d.ts","sourceRoot":"","sources":["../../src/shared/technologies.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,iZAyCtB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAiH9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAiC7D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAEpE"}
1
+ {"version":3,"file":"technologies.d.ts","sourceRoot":"","sources":["../../src/shared/technologies.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,iWAoCtB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AA2H9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkCpE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAEpE"}
@@ -31,14 +31,9 @@ export const TECHNOLOGY_TAXONOMY = [
31
31
  'solidity',
32
32
  'scala',
33
33
  'mobile',
34
- 'api',
35
- 'ci_cd',
36
- 'testing',
37
34
  'game_dev',
38
35
  'css',
39
36
  'html',
40
- 'markdown',
41
- 'other',
42
37
  ];
43
38
  const DIRECT_ALIASES = {
44
39
  js: 'javascript',
@@ -111,20 +106,6 @@ const DIRECT_ALIASES = {
111
106
  flutter: 'mobile',
112
107
  react_native: 'mobile',
113
108
  mobile: 'mobile',
114
- graphql: 'api',
115
- grpc: 'api',
116
- openapi: 'api',
117
- rest: 'api',
118
- github_actions: 'ci_cd',
119
- jenkins: 'ci_cd',
120
- circleci: 'ci_cd',
121
- playwright: 'testing',
122
- cypress: 'testing',
123
- jest: 'testing',
124
- selenium: 'testing',
125
- vitest: 'testing',
126
- mocha: 'testing',
127
- chai: 'testing',
128
109
  mongodb: 'data',
129
110
  redis: 'data',
130
111
  elasticsearch: 'data',
@@ -144,15 +125,40 @@ const DIRECT_ALIASES = {
144
125
  scss: 'css',
145
126
  sass: 'css',
146
127
  html: 'html',
147
- markdown: 'markdown',
148
- mdx: 'markdown',
149
- other: 'other',
150
128
  };
129
+ const NON_STACK_ALIASES = new Set([
130
+ 'api',
131
+ 'graphql',
132
+ 'grpc',
133
+ 'openapi',
134
+ 'rest',
135
+ 'ci_cd',
136
+ 'cicd',
137
+ 'ci',
138
+ 'github_actions',
139
+ 'jenkins',
140
+ 'circleci',
141
+ 'testing',
142
+ 'test',
143
+ 'tests',
144
+ 'playwright',
145
+ 'cypress',
146
+ 'jest',
147
+ 'selenium',
148
+ 'vitest',
149
+ 'mocha',
150
+ 'chai',
151
+ 'markdown',
152
+ 'mdx',
153
+ 'other',
154
+ ]);
151
155
  const ALLOWED_TECHNOLOGIES = new Set(TECHNOLOGY_TAXONOMY);
152
156
  export function normalizeTechnology(value) {
153
157
  const normalized = value.trim().toLowerCase().replace(/[\s-]+/g, '_');
154
158
  if (!normalized)
155
- return 'other';
159
+ return null;
160
+ if (NON_STACK_ALIASES.has(normalized))
161
+ return null;
156
162
  if (DIRECT_ALIASES[normalized])
157
163
  return DIRECT_ALIASES[normalized];
158
164
  if (ALLOWED_TECHNOLOGIES.has(normalized))
@@ -179,12 +185,6 @@ export function normalizeTechnology(value) {
179
185
  return 'sql';
180
186
  if (normalized.includes('mongo') || normalized.includes('redis') || normalized.includes('elastic') || normalized.includes('cassandra') || normalized.includes('dynamo') || normalized.includes('neo4j') || normalized.includes('kafka') || normalized.includes('rabbit'))
181
187
  return 'data';
182
- if (normalized.includes('graphql') || normalized.includes('grpc') || normalized.includes('openapi') || normalized.includes('rest'))
183
- return 'api';
184
- if (normalized.includes('github_action') || normalized.includes('jenkins') || normalized.includes('circle') || normalized.includes('ci'))
185
- return 'ci_cd';
186
- if (normalized.includes('test') || normalized.includes('jest') || normalized.includes('playwright') || normalized.includes('cypress') || normalized.includes('selenium') || normalized.includes('vitest'))
187
- return 'testing';
188
188
  if (normalized.includes('cloud') || normalized.includes('aws') || normalized.includes('azure') || normalized.includes('gcp') || normalized.includes('vercel') || normalized.includes('firebase') || normalized.includes('supabase') || normalized.includes('cloudflare'))
189
189
  return 'cloud';
190
190
  if (normalized.includes('docker'))
@@ -201,11 +201,17 @@ export function normalizeTechnology(value) {
201
201
  return 'css';
202
202
  if (normalized.includes('html'))
203
203
  return 'html';
204
+ if (normalized.includes('graphql') || normalized.includes('grpc') || normalized.includes('openapi') || normalized.includes('rest'))
205
+ return null;
206
+ if (normalized.includes('github_action') || normalized.includes('jenkins') || normalized.includes('circle') || normalized === 'ci' || normalized.includes('pipeline'))
207
+ return null;
208
+ if (normalized.includes('test') || normalized.includes('jest') || normalized.includes('playwright') || normalized.includes('cypress') || normalized.includes('selenium') || normalized.includes('vitest'))
209
+ return null;
204
210
  if (normalized.includes('markdown') || normalized.includes('mdx'))
205
- return 'markdown';
206
- return 'other';
211
+ return null;
212
+ return null;
207
213
  }
208
214
  export function normalizeTechnologies(values) {
209
- return [...new Set(values.map((value) => normalizeTechnology(value)))];
215
+ return [...new Set(values.map((value) => normalizeTechnology(value)).filter((value) => value !== null))];
210
216
  }
211
217
  //# sourceMappingURL=technologies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"technologies.js","sourceRoot":"","sources":["../../src/shared/technologies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"technologies.js","sourceRoot":"","sources":["../../src/shared/technologies.ts"],"names":[],"mappings":"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"}
@@ -53,9 +53,15 @@ export interface UserData {
53
53
  character?: CharacterProfile;
54
54
  }
55
55
  export interface LeaderboardEntry {
56
+ storageKey: string;
56
57
  username: string;
57
58
  totalPoints: number;
58
59
  level: number;
59
60
  lastUpdated: string;
61
+ analyzedPRs: number;
62
+ primaryArea?: string;
63
+ title?: string;
64
+ summary?: string;
65
+ reportPath?: string;
60
66
  }
61
67
  //# sourceMappingURL=types.d.ts.map