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
@@ -98,17 +98,17 @@
98
98
  {% for p in projects %}
99
99
  <article class="chalk-card fade-in">
100
100
  <h3 class="project-name"><a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a></h3>
101
- {% if p.narrative %}
102
- <p class="project-narrative">{{ p.narrative | truncate: 120 }}</p>
101
+ {% if p.tagline != blank %}
102
+ <p class="project-narrative">{{ p.tagline }}</p>
103
103
  {% endif %}
104
104
  <div class="project-meta" aria-label="Project statistics">
105
105
  <span>{{ p.totalSessions }} sessions</span>
106
106
  <span>{{ p.totalDurationMinutes | formatDuration }}</span>
107
107
  <span>{{ p.totalLoc | formatLoc }} LOC</span>
108
108
  </div>
109
- {% if p.skills.size > 0 %}
109
+ {% if p.profileSkills.size > 0 %}
110
110
  <ul class="skills-list" aria-label="Skills">
111
- {% for skill in p.skills %}
111
+ {% for skill in p.profileSkills %}
112
112
  <li class="skill-chip">{{ skill }}</li>
113
113
  {% endfor %}
114
114
  </ul>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project chalk" data-render-version="2" data-template="chalk"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project chalk" data-render-version="2" data-template="chalk"{% 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 -%} SVG filters {%- endcomment -%}
4
4
  <svg class="svg-filters" aria-hidden="true">
@@ -326,7 +326,7 @@ a:visited { color: inherit; }
326
326
  }
327
327
  .stat-label {
328
328
  font-family: var(--font-mono);
329
- font-size: 11px;
329
+ font-size: 12px;
330
330
  text-transform: uppercase;
331
331
  letter-spacing: 0.06em;
332
332
  color: var(--fg-muted);
@@ -389,7 +389,7 @@ a:visited { color: inherit; }
389
389
  }
390
390
  .stat-item-label {
391
391
  font-family: var(--font-mono);
392
- font-size: 11px;
392
+ font-size: 12px;
393
393
  text-transform: uppercase;
394
394
  letter-spacing: 0.06em;
395
395
  color: var(--fg-muted);
@@ -1156,6 +1156,48 @@ a.project-card:hover, a.session-card:hover {
1156
1156
  }
1157
1157
  }
1158
1158
 
1159
+ @media (max-width: 480px) {
1160
+ .hero {
1161
+ padding: 24px 0 20px;
1162
+ }
1163
+ .hero h1 {
1164
+ font-size: 1.5rem;
1165
+ }
1166
+ .heyiam-project .hero h1,
1167
+ .heyiam-session .hero h1 {
1168
+ font-size: 1.375rem;
1169
+ }
1170
+ .stats-grid {
1171
+ grid-template-columns: 1fr;
1172
+ }
1173
+ .chalk-card {
1174
+ padding: 16px;
1175
+ }
1176
+ .project-name {
1177
+ font-size: 1.125rem;
1178
+ }
1179
+ .sessions-table {
1180
+ font-size: 11px;
1181
+ }
1182
+ .sessions-table thead th,
1183
+ .sessions-table tbody td {
1184
+ padding: 6px 4px;
1185
+ }
1186
+ .agent-row {
1187
+ grid-template-columns: 80px 1fr 48px;
1188
+ gap: 6px;
1189
+ font-size: 12px;
1190
+ }
1191
+ .hero-meta {
1192
+ flex-direction: column;
1193
+ gap: 4px;
1194
+ }
1195
+ .profile-links {
1196
+ flex-direction: column;
1197
+ gap: 4px;
1198
+ }
1199
+ }
1200
+
1159
1201
 
1160
1202
  /* Live-edit empty field hiding */
1161
1203
  [data-portfolio-empty="true"] { display: none; }
@@ -126,17 +126,17 @@
126
126
  <div class="project-card-header">
127
127
  <h3><a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a></h3>
128
128
  </div>
