heyiam 0.3.4 → 0.3.7

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 (107) hide show
  1. package/dist/export.js +19 -5
  2. package/dist/llm/project-enhance.js +11 -5
  3. package/dist/mount.js +9 -7
  4. package/dist/public/assets/{index-Cq04whgG.js → index-BDh4ne9u.js} +3 -3
  5. package/dist/public/assets/index-ByoBtx7P.css +1 -0
  6. package/dist/public/index.html +2 -2
  7. package/dist/render/build-render-data.js +1 -0
  8. package/dist/render/liquid.js +12 -2
  9. package/dist/render/mock-data.js +6 -0
  10. package/dist/render/select-profile-skills.js +54 -0
  11. package/dist/render/templates/aurora/portfolio.liquid +4 -4
  12. package/dist/render/templates/aurora/project.liquid +1 -1
  13. package/dist/render/templates/aurora/styles.css +6 -6
  14. package/dist/render/templates/bauhaus/portfolio.liquid +4 -4
  15. package/dist/render/templates/bauhaus/project.liquid +1 -1
  16. package/dist/render/templates/bauhaus/styles.css +1 -1
  17. package/dist/render/templates/blueprint/portfolio.liquid +4 -4
  18. package/dist/render/templates/blueprint/project.liquid +1 -1
  19. package/dist/render/templates/blueprint/styles.css +1 -1
  20. package/dist/render/templates/canvas/portfolio.liquid +4 -4
  21. package/dist/render/templates/canvas/project.liquid +1 -1
  22. package/dist/render/templates/canvas/styles.css +2 -2
  23. package/dist/render/templates/carbon/portfolio.liquid +4 -4
  24. package/dist/render/templates/carbon/project.liquid +1 -1
  25. package/dist/render/templates/carbon/styles.css +7 -7
  26. package/dist/render/templates/chalk/portfolio.liquid +4 -4
  27. package/dist/render/templates/chalk/project.liquid +1 -1
  28. package/dist/render/templates/chalk/styles.css +44 -2
  29. package/dist/render/templates/circuit/portfolio.liquid +4 -4
  30. package/dist/render/templates/circuit/project.liquid +1 -1
  31. package/dist/render/templates/cosmos/portfolio.liquid +4 -4
  32. package/dist/render/templates/cosmos/project.liquid +1 -1
  33. package/dist/render/templates/cosmos/styles.css +4 -4
  34. package/dist/render/templates/daylight/portfolio.liquid +4 -4
  35. package/dist/render/templates/daylight/project.liquid +1 -1
  36. package/dist/render/templates/editorial/portfolio.liquid +4 -4
  37. package/dist/render/templates/editorial/project.liquid +1 -1
  38. package/dist/render/templates/editorial/styles.css +6 -1
  39. package/dist/render/templates/ember/portfolio.liquid +4 -4
  40. package/dist/render/templates/ember/project.liquid +1 -1
  41. package/dist/render/templates/ember/styles.css +2 -2
  42. package/dist/render/templates/glacier/portfolio.liquid +4 -4
  43. package/dist/render/templates/glacier/project.liquid +1 -1
  44. package/dist/render/templates/glacier/styles.css +2 -2
  45. package/dist/render/templates/grid/portfolio.liquid +4 -4
  46. package/dist/render/templates/grid/project.liquid +1 -1
  47. package/dist/render/templates/grid/styles.css +2 -2
  48. package/dist/render/templates/kinetic/portfolio.liquid +5 -5
  49. package/dist/render/templates/kinetic/project.liquid +1 -1
  50. package/dist/render/templates/kinetic/styles.css +20 -14
  51. package/dist/render/templates/meridian/portfolio.liquid +4 -4
  52. package/dist/render/templates/meridian/project.liquid +1 -1
  53. package/dist/render/templates/meridian/styles.css +1 -1
  54. package/dist/render/templates/minimal/portfolio.liquid +3 -3
  55. package/dist/render/templates/minimal/project.liquid +1 -1
  56. package/dist/render/templates/mono/portfolio.liquid +4 -4
  57. package/dist/render/templates/mono/project.liquid +1 -1
  58. package/dist/render/templates/mono/styles.css +15 -1
  59. package/dist/render/templates/neon/portfolio.liquid +4 -4
  60. package/dist/render/templates/neon/project.liquid +1 -1
  61. package/dist/render/templates/neon/styles.css +11 -20
  62. package/dist/render/templates/noir/portfolio.liquid +4 -4
  63. package/dist/render/templates/noir/project.liquid +1 -1
  64. package/dist/render/templates/noir/styles.css +5 -5
  65. package/dist/render/templates/obsidian/portfolio.liquid +4 -4
  66. package/dist/render/templates/obsidian/project.liquid +1 -1
  67. package/dist/render/templates/obsidian/styles.css +2 -2
  68. package/dist/render/templates/paper/portfolio.liquid +4 -4
  69. package/dist/render/templates/paper/project.liquid +1 -1
  70. package/dist/render/templates/paper/styles.css +60 -1
  71. package/dist/render/templates/parallax/portfolio.liquid +4 -4
  72. package/dist/render/templates/parallax/project.liquid +1 -1
  73. package/dist/render/templates/parallax/styles.css +1 -1
  74. package/dist/render/templates/parchment/portfolio.liquid +4 -4
  75. package/dist/render/templates/parchment/project.liquid +1 -1
  76. package/dist/render/templates/parchment/styles.css +3 -3
  77. package/dist/render/templates/project.liquid +1 -1
  78. package/dist/render/templates/radar/portfolio.liquid +4 -4
  79. package/dist/render/templates/radar/project.liquid +1 -1
  80. package/dist/render/templates/radar/styles.css +4 -4
  81. package/dist/render/templates/showcase/portfolio.liquid +4 -4
  82. package/dist/render/templates/showcase/project.liquid +1 -1
  83. package/dist/render/templates/showcase/styles.css +7 -7
  84. package/dist/render/templates/signal/portfolio.liquid +4 -4
  85. package/dist/render/templates/signal/project.liquid +1 -1
  86. package/dist/render/templates/signal/styles.css +5 -5
  87. package/dist/render/templates/strata/portfolio.liquid +4 -4
  88. package/dist/render/templates/strata/project.liquid +1 -1
  89. package/dist/render/templates/strata/styles.css +3 -3
  90. package/dist/render/templates/styles.css +39 -28
  91. package/dist/render/templates/terminal/portfolio.liquid +2 -2
  92. package/dist/render/templates/terminal/project.liquid +1 -1
  93. package/dist/render/templates/verdant/portfolio.liquid +4 -4
  94. package/dist/render/templates/verdant/project.liquid +1 -1
  95. package/dist/render/templates/verdant/styles.css +17 -2
  96. package/dist/render/templates/zen/portfolio.liquid +4 -4
  97. package/dist/render/templates/zen/project.liquid +1 -1
  98. package/dist/render/templates/zen/styles.css +8 -8
  99. package/dist/routes/export.js +1 -0
  100. package/dist/routes/github.js +1 -1
  101. package/dist/routes/portfolio-render-data.js +17 -3
  102. package/dist/routes/preview.js +33 -3
  103. package/dist/routes/project-session-upload.js +4 -3
  104. package/dist/routes/publish.js +120 -17
  105. package/dist/settings.js +14 -1
  106. package/package.json +1 -1
  107. package/dist/public/assets/index-CMyamplX.css +0 -1
