github-weekly-reporter 0.3.0 → 0.3.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 (97) hide show
  1. package/README.md +53 -79
  2. package/dist/cli/commands/deploy.d.ts +1 -0
  3. package/dist/cli/commands/deploy.d.ts.map +1 -1
  4. package/dist/cli/commands/deploy.js +1 -1
  5. package/dist/cli/commands/deploy.js.map +1 -1
  6. package/dist/cli/commands/fetch.d.ts +11 -0
  7. package/dist/cli/commands/fetch.d.ts.map +1 -1
  8. package/dist/cli/commands/fetch.js +7 -7
  9. package/dist/cli/commands/fetch.js.map +1 -1
  10. package/dist/cli/commands/generate.d.ts +11 -0
  11. package/dist/cli/commands/generate.d.ts.map +1 -1
  12. package/dist/cli/commands/generate.js +1 -5
  13. package/dist/cli/commands/generate.js.map +1 -1
  14. package/dist/cli/commands/render.js +1 -1
  15. package/dist/cli/commands/render.js.map +1 -1
  16. package/dist/cli/commands/setup/constants.d.ts +11 -0
  17. package/dist/cli/commands/setup/constants.d.ts.map +1 -0
  18. package/dist/cli/commands/setup/constants.js +42 -0
  19. package/dist/cli/commands/setup/constants.js.map +1 -0
  20. package/dist/cli/commands/setup/github-api.d.ts +13 -0
  21. package/dist/cli/commands/setup/github-api.d.ts.map +1 -0
  22. package/dist/cli/commands/setup/github-api.js +133 -0
  23. package/dist/cli/commands/setup/github-api.js.map +1 -0
  24. package/dist/cli/commands/setup/validate-model.d.ts +6 -0
  25. package/dist/cli/commands/setup/validate-model.d.ts.map +1 -0
  26. package/dist/cli/commands/setup/validate-model.js +74 -0
  27. package/dist/cli/commands/setup/validate-model.js.map +1 -0
  28. package/dist/cli/commands/setup/workflows.d.ts +25 -0
  29. package/dist/cli/commands/setup/workflows.d.ts.map +1 -0
  30. package/dist/cli/commands/setup/workflows.js +169 -0
  31. package/dist/cli/commands/setup/workflows.js.map +1 -0
  32. package/dist/cli/commands/setup.d.ts +2 -0
  33. package/dist/cli/commands/setup.d.ts.map +1 -1
  34. package/dist/cli/commands/setup.js +6 -410
  35. package/dist/cli/commands/setup.js.map +1 -1
  36. package/dist/cli/index.js +7 -1
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/collector/date-range.d.ts +6 -0
  39. package/dist/collector/date-range.d.ts.map +1 -1
  40. package/dist/collector/date-range.js +25 -1
  41. package/dist/collector/date-range.js.map +1 -1
  42. package/dist/collector/fetch-events.d.ts +2 -1
  43. package/dist/collector/fetch-events.d.ts.map +1 -1
  44. package/dist/collector/fetch-events.js +4 -2
  45. package/dist/collector/fetch-events.js.map +1 -1
  46. package/dist/collector/fetch-repo-prs.d.ts +1 -0
  47. package/dist/collector/fetch-repo-prs.d.ts.map +1 -1
  48. package/dist/collector/fetch-repo-prs.js +4 -2
  49. package/dist/collector/fetch-repo-prs.js.map +1 -1
  50. package/dist/deployer/index-page.d.ts.map +1 -1
  51. package/dist/deployer/index-page.js +5 -404
  52. package/dist/deployer/index-page.js.map +1 -1
  53. package/dist/deployer/index.d.ts +1 -0
  54. package/dist/deployer/index.d.ts.map +1 -1
  55. package/dist/deployer/index.js +2 -3
  56. package/dist/deployer/index.js.map +1 -1
  57. package/dist/deployer/week.d.ts +1 -0
  58. package/dist/deployer/week.d.ts.map +1 -1
  59. package/dist/deployer/week.js +14 -10
  60. package/dist/deployer/week.js.map +1 -1
  61. package/dist/llm/index.d.ts +2 -1
  62. package/dist/llm/index.d.ts.map +1 -1
  63. package/dist/llm/index.js +3 -3
  64. package/dist/llm/index.js.map +1 -1
  65. package/dist/llm/providers/anthropic.d.ts +1 -1
  66. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  67. package/dist/llm/providers/anthropic.js +2 -1
  68. package/dist/llm/providers/anthropic.js.map +1 -1
  69. package/dist/llm/providers/grok.d.ts +1 -1
  70. package/dist/llm/providers/grok.d.ts.map +1 -1
  71. package/dist/llm/providers/grok.js +3 -2
  72. package/dist/llm/providers/grok.js.map +1 -1
  73. package/dist/llm/providers/groq.d.ts +1 -1
  74. package/dist/llm/providers/groq.d.ts.map +1 -1
  75. package/dist/llm/providers/groq.js +3 -2
  76. package/dist/llm/providers/groq.js.map +1 -1
  77. package/dist/llm/providers/openai.d.ts +1 -1
  78. package/dist/llm/providers/openai.d.ts.map +1 -1
  79. package/dist/llm/providers/openai.js +3 -2
  80. package/dist/llm/providers/openai.js.map +1 -1
  81. package/dist/llm/providers/openrouter.d.ts +1 -1
  82. package/dist/llm/providers/openrouter.d.ts.map +1 -1
  83. package/dist/llm/providers/openrouter.js +3 -2
  84. package/dist/llm/providers/openrouter.js.map +1 -1
  85. package/dist/llm/types.d.ts +2 -0
  86. package/dist/llm/types.d.ts.map +1 -1
  87. package/dist/llm/types.js +2 -1
  88. package/dist/llm/types.js.map +1 -1
  89. package/dist/renderer/index.d.ts +1 -0
  90. package/dist/renderer/index.d.ts.map +1 -1
  91. package/dist/renderer/index.js +1 -0
  92. package/dist/renderer/index.js.map +1 -1
  93. package/dist/renderer/themes.d.ts.map +1 -1
  94. package/dist/renderer/themes.js +0 -1
  95. package/dist/renderer/themes.js.map +1 -1
  96. package/package.json +22 -9
  97. package/src/renderer/templates/index-page.hbs +403 -0