129
- {% if p.narrative %}
130
- <p class="project-card-narrative">{{ p.narrative }}</p>
129
+ {% if p.tagline != blank %}
130
+ <p class="project-card-narrative">{{ p.tagline }}</p>
131
131
  {% endif %}
132
132
  <div class="project-card-stats">
133
133
  <span><span class="val">{{ p.totalSessions }}</span> sessions</span>
134
134
  <span><span class="val">{{ p.totalDurationMinutes | formatDuration }}</span></span>
135
135
  <span><span class="val">{{ p.totalLoc | formatLoc }}</span> LOC</span>
136
136
  </div>
137
- {% if p.skills.size > 0 %}
137
+ {% if p.profileSkills.size > 0 %}
138
138
  <div class="skill-pins">
139
- {% for skill in p.skills %}
139
+ {% for skill in p.profileSkills %}
140
140
  <span class="skill-pin">{{ skill }}</span>
141
141
  {% endfor %}
142
142
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project circuit" data-render-version="2" data-template="circuit"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project circuit" data-render-version="2" data-template="circuit"{% 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 -%} Breadcrumb {%- endcomment -%}
4
4
  <div class="breadcrumb" aria-label="Breadcrumb">
@@ -119,17 +119,17 @@
119
119
  <div class="cos-project-card-header">
120
120
  <h3><a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a></h3>
121
121
  </div>
122
- {% if p.narrative %}
123
- <p class="cos-project-card-narrative">{{ p.narrative }}</p>
122
+ {% if p.tagline != blank %}
123
+ <p class="cos-project-card-narrative">{{ p.tagline }}</p>
124
124
  {% endif %}
125
125
  <div class="cos-project-card-meta">
126
126
  <span><strong>{{ p.totalSessions }}</strong> sessions</span>
127
127
  <span><strong>{{ p.totalDurationMinutes | formatDuration }}</strong></span>
128
128
  <span><strong>{{ p.totalLoc | localeNumber }}</strong> LOC</span>
129
129
  </div>
130
- {% if p.skills.size > 0 %}
130
+ {% if p.profileSkills.size > 0 %}
131
131
  <div class="cos-skill-chips">
132
- {% for skill in p.skills %}
132
+ {% for skill in p.profileSkills %}
133
133
  <span class="cos-skill-chip">{{ skill }}</span>
134
134
  {% endfor %}
135
135
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project cosmos" data-render-version="2" data-template="cosmos"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project cosmos" data-render-version="2" data-template="cosmos"{% 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="starfield" aria-hidden="true"></div>
4
4
 
@@ -246,7 +246,7 @@ body { background: var(--cos-bg); color: var(--cos-text); }
246
246
  }
247
247
  .cosmos .cos-narrative p {
248
248
  color: var(--cos-text-secondary);
249
- font-size: 0.9375rem;
249
+ font-size: 1rem;
250
250
  line-height: 1.75;
251
251
  margin-block-end: 1rem;
252
252
  }
@@ -431,7 +431,7 @@ body { background: var(--cos-bg); color: var(--cos-text); }
431
431
  }
432
432
  .cosmos .cos-project-card-narrative {
433
433
  color: var(--cos-text-secondary);
434
- font-size: 0.9375rem;
434
+ font-size: 1rem;
435
435
  line-height: 1.6;
436
436
  margin-block-end: 1.25rem;
437
437
  }
@@ -710,7 +710,7 @@ body { background: var(--cos-bg); color: var(--cos-text); }
710
710
  }
711
711
  .cosmos .cos-decision p {
712
712
  color: var(--cos-text-secondary);
713
- font-size: 0.9375rem;
713
+ font-size: 1rem;
714
714
  line-height: 1.5;
715
715
  }
716
716
 
@@ -890,7 +890,7 @@ body { background: var(--cos-bg); color: var(--cos-text); }
890
890
  }