@@ -80,7 +80,7 @@ body { background: var(--bg); color: var(--text); }
80
80
  font-family: var(--font-body);
81
81
  color: var(--text);
82
82
  background: var(--bg);
83
- line-height: 1.5;
83
+ line-height: 1.6;
84
84
  -webkit-font-smoothing: antialiased;
85
85
  -moz-osx-font-smoothing: grayscale;
86
86
  }
@@ -299,7 +299,7 @@ body { background: var(--bg); color: var(--text); }
299
299
  }
300
300
  .sc-hero-stat__label {
301
301
  font-family: var(--font-mono);
302
- font-size: 9px;
302
+ font-size: 12px;
303
303
  font-weight: 400;
304
304
  color: var(--text-3);
305
305
  letter-spacing: 0.08em;
@@ -350,7 +350,7 @@ body { background: var(--bg); color: var(--text); }
350
350
  }
351
351
  .sc-section-label {
352
352
  font-family: var(--font-mono);
353
- font-size: 9px;
353
+ font-size: 12px;
354
354
  font-weight: 400;
355
355
  color: var(--text-3);
356
356
  letter-spacing: 0.08em;
@@ -605,7 +605,7 @@ body { background: var(--bg); color: var(--text); }
605
605
  }
606
606
  .sc-stat-card__label {
607
607
  font-family: var(--font-mono);
608
- font-size: 9px;
608
+ font-size: 12px;
609
609
  font-weight: 400;
610
610
  color: var(--text-3);
611
611
  letter-spacing: 0.08em;
@@ -692,7 +692,7 @@ body { background: var(--bg); color: var(--text); }
692
692
  .sc-decision-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
693
693
  .sc-phase-label {
694
694
  font-family: var(--font-mono);
695
- font-size: 9px;
695
+ font-size: 12px;
696
696
  color: var(--accent);
697
697
  text-transform: uppercase;
698
698
  letter-spacing: 0.08em;
@@ -782,7 +782,7 @@ body { background: var(--bg); color: var(--text); }
782
782
  .sc-phase-item:nth-child(4) .sc-phase-dot { transition-delay: 850ms; }
783
783
  .sc-phase-number {
784
784
  font-family: var(--font-mono);
785
- font-size: 9px;
785
+ font-size: 12px;
786
786
  color: var(--accent);
787
787
  letter-spacing: 0.08em;
788
788
  text-transform: uppercase;
@@ -919,7 +919,7 @@ body { background: var(--bg); color: var(--text); }
919
919
  }
920
920
  .sc-meta-item__label {
921
921
  font-family: var(--font-mono);
922
- font-size: 9px;
922
+ font-size: 12px;
923
923
  color: var(--text-3);
924
924
  text-transform: uppercase;
925
925
  letter-spacing: 0.08em;
@@ -115,8 +115,8 @@
115
115
  <tr>
116
116
  <td>
117
117
  <div class="project-name"><a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a></div>
118
- {% if p.narrative != blank %}
119
- <div class="project-narrative">{{ p.narrative }}</div>
118
+ {% if p.tagline != blank %}
119
+ <div class="project-narrative">{{ p.tagline }}</div>
120
120
  {% endif %}
121
121
  </td>
122
122
  <td class="stat-mono">{{ p.totalSessions }}</td>
@@ -145,9 +145,9 @@
145
145
  {% endif %}
146
146
  </td>
147
147
  <td>
148
- {% if p.skills.size > 0 %}
148
+ {% if p.profileSkills.size > 0 %}
149
149
  <div class="skill-badges">
150
- {% for skill in p.skills %}
150
+ {% for skill in p.profileSkills %}
151
151
  <span class="skill-badge strong">{{ skill }}</span>
152
152
  {% endfor %}
153
153
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project signal" data-render-version="2" data-template="signal"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project signal" data-render-version="2" data-template="signal"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
 
3
3
  <a href="#main" class="skip-link">Skip to content</a>
4
4
 
@@ -35,8 +35,8 @@ body { background: var(--bg); color: var(--fg); }
35
35
  font-family: var(--font-body);
36
36
  color: var(--fg);
37
37
  background: var(--bg);
38
- line-height: 1.5;
39
- font-size: 14px;
38
+ line-height: 1.6;
39
+ font-size: 16px;
40
40
  -webkit-font-smoothing: antialiased;
41
41
  -moz-osx-font-smoothing: grayscale;
42
42
  }
@@ -157,7 +157,7 @@ body { background: var(--bg); color: var(--fg); }
157
157
  }
158
158
  .signal .stat-label {
159
159
  font-family: var(--font-mono);
160
- font-size: 10px;
160
+ font-size: 12px;
161
161
  text-transform: uppercase;
162
162
  letter-spacing: 0.08em;
163
163
  color: var(--fg-dim);
@@ -182,7 +182,7 @@ body { background: var(--bg); color: var(--fg); }
182
182
  margin-bottom: 2px;
183
183
  }
184
184
  .signal.heyiam-session .stat-label {
185
- font-size: 9px;
185
+ font-size: 12px;
186
186
  }
187
187
 
188
188
  .signal .stat-cell--leverage-group {
@@ -392,7 +392,7 @@ body { background: var(--bg); color: var(--fg); }
392
392
  }
393
393
  .signal .nav-links a {
394
394
  font-family: var(--font-mono);
395
- font-size: 12px;
395
+ font-size: 14px;
396
396
  color: var(--fg-muted);
397
397
  text-decoration: none;
398
398
  padding: 4px 10px;
@@ -79,8 +79,8 @@
79
79
  <a class="strata-project-card" href="/{{ user.username }}/{{ p.slug }}" aria-label="{{ p.title }} project">
80
80
  <div class="strata-project-card__accent" style="background: var(--strata-accent);"></div>
81
81
  <div class="strata-project-card__title">{{ p.title }}</div>
82
- {% if p.narrative %}
83
- <div class="strata-project-card__desc">{{ p.narrative }}</div>
82
+ {% if p.tagline != blank %}
83
+ <div class="strata-project-card__desc">{{ p.tagline }}</div>
84
84
  {% endif %}
85
85
  <div class="strata-project-card__meta">{{ p.totalSessions }} sessions &middot; {{ p.totalDurationMinutes | formatDuration }} &middot; {{ p.totalLoc | formatLoc }} LOC</div>
86
86
  {% if p.sourceCounts.size > 0 %}
@@ -92,9 +92,9 @@
92
92
  </div>
93
93
  <div class="strata-project-card__source">{% for sc in p.sourceCounts %}{% assign pct = sc.count | times: 100 | divided_by: p.totalSessions %}{{ sc.tool }} {{ pct }}%{% unless forloop.last %} &middot; {% endunless %}{% endfor %}</div>
94
94
  {% endif %}
95
- {% if p.skills.size > 0 %}
95
+ {% if p.profileSkills.size > 0 %}
96
96
  <div class="strata-project-card__chips">
97
- {% for skill in p.skills %}
97
+ {% for skill in p.profileSkills %}
98
98
  <span class="strata-project-card__chip">{{ skill }}</span>
99
99
  {% endfor %}
100
100
  </div>
@@ -1,4 +1,4 @@
1
- <div class="strata-project" data-render-version="2" data-template="strata"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="strata-project" data-render-version="2" data-template="strata"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
 
3
3
  {%- comment -%} Title {%- endcomment -%}
4
4
  <h1 class="strata-title" data-editable="title">{{ project.title }}</h1>
@@ -63,7 +63,7 @@ body {
63
63
  font-family: var(--strata-font-body);
64
64
  color: var(--strata-text);
65
65
  background: var(--strata-bg);
66
- line-height: 1.5;
66
+ line-height: 1.6;
67
67
  -webkit-font-smoothing: antialiased;
68
68
  -moz-osx-font-smoothing: grayscale;
69
69
  }
@@ -290,7 +290,7 @@ a:focus-visible {
290
290
  }
291
291
  .strata-agg-stat__label {
292
292
  font-family: var(--strata-font-mono);
293
- font-size: 10px;
293
+ font-size: 12px;
294
294
  text-transform: uppercase;
295
295
  letter-spacing: 0.08em;
296
296
  color: var(--strata-text-tertiary);
@@ -444,7 +444,7 @@ a:focus-visible {
444
444
  }
445
445
  .strata-stat__label {
446
446
  font-family: var(--strata-font-mono);
447
- font-size: 10px;
447
+ font-size: 12px;
448
448
  font-weight: 500;
449
449
  text-transform: uppercase;
450
450
  letter-spacing: 0.08em;
@@ -30,6 +30,17 @@
30
30
  --font-body: 'Inter', sans-serif;
31
31
  --font-mono: 'IBM Plex Mono', monospace;
32
32
 
33
+ /* Type scale — xs is the WCAG-driven readable floor for labels/meta.
34
+ Templates may override individual sizes for identity, but should
35
+ reference these tokens before introducing new literals. */
36
+ --font-size-xs: 0.75rem; /* 12px — labels, meta, caption */
37
+ --font-size-sm: 0.875rem; /* 14px — small body, dense rows */
38
+ --font-size-base: 1rem; /* 16px — body */
39
+ --font-size-lg: 1.125rem; /* 18px — subhead */
40
+ --font-size-xl: 1.25rem; /* 20px — heading */
41
+ --font-size-2xl: 1.5rem; /* 24px — section heading */
42
+ --font-size-3xl: 2rem; /* 32px — page title */
43
+
33
44
  --radius-sm: 0.25rem;
34
45
  --radius-md: 0.375rem;
35
46
  }
@@ -107,13 +118,13 @@ a:hover { text-decoration: underline; }
107
118
  }
108
119
  .section-header__title {
109
120
  font-family: var(--font-display);
110
- font-size: 1rem;
121
+ font-size: var(--font-size-base);
111
122
  font-weight: 600;
112
123
  color: var(--on-surface);
113
124
  }
114
125
  .section-header__meta {
115
126
  font-family: var(--font-mono);
116
- font-size: 9px;
127
+ font-size: var(--font-size-xs);
117
128
  text-transform: uppercase;
118
129
  letter-spacing: 0.05em;
119
130
  color: var(--on-surface-variant);
@@ -145,7 +156,7 @@ a:hover { text-decoration: underline; }
145
156
  }
146
157
 
147
158
  .stat-card__value--sm {
148
- font-size: 1.25rem;
159
+ font-size: var(--font-size-xl);
149
160
  }
150
161
 
151
162
  .stat-grid {
@@ -162,7 +173,7 @@ a:hover { text-decoration: underline; }
162
173
  }
163
174
  .stat-card__label {
164
175
  font-family: var(--font-mono);
165
- font-size: 9px;
176
+ font-size: var(--font-size-xs);
166
177
  text-transform: uppercase;
167
178
  letter-spacing: 0.05em;
168
179
  color: var(--on-surface-variant);
@@ -170,7 +181,7 @@ a:hover { text-decoration: underline; }
170
181
  }
171
182
  .stat-card__value {
172
183
  font-family: var(--font-display);
173
- font-size: 1.5rem;
184
+ font-size: var(--font-size-2xl);
174
185
  font-weight: 700;
175
186
  color: var(--on-surface);
176
187
  }
@@ -184,7 +195,7 @@ a:hover { text-decoration: underline; }
184
195
  font-family: var(--font-mono);
185
196
  font-size: 11px;
186
197
  line-height: 1.2;
187
- padding: 0.125rem 0.5rem;
198
+ padding: 0.25rem 0.5rem;
188
199
  border-radius: var(--radius-sm);
189
200
  background: var(--surface-low);
190
201
  color: var(--on-surface-variant);
@@ -210,7 +221,7 @@ a:hover { text-decoration: underline; }
210
221
 
211
222
  .project-title {
212
223
  font-family: var(--font-display);
213
- font-size: 1.25rem;
224
+ font-size: var(--font-size-xl);
214
225
  font-weight: 700;
215
226
  color: var(--on-surface);
216
227
  margin-bottom: 0.25rem;
@@ -224,7 +235,7 @@ a:hover { text-decoration: underline; }
224
235
  }
225
236
  .project-link {
226
237
  font-family: var(--font-mono);
227
- font-size: 0.75rem;
238
+ font-size: var(--font-size-xs);
228
239
  color: var(--primary);
229
240
  display: flex;
230
241
  align-items: center;
@@ -284,7 +295,7 @@ a:hover { text-decoration: underline; }
284
295
  text-align: left;
285
296
  padding: 0.5rem 0;
286
297
  font-family: var(--font-mono);
287
- font-size: 9px;
298
+ font-size: var(--font-size-xs);
288
299
  text-transform: uppercase;
289
300
  letter-spacing: 0.05em;
290
301
  color: var(--outline);
@@ -335,7 +346,7 @@ a:hover { text-decoration: underline; }
335
346
  }
336
347
  .session-card__meta {
337
348
  color: var(--on-surface-variant);
338
- font-size: 0.75rem;
349
+ font-size: var(--font-size-xs);
339
350
  }
340
351
  .session-card__skills { margin-top: 0.5rem; }
341
352
 
@@ -348,13 +359,13 @@ a:hover { text-decoration: underline; }
348
359
  }
349
360
  .note__title {
350
361
  font-family: var(--font-body);
351
- font-size: 0.875rem;
362
+ font-size: var(--font-size-sm);
352
363
  font-weight: 600;
353
364
  color: var(--on-surface);
354
365
  margin-bottom: 0.25rem;
355
366
  }
356
367
  .note__body {
357
- font-size: 0.875rem;
368
+ font-size: var(--font-size-sm);
358
369
  color: var(--on-surface-variant);
359
370
  line-height: 1.5;
360
371
  }
@@ -395,7 +406,7 @@ a:hover { text-decoration: underline; }
395
406
  }