@@ -0,0 +1,403 @@
1
+ <!DOCTYPE html>
2
+ <html lang="{{lang}}">
3
+ <head>
4
+ <title>{{siteTitle}}</title>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <meta name="description" content="{{description}}" />
8
+ <meta name="view-transition" content="same-origin" />
9
+ <meta property="og:title" content="{{siteTitleInline}}" />
10
+ <meta property="og:description" content="{{description}}" />
11
+ <meta property="og:type" content="website" />
12
+ {{#if ogImageUrl}}<meta property="og:image" content="{{ogImageUrl}}" />
13
+ <meta property="og:image:width" content="1200" />
14
+ <meta property="og:image:height" content="630" />{{/if}}
15
+ {{#if baseUrl}}<meta property="og:url" content="{{baseUrl}}/" />{{/if}}
16
+ <meta name="twitter:card" content="summary_large_image" />
17
+ <meta name="twitter:title" content="{{siteTitleInline}}" />
18
+ <meta name="twitter:description" content="{{description}}" />
19
+ {{#if ogImageUrl}}<meta name="twitter:image" content="{{ogImageUrl}}" />{{/if}}
20
+ <style>{{{css}}}</style>
21
+ <style>
22
+ body { background: #050505; color: #e8e8e8; overflow-x: hidden; }
23
+
24
+ /* GRAIN OVERLAY */
25
+ body::after {
26
+ content: '';
27
+ position: fixed;
28
+ inset: 0;
29
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
30
+ pointer-events: none;
31
+ z-index: 9999;
32
+ }
33
+
34
+ /* NAV */
35
+ .index-nav {
36
+ position: fixed;
37
+ top: 0; left: 0; right: 0;
38
+ z-index: 100;
39
+ background: rgba(5,5,5,0.8);
40
+ backdrop-filter: blur(16px);
41
+ border-bottom: 1px solid rgba(255,255,255,0.06);
42
+ }
43
+ .index-nav-inner {
44
+ max-width: 960px;
45
+ margin: 0 auto;
46
+ padding: 0.75rem 3rem;
47
+ display: flex;
48
+ align-items: center;
49
+ min-height: 56px;
50
+ }
51
+ .nav-site-title {
52
+ font-size: 0.75rem;
53
+ font-weight: 600;
54
+ letter-spacing: 0.2em;
55
+ text-transform: uppercase;
56
+ color: rgba(255,255,255,0.4);
57
+ white-space: nowrap;
58
+ }
59
+
60
+ /* HERO */
61
+ .hero {
62
+ position: relative;
63
+ min-height: 100vh;
64
+ display: flex;
65
+ flex-direction: column;
66
+ justify-content: flex-end;
67
+ padding: 0 3rem 6rem;
68
+ overflow: hidden;
69
+ }
70
+
71
+ /* GEOMETRIC DECORATIONS */
72
+ .geo-circle {
73
+ position: absolute;
74
+ border-radius: 50%;
75
+ border: 1px solid rgba(255,255,255,0.04);
76
+ }
77
+ .geo-circle-1 { width: 600px; height: 600px; top: -200px; right: -100px; }
78
+ .geo-circle-2 { width: 400px; height: 400px; top: 10%; left: -150px; border-color: {{accentColor}}15; }
79
+ .geo-circle-3 { width: 200px; height: 200px; bottom: 20%; right: 10%; background: {{accentColor}}08; }
80
+ .geo-line {
81
+ position: absolute;
82
+ background: rgba(255,255,255,0.03);
83
+ }
84
+ .geo-line-1 { width: 1px; height: 100%; top: 0; left: 33.33%; }
85
+ .geo-line-2 { width: 1px; height: 100%; top: 0; left: 66.66%; }
86
+ .geo-dot {
87
+ position: absolute;
88
+ width: 4px; height: 4px;
89
+ border-radius: 50%;
90
+ background: {{accentColor}}40;
91
+ }
92
+ .geo-dot-1 { top: 30%; left: 33.33%; }
93
+ .geo-dot-2 { top: 60%; left: 66.66%; }
94
+ .geo-dot-3 { top: 45%; right: 15%; }
95
+
96
+ .hero-inner {
97
+ max-width: 960px;
98
+ margin: 0 auto;
99
+ width: 100%;
100
+ position: relative;
101
+ z-index: 1;
102
+ }
103
+
104
+ /* AVATAR - offset, large, with gradient ring */
105
+ .hero-avatar-wrap {
106
+ position: absolute;
107
+ top: 25vh;
108
+ right: 3rem;
109
+ z-index: 2;
110
+ }
111
+ .hero-avatar {
112
+ width: 180px; height: 180px;
113
+ border-radius: 50%;
114
+ border: 3px solid transparent;
115
+ background-image: linear-gradient(#050505, #050505), linear-gradient(135deg, {{accentColor}}, #8957e5, #f78166);
116
+ background-origin: border-box;
117
+ background-clip: padding-box, border-box;
118
+ transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
119
+ }
120
+ .hero-avatar-wrap:hover .hero-avatar {
121
+ transform: scale(1.08) rotate(3deg);
122
+ }
123
+
124
+ /* MASSIVE TITLE */
125
+ .hero-title {
126
+ font-size: clamp(4rem, 12vw, 9rem);
127
+ font-weight: 900;
128
+ letter-spacing: -0.06em;
129
+ line-height: 0.85;
130
+ color: #ffffff;
131
+ margin-bottom: 3rem;
132
+ max-width: 70%;
133
+ white-space: pre-line;
134
+ }
135
+
136
+ /* PROFILE - asymmetric, stacked */
137
+ .hero-profile {
138
+ display: inline-flex;
139
+ align-items: flex-start;
140
+ gap: 4rem;
141
+ text-decoration: none;
142
+ color: inherit;
143
+ transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
144
+ }
145
+ .hero-profile:hover .hero-display-name {
146
+ color: {{accentColor}};
147
+ text-shadow: 0 0 30px {{accentColor}}80, 0 0 80px {{accentColor}}30;
148
+ }
149
+ .hero-profile:hover .hero-handle {
150
+ text-shadow: 0 0 12px {{accentColor}}60;
151
+ }
152
+ .hero-profile:hover .hero-avatar {
153
+ border-color: {{accentColor}};
154
+ box-shadow: 0 0 30px {{accentColor}}40;
155
+ }
156
+ .hero-profile:hover .hero-stat-value {
157
+ color: {{accentColor}};
158
+ text-shadow: 0 0 16px {{accentColor}}50;
159
+ }
160
+ .hero-name-block {}
161
+ .hero-display-name {
162
+ font-size: 1.5rem;
163
+ font-weight: 300;
164
+ letter-spacing: 0.05em;
165
+ color: rgba(255,255,255,0.9);
166
+ margin-bottom: 0.5rem;
167
+ transition: all 0.4s ease;
168
+ }
169
+ .hero-handle {
170
+ font-family: {{monoFamily}};
171
+ font-size: 0.6875rem;
172
+ color: {{accentColor}};
173
+ letter-spacing: 0.05em;
174
+ transition: all 0.4s ease;
175
+ }
176
+ .hero-bio {
177
+ font-size: 0.875rem;
178
+ color: rgba(255,255,255,0.35);
179
+ margin-top: 0.75rem;
180
+ max-width: 300px;
181
+ line-height: 1.6;
182
+ }
183
+ .hero-stats {
184
+ display: flex;
185
+ flex-direction: column;
186
+ gap: 0.75rem;
187
+ }
188
+ .hero-stat {
189
+ font-family: {{monoFamily}};
190
+ font-size: 0.6875rem;
191
+ color: rgba(255,255,255,0.25);
192
+ }
193
+ .hero-stat-value {
194
+ display: block;
195
+ font-size: 2rem;
196
+ font-weight: 800;
197
+ letter-spacing: -0.03em;
198
+ color: rgba(255,255,255,0.9);
199
+ line-height: 1;
200
+ margin-bottom: 0.125rem;
201
+ transition: all 0.4s ease;
202
+ }
203
+
204
+ /* CONTENT */
205
+ .index-content {
206
+ max-width: 960px;
207
+ margin: 0 auto;
208
+ padding: 0 3rem 6rem;
209
+ position: relative;
210
+ }
211
+
212
+ .year-group { margin-bottom: 5rem; }
213
+ .year-label {
214
+ font-family: {{monoFamily}};
215
+ font-size: 6rem;
216
+ font-weight: 900;
217
+ letter-spacing: -0.05em;
218
+ color: rgba(255,255,255,0.04);
219
+ line-height: 1;
220
+ margin-bottom: 2rem;
221
+ user-select: none;
222
+ }
223
+
224
+ /* WEEK ITEMS - editorial layout */
225
+ .week-list {
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: 0;
229
+ }
230
+ .week-item {
231
+ display: grid;
232
+ grid-template-columns: 80px 1fr auto;
233
+ gap: 2rem;
234
+ align-items: baseline;
235
+ padding: 2rem 0;
236
+ text-decoration: none;
237
+ color: inherit;
238
+ border-top: 1px solid rgba(255,255,255,0.06);
239
+ transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
240
+ position: relative;
241
+ }
242
+ .week-item:last-child { border-bottom: 1px solid rgba(255,255,255,0.06); }
243
+ .week-item::before {
244
+ content: '';
245
+ position: absolute;
246
+ left: -3rem; top: 0; bottom: 0;
247
+ width: 2px;
248
+ background: {{accentColor}};
249
+ transform: scaleY(0);
250
+ transform-origin: top;
251
+ transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
252
+ }
253
+ .week-item:hover { padding-left: 1rem; }
254
+ .week-item:hover::before { transform: scaleY(1); }
255
+
256
+ .week-item-week {
257
+ font-family: {{monoFamily}};
258
+ font-size: 0.6875rem;
259
+ font-weight: 700;
260
+ color: {{accentColor}};
261
+ letter-spacing: 0.1em;
262
+ }
263
+ .week-item-content {}
264
+ .week-item-title {
265
+ font-size: 1.25rem;
266
+ font-weight: 600;
267
+ letter-spacing: -0.01em;
268
+ margin-bottom: 0.375rem;
269
+ transition: color 0.3s;
270
+ }
271
+ .week-item:hover .week-item-title { color: {{accentColor}}; }
272
+ .week-item-subtitle {
273
+ font-size: 0.875rem;
274
+ color: rgba(255,255,255,0.35);
275
+ line-height: 1.5;
276
+ display: -webkit-box;
277
+ -webkit-line-clamp: 1;
278
+ -webkit-box-orient: vertical;
279
+ overflow: hidden;
280
+ }
281
+ .week-item-date {
282
+ font-family: {{monoFamily}};
283
+ font-size: 0.75rem;
284
+ margin-top: 0.5rem;
285
+ color: rgba(255,255,255,0.2);
286
+ padding-top: 0.25rem;
287
+ }
288
+ .week-item-stat-value { font-weight: 700; }
289
+ .stat-commits .week-item-stat-value { color: #3fb950; }
290
+ .stat-prs .week-item-stat-value { color: #8957e5; }
291
+ .stat-reviews .week-item-stat-value { color: #58a6ff; }
292
+
293
+ /* FOOTER */
294
+ .footer {
295
+ max-width: 960px;
296
+ margin: 0 auto;
297
+ text-align: center;
298
+ padding: 4rem 3rem;
299
+ font-size: 0.8125rem;
300
+ color: rgba(255,255,255,0.3);
301
+ border-top: 1px solid rgba(255,255,255,0.08);
302
+ }
303
+ .footer a { color: rgba(255,255,255,0.5); text-decoration: none; transition: color 0.2s; }
304
+ .footer a:hover { color: rgba(255,255,255,0.6); }
305
+
306
+ @media (max-width: 768px) {
307
+ .hero { padding: 0 1.5rem 4rem; min-height: auto; padding-top: 8rem; }
308
+ .hero-title { font-size: clamp(3rem, 15vw, 5rem); max-width: 100%; }
309
+ .hero-avatar-wrap { position: relative; top: auto; right: auto; margin-bottom: 2rem; }
310
+ .hero-avatar { width: 100px; height: 100px; }
311
+ .hero-profile { flex-direction: column; gap: 2rem; }
312
+ .hero-stats { flex-direction: row; gap: 2rem; }
313
+ .index-nav-inner { padding: 0.75rem 1.5rem; }
314
+ .index-content { padding: 0 1.5rem 4rem; }
315
+ .week-item { grid-template-columns: 1fr; gap: 0.5rem; }
316
+ .week-item::before { left: -1.5rem; }
317
+ .week-item-stats { margin-top: 0.5rem; }
318
+ .year-label { font-size: 3rem; }
319
+ }
320
+ </style>
321
+ </head>
322
+ <body>
323
+
324
+ <nav class="index-nav">
325
+ <div class="index-nav-inner">
326
+ <span class="nav-site-title">{{siteTitleInline}}</span>
327
+ </div>
328
+ </nav>
329
+
330
+ <section class="hero">
331
+ <!-- Geometric decorations -->
332
+ <div class="geo-circle geo-circle-1"></div>
333
+ <div class="geo-circle geo-circle-2"></div>
334
+ <div class="geo-circle geo-circle-3"></div>
335
+ <div class="geo-line geo-line-1"></div>
336
+ <div class="geo-line geo-line-2"></div>
337
+ <div class="geo-dot geo-dot-1"></div>
338
+ <div class="geo-dot geo-dot-2"></div>
339
+ <div class="geo-dot geo-dot-3"></div>
340
+
341
+ {{#if avatarUrl}}
342
+ <a href="https://github.com/{{username}}" class="hero-avatar-wrap" target="_blank" rel="noopener nofollow">
343
+ <img src="{{avatarUrl}}" alt="{{username}}" class="hero-avatar" width="180" height="180" />
344
+ </a>
345
+ {{/if}}
346
+
347
+ <div class="hero-inner">
348
+ <h1 class="hero-title">{{siteTitle}}</h1>
349
+
350
+ {{#if username}}
351
+ <a href="https://github.com/{{username}}" class="hero-profile" target="_blank" rel="noopener nofollow">
352
+ <div class="hero-name-block">
353
+ <div class="hero-display-name">{{displayName}}</div>
354
+ <div class="hero-handle">@{{username}}</div>
355
+ {{#if profile.company}}<div class="hero-bio">{{profile.company}}</div>{{/if}}
356
+ {{#if profile.location}}<div class="hero-bio">{{profile.location}}</div>{{/if}}
357
+ </div>
358
+ {{#if profile}}
359
+ <div class="hero-stats">
360
+ {{#if profile.followers}}<div class="hero-stat"><span class="hero-stat-value">{{profile.followers}}</span>followers</div>{{/if}}
361
+ {{#if profile.publicRepos}}<div class="hero-stat"><span class="hero-stat-value">{{profile.publicRepos}}</span>repos</div>{{/if}}
362
+ </div>
363
+ {{/if}}
364
+ </a>
365
+ {{/if}}
366
+ </div>
367
+ </section>
368
+
369
+ <div class="index-content">
370
+ {{#each yearGroups}}
371
+ <div class="year-group">
372
+ <div class="year-label">{{this.year}}</div>
373
+ <div class="week-list">
374
+ {{#each this.reports}}
375
+ <a href="{{this.path}}/" class="week-item">
376
+ <div class="week-item-week">{{this.week}}</div>
377
+ <div class="week-item-content">
378
+ <div class="week-item-title">{{#if this.title}}{{this.title}}{{else}}Week {{this.week}}{{/if}}</div>
379
+ {{#if this.subtitle}}<div class="week-item-subtitle">{{this.subtitle}}</div>{{/if}}
380
+ <div class="week-item-date">{{this.dateLabel}}</div>
381
+ </div>
382
+ {{#if this.stats}}
383
+ <div class="week-item-stats">
384
+ <span class="week-item-stat stat-commits"><span class="week-item-stat-value">{{this.stats.commits}}</span> commits</span>
385
+ <span class="week-item-stat stat-prs"><span class="week-item-stat-value">{{this.stats.prs}}</span> PRs</span>
386
+ <span class="week-item-stat stat-reviews"><span class="week-item-stat-value">{{this.stats.reviews}}</span> reviews</span>
387
+ </div>
388
+ {{/if}}
389
+ </a>
390
+ {{/each}}
391
+ </div>
392
+ </div>
393
+ {{/each}}
394
+ </div>
395
+
396
+ <footer class="footer">
397
+ {{poweredBy}} <a href="https://deariary.com?utm_source=github-weekly-reporter&utm_medium=footer" target="_blank" rel="noopener">deariary</a>
398
+ &nbsp;&middot;&nbsp;
399
+ {{generatedWith}} <a href="https://github.com/deariary/github-weekly-reporter" target="_blank" rel="noopener">github-weekly-reporter</a>
400
+ </footer>
401
+
402
+ </body>
403
+ </html>