891
891
  .cosmos .cos-dev-take blockquote {
892
892
  color: var(--cos-text-secondary);
893
- font-size: 0.9375rem;
893
+ font-size: 1rem;
894
894
  line-height: 1.7;
895
895
  font-style: italic;
896
896
  border: none;
@@ -92,15 +92,15 @@
92
92
  <h3 class="dl-project-title">
93
93
  <a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a>
94
94
  </h3>
95
- {% if p.narrative %}
96
- <p class="dl-project-narrative">{{ p.narrative }}</p>
95
+ {% if p.tagline != blank %}
96
+ <p class="dl-project-narrative">{{ p.tagline }}</p>
97
97
  {% endif %}
98
98
  <p class="dl-project-meta">
99
99
  {{ p.totalSessions }} session{% if p.totalSessions != 1 %}s{% endif %} &middot; {{ p.totalDurationMinutes | formatDuration }} &middot; {{ p.totalLoc | localeNumber }} LOC
100
100
  </p>
101
- {% if p.skills.size > 0 %}
101
+ {% if p.profileSkills.size > 0 %}
102
102
  <div class="dl-project-skills">
103
- {% for skill in p.skills %}
103
+ {% for skill in p.profileSkills %}
104
104
  <span class="dl-skill-chip">{{ skill }}</span>
105
105
  {% endfor %}
106
106
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project daylight" data-render-version="2" data-template="daylight"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project daylight" data-render-version="2" data-template="daylight"{% 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="dl-container">
4
4
 
@@ -86,17 +86,17 @@
86
86
  {% for p in projects %}
87
87
  <a href="/{{ user.username }}/{{ p.slug }}" class="ed-project-card">
88
88
  <h3 class="ed-project-card-title">{{ p.title }}</h3>
89
- {% if p.narrative %}
90
- <p class="ed-project-card-narrative">{{ p.narrative }}</p>
89
+ {% if p.tagline != blank %}
90
+ <p class="ed-project-card-narrative">{{ p.tagline }}</p>
91
91
  {% endif %}
92
92
  <div class="ed-project-card-stats">
93
93
  <span class="ed-project-card-stat"><strong>{{ p.totalSessions }}</strong> sessions</span>
94
94
  <span class="ed-project-card-stat"><strong>{{ p.totalLoc | localeNumber }}</strong> LOC</span>
95
95
  <span class="ed-project-card-stat"><strong>{{ p.totalDurationMinutes | formatDuration }}</strong></span>
96
96
  </div>
97
- {% if p.skills.size > 0 %}
97
+ {% if p.profileSkills.size > 0 %}
98
98
  <div class="ed-chip-list">
99
- {% for skill in p.skills %}
99
+ {% for skill in p.profileSkills %}
100
100
  <span class="chip chip--violet">{{ skill }}</span>
101
101
  {% endfor %}
102
102
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project editorial" data-render-version="2" data-template="editorial"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project editorial" data-render-version="2" data-template="editorial"{% 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 -%} Breadcrumb {%- endcomment -%}
4
4
  <div class="ed-breadcrumb" aria-label="Breadcrumb">
@@ -156,7 +156,7 @@
156
156
  .editorial .ed-stat-label {
157
157
  display: block;
158
158
  font-family: var(--font-mono);
159
- font-size: 0.6875rem;
159
+ font-size: 0.75rem;
160
160
  text-transform: uppercase;
161
161
  letter-spacing: 0.05em;
162
162
  color: var(--on-surface-variant);
@@ -707,6 +707,11 @@
707
707
  border-radius: 3px;
708
708
  transition: width 0.6s ease-out;
709
709
  }
710
+ @media (prefers-reduced-motion: reduce) {
711
+ .editorial .ed-agent-bar-fill {
712
+ transition: none;
713
+ }
714
+ }
710
715
  .editorial .ed-agent-meta {
711
716
  font-family: var(--font-mono);
712
717
  font-size: 0.6875rem;
@@ -88,12 +88,12 @@
88
88
  <h3 class="project-card-title">{{ p.title }}</h3>
89
89
  <span class="project-card-arrow" aria-hidden="true">&rarr;</span>
90
90
  </div>
91
- {% if p.narrative %}
92
- <p class="project-card-narrative">{{ p.narrative }}</p>
91
+ {% if p.tagline != blank %}
92
+ <p class="project-card-narrative">{{ p.tagline }}</p>
93
93
  {% endif %}
94
- {% if p.skills.size > 0 %}
94
+ {% if p.profileSkills.size > 0 %}
95
95
  <div class="project-card-skills">
96
- {% for skill in p.skills %}
96
+ {% for skill in p.profileSkills %}
97
97
  <span class="skill-chip">{{ skill }}</span>
98
98
  {% endfor %}
99
99
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project ember" data-render-version="2" data-template="ember"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project ember" data-render-version="2" data-template="ember"{% 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 -%} Breadcrumb {%- endcomment -%}
4
4
  <div class="breadcrumb ember-section" aria-label="Breadcrumb">
@@ -302,7 +302,7 @@ body { background: var(--bg); color: var(--text); }
302
302
  }
303
303
  .ember .stat-label {
304
304
  font-family: var(--font-mono);
305
- font-size: 11px;
305
+ font-size: 12px;
306
306
  color: var(--text-muted);
307
307
  text-transform: uppercase;
308
308
  letter-spacing: 0.05em;
@@ -319,7 +319,7 @@ body { background: var(--bg); color: var(--text); }
319
319
  white-space: nowrap;
320
320
  }
321
321
  .ember.heyiam-project .stat-label {
322
- font-size: 10px;
322
+ font-size: 12px;
323
323
  margin-top: 2px;
324
324
  }
325
325
 
@@ -91,12 +91,12 @@
91
91
  <div class="project-card-header">
92
92
  <a href="/{{ user.username }}/{{ p.slug }}" class="project-name">{{ p.title }}</a>
93
93
  </div>
94
- {% if p.narrative %}
95
- <p class="project-narrative">{{ p.narrative }}</p>
94
+ {% if p.tagline != blank %}
95
+ <p class="project-narrative">{{ p.tagline }}</p>
96
96
  {% endif %}
97
- {% if p.skills.size > 0 %}
97
+ {% if p.profileSkills.size > 0 %}
98
98
  <div class="project-skills">
99
- {% for skill in p.skills %}
99
+ {% for skill in p.profileSkills %}
100
100
  <span class="skill-chip">{{ skill }}</span>
101
101
  {% endfor %}
102
102
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project glacier" data-render-version="2" data-template="glacier"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project glacier" data-render-version="2" data-template="glacier"{% 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 -%} Breadcrumb {%- endcomment -%}
4
4
  <div class="container">
@@ -164,7 +164,7 @@
164
164
  font-size: 24px;
165
165
  }
166
166
  .glacier.heyiam-project .stat-label {
167
- font-size: 11px;
167
+ font-size: 12px;
168
168
  text-transform: uppercase;
169
169
  letter-spacing: 0.04em;
170
170
  }
@@ -817,7 +817,7 @@ a.session-card:hover, a.featured-card:hover {
817
817
  }
818
818
  .session-stat-label {
819
819
  font-family: var(--font-mono);
820
- font-size: 11px;
820
+ font-size: 12px;
821
821
  color: var(--fg-muted);
822
822
  text-transform: uppercase;
823
823
  letter-spacing: 0.04em;
@@ -151,17 +151,17 @@
151
151
  <h2 class="project-title">{{ p.title }}</h2>
152
152
  <svg class="project-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="7" y1="17" x2="17" y2="7"/><polyline points="7 7 17 7 17 17"/></svg>
153
153
  </div>
154
- {% if p.narrative %}
155
- <p class="project-narrative">{{ p.narrative | truncate: 120 }}</p>
154
+ {% if p.tagline != blank %}
155
+ <p class="project-narrative">{{ p.tagline }}</p>
156
156
  {% endif %}
157
157
  <div class="project-meta">
158
158
  <span class="project-meta-item"><strong>{{ p.totalSessions }}</strong> sessions</span>
159
159
  <span class="project-meta-item"><strong>{{ p.totalDurationMinutes | formatDuration }}</strong></span>
160
160
  <span class="project-meta-item"><strong>{{ p.totalLoc | formatLoc }}</strong> LOC</span>
161
161
  </div>
162
- {% if p.skills.size > 0 %}
162
+ {% if p.profileSkills.size > 0 %}
163
163
  <div class="project-skills">
164
- {% for skill in p.skills %}
164
+ {% for skill in p.profileSkills %}
165
165
  <span class="skill-chip chip">{{ skill }}</span>
166
166
  {% endfor %}
167
167
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project grid" data-render-version="2" data-template="grid"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project grid" data-render-version="2" data-template="grid"{% 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="container">
4
4
  <div class="breadcrumb" aria-label="Breadcrumb">
@@ -333,7 +333,7 @@
333
333
  }
334
334
  .grid .stat-label {
335
335
  font-family: var(--font-mono);
336
- font-size: 11px;
336
+ font-size: 12px;
337
337
  text-transform: uppercase;
338
338
  letter-spacing: 0.06em;
339
339
  color: var(--fg-muted);
@@ -1435,7 +1435,7 @@
1435
1435
  gap: 4px;
1436
1436
  }
1437
1437
  .grid .nav-links a {
1438
- font-size: 13px;
1438
+ font-size: 14px;
1439
1439
  padding: 6px 10px;
1440
1440
  }
1441
1441
  }
@@ -81,7 +81,7 @@
81
81
  {% if projects.size > 0 %}
82
82
  <section class="section" aria-label="Projects">
83
83
  <div class="section-tag">Projects</div>
84
- <h2 class="section-title">{{ projects.size }} project{{ projects.size | minus: 1 | at_least: 1 | times: 0 | plus: projects.size | minus: 1 }}{% if projects.size != 1 %}s{% endif %} built with AI</h2>
84
+ <h2 class="section-title">{{ projects.size }} project{% if projects.size != 1 %}s{% endif %} built with AI</h2>
85
85
  <p class="section-desc">Each project is a case study with real sessions, real decisions, and real stats.</p>
86
86
 
87
87
  <div class="projects-grid">
@@ -107,12 +107,12 @@
107
107
  <span class="project-stat-label">Lines changed</span>
108
108
  </div>
109
109
  </div>
110
- {% if p.narrative %}
111
- <div class="narrative-card">{{ p.narrative }}</div>
110
+ {% if p.tagline != blank %}
111
+ <div class="narrative-card">{{ p.tagline }}</div>
112
112
  {% endif %}
113
- {% if p.skills.size > 0 %}
113
+ {% if p.profileSkills.size > 0 %}
114
114
  <div class="chips">
115
- {% for skill in p.skills %}
115
+ {% for skill in p.profileSkills %}
116
116
  <span>{{ skill }}</span>
117
117
  {% endfor %}
118
118
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project kinetic" data-render-version="2" data-template="kinetic"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project kinetic" data-render-version="2" data-template="kinetic"{% 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 -%} Hero {%- endcomment -%}
4
4
  <section class="hero hero--project" aria-label="Project header">
@@ -18,6 +18,9 @@
18
18
  --font-display: 'Space Grotesk', sans-serif;
19
19
  --font-body: 'Inter', -apple-system, sans-serif;
20
20
  --font-mono: 'IBM Plex Mono', monospace;
21
+ /* Scale up on wide monitors (wall-mounted 2k+) instead of leaving a dead
22
+ band on each side, but keep a ceiling so line length doesn't go wild. */
23
+ --content-max: min(2000px, calc(100vw - 4rem));
21
24
  }