396
407
  .phase-timeline__label {
397
408
  font-family: var(--font-mono);
398
- font-size: 0.6875rem;
409
+ font-size: var(--font-size-xs);
399
410
  text-transform: uppercase;
400
411
  letter-spacing: 0.05em;
401
412
  color: var(--on-surface-variant);
@@ -410,7 +421,7 @@ a:hover { text-decoration: underline; }
410
421
  }
411
422
  .export-footer__text {
412
423
  font-family: var(--font-mono);
413
- font-size: 10px;
424
+ font-size: var(--font-size-xs);
414
425
  color: var(--on-surface-variant);
415
426
  text-transform: uppercase;
416
427
  letter-spacing: 0.05em;
@@ -438,7 +449,7 @@ a:hover { text-decoration: underline; }
438
449
  .sidebar-section { margin-bottom: 1.5rem; }
439
450
  .sidebar-section__heading {
440
451
  font-family: var(--font-mono);
441
- font-size: 9px;
452
+ font-size: var(--font-size-xs);
442
453
  text-transform: uppercase;
443
454
  letter-spacing: 0.05em;
444
455
  color: var(--outline);
@@ -457,7 +468,7 @@ a:hover { text-decoration: underline; }
457
468
  }
458
469
  .tool-list__name, .file-list__path {
459
470
  font-family: var(--font-mono);
460
- font-size: 0.75rem;
471
+ font-size: var(--font-size-xs);
461
472
  color: var(--on-surface);
462
473
  overflow: hidden;
463
474
  text-overflow: ellipsis;
@@ -465,7 +476,7 @@ a:hover { text-decoration: underline; }
465
476
  }
466
477
  .tool-list__count {
467
478
  font-family: var(--font-mono);
468
- font-size: 0.75rem;
479
+ font-size: var(--font-size-xs);
469
480
  color: var(--on-surface-variant);
470
481
  }
471
482
  .file-list__adds { color: var(--green); font-family: var(--font-mono); font-size: 0.6875rem; }
@@ -476,7 +487,7 @@ a:hover { text-decoration: underline; }
476
487
 
477
488
  .breadcrumb {
478
489
  font-family: var(--font-mono);
479
- font-size: 0.75rem;
490
+ font-size: var(--font-size-xs);
480
491
  color: var(--on-surface-variant);
481
492
  margin-bottom: 1rem;
482
493
  }
@@ -486,7 +497,7 @@ a:hover { text-decoration: underline; }
486
497
  .session-header { margin-bottom: 1.5rem; }
487
498
  .session-header__title {
488
499
  font-family: var(--font-display);
489
- font-size: 1.5rem;
500
+ font-size: var(--font-size-2xl);
490
501
  font-weight: 700;
491
502
  color: var(--on-surface);
492
503
  margin-bottom: 0.5rem;
@@ -500,11 +511,11 @@ a:hover { text-decoration: underline; }
500
511
  }
501
512
  .session-header__date {
502
513
  font-family: var(--font-mono);
503
- font-size: 0.75rem;
514
+ font-size: var(--font-size-xs);
504
515
  }
505
516
  .session-header__source {
506
517
  font-family: var(--font-mono);
507
- font-size: 0.75rem;
518
+ font-size: var(--font-size-xs);
508
519
  background: var(--surface-low);
509
520
  padding: 0.125rem 0.5rem;
510
521
  border-radius: var(--radius-sm);
@@ -521,7 +532,7 @@ a:hover { text-decoration: underline; }
521
532
  .session-header__devtake p { margin: 0; }
522
533
  .session-header__context {
523
534
  color: var(--on-surface-variant);
524
- font-size: 0.875rem;
535
+ font-size: var(--font-size-sm);
525
536
  margin: 0.75rem 0;
526
537
  }
527
538
 
@@ -537,13 +548,13 @@ a:hover { text-decoration: underline; }
537
548
  }
538
549
  .stat__value {
539
550
  font-family: var(--font-display);
540
- font-size: 1.125rem;
551
+ font-size: var(--font-size-lg);
541
552
  font-weight: 700;
542
553
  color: var(--on-surface);
543
554
  }
544
555
  .stat__label {
545
556
  font-family: var(--font-mono);
546
- font-size: 9px;
557
+ font-size: var(--font-size-xs);
547
558
  text-transform: uppercase;
548
559
  letter-spacing: 0.05em;
549
560
  color: var(--on-surface-variant);
@@ -560,7 +571,7 @@ a:hover { text-decoration: underline; }
560
571
  }
561
572
  .content-section__heading {
562
573
  font-family: var(--font-display);
563
- font-size: 1rem;
574
+ font-size: var(--font-size-base);
564
575
  font-weight: 600;
565
576
  color: var(--on-surface);
566
577
  margin-bottom: 0.75rem;
@@ -591,7 +602,7 @@ a:hover { text-decoration: underline; }
591
602
  .beat:last-child { border-bottom: none; }
592
603
  .beat__number {
593
604
  font-family: var(--font-mono);
594
- font-size: 0.75rem;
605
+ font-size: var(--font-size-xs);
595
606
  color: var(--primary);
596
607
  font-weight: 600;
597
608
  min-width: 1.5rem;
@@ -601,7 +612,7 @@ a:hover { text-decoration: underline; }
601
612
  .beat__content { flex: 1; min-width: 0; }
602
613
  .beat__title {
603
614
  font-family: var(--font-display);
604
- font-size: 0.875rem;
615
+ font-size: var(--font-size-sm);
605
616
  font-weight: 600;
606
617
  color: var(--on-surface);
607
618
  }
@@ -627,7 +638,7 @@ a:hover { text-decoration: underline; }
627
638
  }
628
639
  .qa-pair__answer {
629
640
  color: var(--on-surface-variant);
630
- font-size: 0.875rem;
641
+ font-size: var(--font-size-sm);
631
642
  line-height: 1.5;
632
643
  }
633
644
 
@@ -82,9 +82,9 @@
82
82
  <span class="term-sep">&middot;</span>
83
83
  <span>{{ project.totalFilesChanged }} files</span>
84
84
  </div>
85
- {% if project.skills.size > 0 %}
85
+ {% if project.profileSkills.size > 0 %}
86
86
  <div class="term-project-entry__skills">
87
- {% for skill in project.skills %}
87
+ {% for skill in project.profileSkills %}
88
88
  <span class="term-skill-tag">{{ skill }}</span>
89
89
  {% endfor %}
90
90
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project terminal" data-render-version="2" data-template="terminal"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project terminal" data-render-version="2" data-template="terminal"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
 
3
3
  {%- comment -%} Prompt-style breadcrumb {%- endcomment -%}
4
4
  <div class="term-prompt">
@@ -142,8 +142,8 @@
142
142
  <h3>{{ p.title }}</h3>
143
143
  <span class="vd-project-card__arrow" aria-hidden="true">&rarr;</span>
144
144
  </div>
145
- {% if p.narrative != blank %}
146
- <p class="vd-project-card__narrative">{{ p.narrative }}</p>
145
+ {% if p.tagline != blank %}
146
+ <p class="vd-project-card__narrative">{{ p.tagline }}</p>
147
147
  {% endif %}
148
148
  <div class="vd-project-card__meta">
149
149
  <span>{{ p.totalSessions }} sessions</span>
@@ -152,9 +152,9 @@
152
152
  <span>&middot;</span>
153
153
  <span>{{ p.totalLoc | formatLoc }} LOC</span>
154
154
  </div>
155
- {% if p.skills.size > 0 %}
155
+ {% if p.profileSkills.size > 0 %}
156
156
  <div class="vd-skills" aria-label="Skills used">
157
- {% for skill in p.skills %}
157
+ {% for skill in p.profileSkills %}
158
158
  <span class="vd-skill-chip">{{ skill }}</span>
159
159
  {% endfor %}
160
160
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project verdant" data-render-version="2" data-template="verdant"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project verdant" data-render-version="2" data-template="verdant"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
 
3
3
  <div class="vd-page">
4
4
 
@@ -294,7 +294,7 @@
294
294
  /* Project page uses smaller stat cards */
295
295
  .verdant.heyiam-project .vd-stat-card { padding: 1rem; }
296
296
  .verdant.heyiam-project .vd-stat-value { font-size: 1.5rem; }
297
- .verdant.heyiam-project .vd-stat-label { font-size: 0.6875rem; }
297
+ .verdant.heyiam-project .vd-stat-label { font-size: 0.75rem; }
298
298
 
299
299
  /* ── Section Headers ── */
300
300
  .verdant .vd-section-header {
@@ -482,7 +482,7 @@
482
482
 
483
483
  /* ── Narrative ── */
484
484
  .verdant .vd-narrative {
485
- font-size: 0.9375rem;
485
+ font-size: 1rem;
486
486
  line-height: 1.8;
487
487
  color: var(--vd-on-surface-2);
488
488
  }
@@ -1256,6 +1256,21 @@
1256
1256
  .verdant .vd-footer { flex-direction: column; gap: 0.5rem; text-align: center; }
1257
1257
  }
1258
1258
 
1259
+ @media (max-width: 480px) {
1260
+ .verdant .vd-page { padding: 1rem 0.75rem 2rem; }
1261
+ .verdant .vd-hero h1 { font-size: 1.375rem; }
1262
+ .verdant .vd-hero__avatar { width: 64px; height: 64px; font-size: 1.375rem; }
1263
+ .verdant .vd-hero__photo { width: 80px; height: 104px; }
1264
+ .verdant .vd-stats,
1265
+ .verdant .vd-stat-grid { grid-template-columns: 1fr; }
1266
+ .verdant .vd-sidebar { grid-template-columns: 1fr; }
1267
+ .verdant .vd-project-header h1 { font-size: 1.375rem; }
1268
+ .verdant .vd-session-header h1 { font-size: 1.25rem; }
1269
+ .verdant .vd-vine-timeline,
1270
+ .verdant .vd-beats { padding-left: 1.25rem; }
1271
+ .verdant .vd-nav__links { flex-wrap: wrap; gap: 0.75rem; }
1272
+ }
1273
+
1259
1274
 
1260
1275
  /* Live-edit empty field hiding */
1261
1276
  [data-portfolio-empty="true"] { display: none; }
@@ -71,15 +71,15 @@
71
71
  <h3 class="zen-project-title">
72
72
  <a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a>
73
73
  </h3>
74
- {% if p.narrative != blank %}
75
- <p class="zen-project-narrative">{{ p.narrative }}</p>
74
+ {% if p.tagline != blank %}
75
+ <p class="zen-project-narrative">{{ p.tagline }}</p>
76
76
  {% endif %}
77
77
  <p class="zen-project-meta">
78
78
  {{ p.totalSessions }} sessions &middot; {{ p.totalDurationMinutes | formatDuration }} &middot; {{ p.totalLoc | localeNumber }} lines changed
79
79
  </p>
80
- {% if p.skills.size > 0 %}
80
+ {% if p.profileSkills.size > 0 %}
81
81
  <p class="zen-project-skills">
82
- {{ p.skills | join: ", " }}
82
+ {{ p.profileSkills | join: ", " }}
83
83
  </p>
84
84
  {% endif %}
85
85
  {% if p.sourceCounts.size > 0 %}
@@ -1,4 +1,4 @@
1
- <div class="zen-project-page" data-render-version="2" data-template="zen"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="zen-project-page" data-render-version="2" data-template="zen"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
 
3
3
  <main class="zen-container">
4
4
 
@@ -276,7 +276,7 @@ a:active {
276
276
 
277
277
  .zen-body {
278
278
  font-family: var(--zen-font-body);
279
- font-size: 0.9375rem;
279
+ font-size: 1rem;
280
280
  line-height: 1.8;
281
281
  color: var(--zen-text-secondary);
282
282
  }
@@ -342,7 +342,7 @@ a:active {
342
342
 
343
343
  .zen-header-bio {
344
344
  font-family: var(--zen-font-body);
345
- font-size: 0.9375rem;
345
+ font-size: 1rem;
346
346
  line-height: 1.8;
347
347
  color: var(--zen-text-secondary);
348
348
  margin-block-end: 1rem;
@@ -500,7 +500,7 @@ a:active {
500
500
 
501
501
  .zen-project-narrative {
502
502
  font-family: var(--zen-font-body);
503
- font-size: 0.9375rem;
503
+ font-size: 1rem;
504
504
  line-height: 1.8;
505
505
  color: var(--zen-text-secondary);
506
506
  margin-block-end: 1.25rem;
@@ -591,7 +591,7 @@ a:active {
591
591
  /* ── Narrative ── */
592
592
  .zen-narrative p {
593
593
  font-family: var(--zen-font-body);
594
- font-size: 0.9375rem;
594
+ font-size: 1rem;
595
595
  line-height: 1.9;
596
596
  color: var(--zen-text-secondary);
597
597
  margin-block-end: 1.5rem;
@@ -703,7 +703,7 @@ a:active {
703
703
 
704
704
  .zen-decision-text {
705
705
  font-family: var(--zen-font-body);
706
- font-size: 0.9375rem;
706
+ font-size: 1rem;
707
707
  line-height: 1.7;
708
708
  color: var(--zen-text-secondary);
709
709
  }
@@ -837,7 +837,7 @@ a:active {
837
837
 
838
838
  .zen-beat-desc {
839
839
  font-family: var(--zen-font-body);
840
- font-size: 0.9375rem;
840
+ font-size: 1rem;
841
841
  line-height: 1.85;
842
842
  color: var(--zen-text-secondary);
843
843
  }
@@ -861,7 +861,7 @@ a:active {
861
861
 
862
862
  .zen-question {
863
863
  font-family: var(--zen-font-body);
864
- font-size: 0.9375rem;
864
+ font-size: 1rem;
865
865
  font-weight: 500;
866
866
  line-height: 1.7;
867
867
  color: var(--zen-text);
@@ -870,7 +870,7 @@ a:active {
870
870
 
871
871
  .zen-answer {
872
872
  font-family: var(--zen-font-body);
873
- font-size: 0.9375rem;
873
+ font-size: 1rem;
874
874
  line-height: 1.85;
875
875
  color: var(--zen-text-secondary);
876
876
  }
@@ -52,6 +52,7 @@ function buildFallbackCache(sessions) {
52
52
  enhancedAt: new Date().toISOString(),
53
53
  selectedSessionIds: allIds,
54
54
  result: {
55
+ tagline: '',
55
56
  narrative: '',
56
57
  arc: [],
57
58
  skills: allSkills,
@@ -188,7 +188,7 @@ export function createGithubRouter(ctx) {
188
188
  fingerprint: 'gh-publish',
189
189
  enhancedAt: new Date().toISOString(),
190
190
  selectedSessionIds: detail.sessions.map((s) => s.id),
191
- result: { narrative: '', arc: [], skills: [], timeline: [], questions: [] },
191
+ result: { tagline: '', narrative: '', arc: [], skills: [], timeline: [], questions: [] },
192
192
  };
193
193
  const proj = detail.project;
194
194
  projectInputs.push({