22
25
 
23
26
  body {
@@ -66,6 +69,9 @@ body {
66
69
  .kinetic .hero-content {
67
70
  position: relative;
68
71
  z-index: 1;
72
+ width: 100%;
73
+ max-width: var(--content-max);
74
+ margin: 0 auto;
69
75
  }
70
76
  .kinetic .eyebrow {
71
77
  display: inline-flex; align-items: center; gap: 0.75rem;
@@ -167,11 +173,11 @@ body {
167
173
  .kinetic .stats-row {
168
174
  display: flex;
169
175
  gap: 2.5rem;
170
- padding: 2rem 0;
176
+ padding: 2rem 2.5rem;
171
177
  border-top: 1px solid var(--border);
172
178
  border-bottom: 1px solid var(--border);
173
179
  margin: 0 auto;
174
- max-width: 900px;
180
+ max-width: var(--content-max);
175
181
  }
176
182
  .kinetic .stat-item {
177
183
  display: flex;
@@ -184,7 +190,7 @@ body {
184
190
  }
185
191
  .kinetic .stat-label {
186
192
  font-family: var(--font-mono);
187
- font-size: 0.5rem;
193
+ font-size: 0.75rem;
188
194
  text-transform: uppercase;
189
195
  letter-spacing: 0.08em;
190
196
  color: var(--text-3);
@@ -216,7 +222,7 @@ body {
216
222
  }
217
223
  .kinetic .leverage-row .leverage-sub {
218
224
  font-family: var(--font-mono);
219
- font-size: 0.5rem;
225
+ font-size: 0.75rem;
220
226
  text-transform: uppercase;
221
227
  letter-spacing: 0.08em;
222
228
  color: var(--text-3);
@@ -242,7 +248,7 @@ body {
242
248
  display: flex;
243
249
  justify-content: space-between;
244
250
  font-family: var(--font-mono);
245
- font-size: 0.5rem;
251
+ font-size: 0.75rem;
246
252
  text-transform: uppercase;
247
253
  letter-spacing: 0.08em;
248
254
  color: var(--text-3);
@@ -251,7 +257,7 @@ body {
251
257
  /* ── Sections ── */
252
258
  .kinetic .section {
253
259
  padding: 6rem 2.5rem;
254
- max-width: 1100px;
260
+ max-width: var(--content-max);
255
261
  margin: 0 auto;
256
262
  }
257
263
  .kinetic .section--flush { padding-top: 0; }
@@ -348,7 +354,7 @@ body {
348
354
  }
349
355
  .kinetic .project-stat-label {
350
356
  font-family: var(--font-mono);
351
- font-size: 0.5rem;
357
+ font-size: 0.75rem;
352
358
  text-transform: uppercase;
353
359
  letter-spacing: 0.08em;
354
360
  color: var(--text-3);
@@ -491,7 +497,7 @@ body {
491
497
  }
492
498
  .kinetic .split-stat-label {
493
499
  font-family: var(--font-mono);
494
- font-size: 0.625rem;
500
+ font-size: 0.75rem;
495
501
  color: var(--text-3);
496
502
  text-transform: uppercase;
497
503
  letter-spacing: 0.08em;
@@ -507,7 +513,7 @@ body {
507
513
  /* ── Project hero (project page) ── */
508
514
  .kinetic .hero--project {
509
515
  min-height: 60vh;
510
- max-width: 1100px;
516
+ max-width: var(--content-max);
511
517
  margin: 0 auto;
512
518
  }
513
519
  .kinetic .hero--project h1 {
@@ -527,7 +533,7 @@ body {
527
533
  padding: 2rem 2.5rem;
528
534
  border-top: 1px solid var(--border);
529
535
  border-bottom: 1px solid var(--border);
530
- max-width: 1100px;
536
+ max-width: var(--content-max);
531
537
  margin: 0 auto;
532
538
  }
533
539
 
@@ -674,7 +680,7 @@ body {
674
680
  padding: 8rem 2.5rem 3rem;
675
681
  position: relative;
676
682
  overflow: hidden;
677
- max-width: 1100px;
683
+ max-width: var(--content-max);
678
684
  margin: 0 auto;
679
685
  }
680
686
  .kinetic .hero--session h1 {
@@ -704,7 +710,7 @@ body {
704
710
 
705
711
  /* ── Dev take section ── */
706
712
  .kinetic .dev-take-section {
707
- max-width: 1100px;
713
+ max-width: var(--content-max);
708
714
  margin: 0 auto;
709
715
  padding: 0 2.5rem 3rem;
710
716
  }
@@ -714,7 +720,7 @@ body {
714
720
  display: grid;
715
721
  grid-template-columns: 1fr 320px;
716
722
  gap: 2.5rem;
717
- max-width: 1100px;
723
+ max-width: var(--content-max);
718
724
  margin: 0 auto;
719
725
  padding: 0 2.5rem 6rem;
720
726
  }
@@ -900,7 +906,7 @@ body {
900
906
  border-top: 1px solid var(--border);
901
907
  display: flex; justify-content: space-between;
902
908
  font-size: 0.75rem; color: var(--text-3);
903
- max-width: 1100px; margin: 0 auto;
909
+ max-width: var(--content-max); margin: 0 auto;
904
910
  }
905
911
  .kinetic .footer a { color: var(--text-3); }
906
912
  .kinetic .footer a:hover { color: var(--orange); }
@@ -142,17 +142,17 @@
142
142
  <span class="project-card__source">{{ p.publishedCount }} session{% if p.publishedCount != 1 %}s{% endif %} published</span>
143
143
  {% endif %}
144
144
  </div>
145
- {% if p.narrative != blank %}
146
- <p class="project-card__narrative">{{ p.narrative }}</p>
145
+ {% if p.tagline != blank %}
146
+ <p class="project-card__narrative">{{ p.tagline }}</p>
147
147
  {% endif %}
148
148
  <div class="project-card__stats">
149
149
  <span><strong>{{ p.totalSessions }}</strong> sessions</span>
150
150
  <span><strong>{{ p.totalDurationMinutes | formatDuration }}</strong></span>
151
151
  <span><strong>{{ p.totalLoc | localeNumber }}</strong> LOC</span>
152
152
  </div>
153
- {% if p.skills.size > 0 %}
153
+ {% if p.profileSkills.size > 0 %}
154
154
  <div class="project-card__skills">
155
- {% for skill in p.skills %}
155
+ {% for skill in p.profileSkills %}
156
156
  <span class="skill-chip">{{ skill }}</span>
157
157
  {% endfor %}
158
158
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project meridian" data-render-version="2" data-template="meridian"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project meridian" data-render-version="2" data-template="meridian"{% 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 -%} Topographic contour background {%- endcomment -%}
4
4
  <div class="topo-bg" aria-hidden="true">
@@ -320,7 +320,7 @@ body { background: var(--mer-bg); color: var(--mer-text); }
320
320
  }
321
321
 
322
322
  .meridian .session-stats .stat-cell__label {
323
- font-size: 0.6875rem;
323
+ font-size: 0.75rem;
324
324
  }
325
325
 
326
326
  /* ── Stat Cell (shared) ── */
@@ -52,9 +52,9 @@
52
52
  <li class="mn-project-item">
53
53
  <a href="/{{ user.username }}/{{ p.slug }}" class="mn-project-link">{{ p.title }}</a>
54
54
  <span class="mn-meta">{{ p.totalSessions }} sessions &middot; {{ p.totalDurationMinutes | formatDuration }} &middot; {{ p.totalLoc | formatLoc }} lines</span>
55
- {% if p.narrative != blank %}<span class="mn-meta">{{ p.narrative | truncate: 120 }}</span>{% endif %}
56
- {% if p.skills.size > 0 %}
57
- <span class="mn-meta mn-skill-line">{% for skill in p.skills %}{{ skill }}{% unless forloop.last %}, {% endunless %}{% endfor %}</span>
55
+ {% if p.tagline != blank %}<span class="mn-meta">{{ p.tagline }}</span>{% endif %}
56
+ {% if p.profileSkills.size > 0 %}
57
+ <span class="mn-meta mn-skill-line">{% for skill in p.profileSkills %}{{ skill }}{% unless forloop.last %}, {% endunless %}{% endfor %}</span>
58
58
  {% endif %}
59
59
  </li>
60
60
  {% endfor %}