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
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project minimal" data-render-version="2" data-template="minimal"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project minimal" data-render-version="2" data-template="minimal"{% 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="mn-project">
4
4
 
@@ -119,17 +119,17 @@
119
119
  <h3 class="project-name">{{ p.title }}</h3>
120
120
  </div>
121
121
  <div class="project-card-body">
122
- {% if p.narrative != blank %}
123
- <p class="project-narrative">{{ p.narrative }}</p>
122
+ {% if p.tagline != blank %}
123
+ <p class="project-narrative">{{ p.tagline }}</p>
124
124
  {% endif %}
125
125
  <div class="project-stats-row">
126
126
  <span class="project-stat"><strong>{{ p.totalSessions }}</strong> sessions</span>
127
127
  <span class="project-stat"><strong>{{ p.totalDurationMinutes | formatDuration }}</strong></span>
128
128
  <span class="project-stat"><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="project-tags">
132
- {% for skill in p.skills %}
132
+ {% for skill in p.profileSkills %}
133
133
  <span class="tag">[{{ skill }}]</span>
134
134
  {% endfor %}
135
135
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project mono" data-render-version="2" data-template="mono"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project mono" data-render-version="2" data-template="mono"{% 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="mono-page">
4
4
 
@@ -12,7 +12,7 @@ body { background: var(--mono-bg, #0a0a0a); color: var(--mono-text, #e0e0e0); }
12
12
  background: var(--mono-bg, #0a0a0a);
13
13
  color: var(--mono-text, #e0e0e0);
14
14
  font-family: var(--font, 'JetBrains Mono', monospace);
15
- font-size: 14px;
15
+ font-size: 16px;
16
16
  line-height: 1.6;
17
17
  -webkit-font-smoothing: antialiased;
18
18
  }
@@ -996,6 +996,20 @@ body { background: var(--mono-bg, #0a0a0a); color: var(--mono-text, #e0e0e0); }
996
996
  .mono .git-log-entry { font-size: 0.75rem; }
997
997
  }
998
998
 
999
+ @media (max-width: 480px) {
1000
+ .mono .mono-page { padding: 1rem 0.75rem; }
1001
+ .mono .hero-title { font-size: 1.25rem; }
1002
+ .mono .hero-title--project { font-size: 1.25rem; }
1003
+ .mono .hero-title--session { font-size: 1.0625rem; }
1004
+ .mono .stats-row,
1005
+ .mono .stats-grid { grid-template-columns: 1fr; }
1006
+ .mono .stat-cell { padding: 0.625rem 0.75rem; }
1007
+ .mono .terminal-header { padding: 0.375rem 0.75rem; font-size: 0.6875rem; }
1008
+ .mono .ascii-label { width: 50px; font-size: 0.5625rem; }
1009
+ .mono .hero-meta { flex-direction: column; align-items: flex-start; gap: 0.25rem; }
1010
+ .mono .hero-contact { flex-direction: column; align-items: center; gap: 0.25rem; }
1011
+ }
1012
+
999
1013
  @media (prefers-reduced-motion: reduce) {
1000
1014
  .mono .hero-title,
1001
1015
  .mono .hero-title--project {
@@ -85,12 +85,12 @@
85
85
  {% for p in projects %}
86
86
  <article class="project-card fade-in">
87
87
  <a href="/{{ user.username }}/{{ p.slug }}" class="project-title">{{ p.title }}</a>
88
- {% if p.narrative != blank %}
89
- <p class="project-narrative">{{ p.narrative | truncate: 120 }}</p>
88
+ {% if p.tagline != blank %}
89
+ <p class="project-narrative">{{ p.tagline }}</p>
90
90
  {% endif %}
91
- {% if p.skills.size > 0 %}
91
+ {% if p.profileSkills.size > 0 %}
92
92
  <ul class="skills-list" aria-label="Skills used in {{ p.title }}">
93
- {% for skill in p.skills %}
93
+ {% for skill in p.profileSkills %}
94
94
  <li class="skill-chip">{{ skill }}</li>
95
95
  {% endfor %}
96
96
  </ul>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project neon" data-render-version="2" data-template="neon"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project neon" data-render-version="2" data-template="neon"{% 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="grid-bg" aria-hidden="true"></div>
4
4
 
@@ -17,8 +17,8 @@ body { background: var(--neon-bg); color: var(--neon-text); }
17
17
  --neon-cyan-dim: rgba(34, 211, 238, 0.15);
18
18
  --neon-cyan-glow: rgba(34, 211, 238, 0.3);
19
19
  --neon-text: #f0e6ff;
20
- --neon-text-secondary: #a78bbd;
21
- --neon-text-tertiary: #6b5280;
20
+ --neon-text-secondary: #c4abd9;
21
+ --neon-text-tertiary: #a894c0;
22
22
  --neon-border: rgba(244, 114, 182, 0.2);
23
23
  --neon-border-cyan: rgba(34, 211, 238, 0.2);
24
24
  --neon-font-display: 'Space Grotesk', system-ui, sans-serif;
@@ -165,10 +165,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
165
165
  font-family: var(--neon-font-display);
166
166
  font-size: clamp(2.25rem, 5vw, 3.5rem);
167
167
  font-weight: 700;
168
- background: linear-gradient(135deg, var(--neon-pink), var(--neon-cyan));
169
- -webkit-background-clip: text;
170
- -webkit-text-fill-color: transparent;
171
- background-clip: text;
168
+ color: var(--neon-text);
172
169
  margin-bottom: 1rem;
173
170
  line-height: 1.15;
174
171
  }
@@ -339,7 +336,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
339
336
  .neon .project-narrative {
340
337
  color: var(--neon-text-secondary);
341
338
  margin-top: 0.75rem;
342
- font-size: 0.9375rem;
339
+ font-size: 1rem;
343
340
  line-height: 1.65;
344
341
  }
345
342
 
@@ -577,10 +574,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
577
574
  font-family: var(--neon-font-display);
578
575
  font-size: clamp(2rem, 4.5vw, 3rem);
579
576
  font-weight: 700;
580
- background: linear-gradient(135deg, var(--neon-pink), var(--neon-cyan));
581
- -webkit-background-clip: text;
582
- -webkit-text-fill-color: transparent;
583
- background-clip: text;
577
+ color: var(--neon-text);
584
578
  line-height: 1.15;
585
579
  margin-bottom: 0.75rem;
586
580
  }
@@ -638,7 +632,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
638
632
  .neon .narrative p {
639
633
  color: var(--neon-text-secondary);
640
634
  margin-bottom: 1rem;
641
- font-size: 0.9375rem;
635
+ font-size: 1rem;
642
636
  line-height: 1.7;
643
637
  }
644
638
 
@@ -666,7 +660,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
666
660
  .neon .stat-item:nth-child(odd) .value { color: var(--neon-pink); }
667
661
  .neon .stat-item:nth-child(even) .value { color: var(--neon-cyan); }
668
662
  .neon .stat-item .label {
669
- font-size: 0.6875rem;
663
+ font-size: 0.75rem;
670
664
  color: var(--neon-text-tertiary);
671
665
  margin-top: 0.15rem;
672
666
  text-transform: uppercase;
@@ -789,7 +783,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
789
783
  border: 1px solid var(--neon-border);
790
784
  border-radius: var(--neon-radius-lg);
791
785
  margin-bottom: 0.75rem;
792
- font-size: 0.9375rem;
786
+ font-size: 1rem;
793
787
  color: var(--neon-text-secondary);
794
788
  position: relative;
795
789
  padding-inline-start: 3rem;
@@ -911,10 +905,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
911
905
  font-family: var(--neon-font-display);
912
906
  font-size: clamp(1.5rem, 3.5vw, 2.25rem);
913
907
  font-weight: 700;
914
- background: linear-gradient(135deg, var(--neon-pink), var(--neon-cyan));
915
- -webkit-background-clip: text;
916
- -webkit-text-fill-color: transparent;
917
- background-clip: text;
908
+ color: var(--neon-text);
918
909
  line-height: 1.2;
919
910
  margin-bottom: 1rem;
920
911
  }
@@ -957,7 +948,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
957
948
  .neon .session-stat:nth-child(odd) .value { color: var(--neon-pink); }
958
949
  .neon .session-stat:nth-child(even) .value { color: var(--neon-cyan); }
959
950
  .neon .session-stat .label {
960
- font-size: 0.6875rem;
951
+ font-size: 0.75rem;
961
952
  color: var(--neon-text-tertiary);
962
953
  text-transform: uppercase;
963
954
  letter-spacing: 0.04em;
@@ -995,7 +986,7 @@ body { background: var(--neon-bg); color: var(--neon-text); }
995
986
  }
996
987
  .neon .dev-take p {
997
988
  color: var(--neon-text-secondary);
998
- font-size: 0.9375rem;
989
+ font-size: 1rem;
999
990
  font-style: italic;
1000
991
  line-height: 1.65;
1001
992
  }
@@ -97,12 +97,12 @@
97
97
  <a href="/{{ user.username }}/{{ p.slug }}" class="noir-project" aria-label="{{ p.title }} project">
98
98
  <div>
99
99
  <h3 class="noir-project__title">{{ p.title }}</h3>
100
- {% if p.narrative != blank %}
101
- <p class="noir-project__narrative">{{ p.narrative }}</p>
100
+ {% if p.tagline != blank %}
101
+ <p class="noir-project__narrative">{{ p.tagline }}</p>
102
102
  {% endif %}
103
- {% if p.skills.size > 0 %}
103
+ {% if p.profileSkills.size > 0 %}
104
104
  <div class="noir-project__skills" aria-label="Skills">
105
- {% for skill in p.skills %}
105
+ {% for skill in p.profileSkills %}
106
106
  <span class="noir-chip">{{ skill }}</span>
107
107
  {% endfor %}
108
108
  </div>
@@ -1,4 +1,4 @@
1
- <div class="noir-page" data-render-version="2" data-template="noir"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="noir-page" data-render-version="2" data-template="noir"{% 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
  <!-- Breadcrumb -->
4
4
  <nav class="noir-breadcrumb" aria-label="Breadcrumb">
@@ -10,8 +10,8 @@
10
10
  --noir-border: #2a2a2a;
11
11
  --noir-border-strong: #404040;
12
12
  --noir-text: #e5e5e5;
13
- --noir-text-secondary: #a3a3a3;
14
- --noir-text-muted: #737373;
13
+ --noir-text-secondary: #b8b8b8;
14
+ --noir-text-muted: #9a9a9a;
15
15
  --noir-white: #ffffff;
16
16
  --noir-highlight: #e5e5e5;
17
17
  --noir-rule: #333333;
@@ -194,7 +194,7 @@ body { background: var(--noir-bg); color: var(--noir-text); }
194
194
 
195
195
  .noir-stats-row__label {
196
196
  font-family: var(--font-mono);
197
- font-size: 0.6875rem;
197
+ font-size: 0.75rem;
198
198
  color: var(--noir-text-muted);
199
199
  text-transform: uppercase;
200
200
  letter-spacing: 0.1em;
@@ -345,7 +345,7 @@ body { background: var(--noir-bg); color: var(--noir-text); }
345
345
 
346
346
  .noir-project__stat-label {
347
347
  font-family: var(--font-mono);
348
- font-size: 0.6875rem;
348
+ font-size: 0.75rem;
349
349
  color: var(--noir-text-muted);
350
350
  text-transform: uppercase;
351
351
  letter-spacing: 0.08em;
@@ -507,7 +507,7 @@ body { background: var(--noir-bg); color: var(--noir-text); }
507
507
 
508
508
  .noir-stat-cell__label {
509
509
  font-family: var(--font-mono);
510
- font-size: 0.625rem;
510
+ font-size: 0.75rem;
511
511
  color: var(--noir-text-muted);
512
512
  text-transform: uppercase;
513
513
  letter-spacing: 0.1em;
@@ -96,12 +96,12 @@
96
96
  <span>{{ p.totalLoc | formatLoc }} LOC</span>
97
97
  </div>
98
98
  </div>
99
- {% if p.narrative != blank %}
100
- <p class="project-narrative">{{ p.narrative | truncate: 120 }}</p>
99
+ {% if p.tagline != blank %}
100
+ <p class="project-narrative">{{ p.tagline }}</p>
101
101
  {% endif %}
102
- {% if p.skills.size > 0 %}
102
+ {% if p.profileSkills.size > 0 %}
103
103
  <div class="project-skills">
104
- {% for skill in p.skills %}
104
+ {% for skill in p.profileSkills %}
105
105
  <span class="skill-tag chip">{{ skill }}</span>
106
106
  {% endfor %}
107
107
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project obsidian" data-render-version="2" data-template="obsidian"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project obsidian" data-render-version="2" data-template="obsidian"{% 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
 
@@ -327,7 +327,7 @@ body { background: var(--obs-bg); color: var(--obs-text); }
327
327
  }
328
328
  .obsidian .stat-label {
329
329
  font-family: var(--font-mono);
330
- font-size: 11px;
330
+ font-size: 12px;
331
331
  text-transform: uppercase;
332
332
  letter-spacing: 0.08em;
333
333
  color: var(--fg-dim);
@@ -340,7 +340,7 @@ body { background: var(--obs-bg); color: var(--obs-text); }
340
340
  font-size: clamp(20px, 3vw, 28px);
341
341
  }
342
342
  .obsidian.heyiam-project .stat-label {
343
- font-size: 10px;
343
+ font-size: 12px;
344
344
  }
345
345
  .obsidian .stat-card--leverage {
346
346
  grid-column: span 2;
@@ -116,8 +116,8 @@
116
116
  <h3 class="project-card__headline">
117
117
  <a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a>
118
118
  </h3>
119
- {% if p.narrative %}
120
- <p class="project-card__narrative">{{ p.narrative | truncate: 120 }}</p>
119
+ {% if p.tagline != blank %}
120
+ <p class="project-card__narrative">{{ p.tagline }}</p>
121
121
  {% endif %}
122
122
  <p class="project-card__meta">
123
123
  <span>{{ p.totalSessions }} sessions</span>
@@ -144,9 +144,9 @@
144
144
  </p>
145
145
  {% endif %}
146
146
  {% endif %}
147
- {% if p.skills.size > 0 %}
147
+ {% if p.profileSkills.size > 0 %}
148
148
  <div class="project-card__skills" aria-label="Skills used in {{ p.title }}">
149
- {% for skill in p.skills %}
149
+ {% for skill in p.profileSkills %}
150
150
  <span class="skill-tag chip">{{ skill }}</span>
151
151
  {% endfor %}
152
152
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project paper" data-render-version="2" data-template="paper"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project paper" data-render-version="2" data-template="paper"{% 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 -%} Masthead {%- endcomment -%}
4
4
  <header class="masthead fade-in fade-in-d1" role="banner">
@@ -163,7 +163,7 @@ a:focus-visible {
163
163
  padding: 0.75rem 0;
164
164
  border-bottom: 1px solid var(--paper-border);
165
165
  font-family: var(--paper-font-mono);
166
- font-size: 0.8125rem;
166
+ font-size: 0.875rem;
167
167
  text-transform: uppercase;
168
168
  letter-spacing: 0.06em;
169
169
  }
@@ -1480,6 +1480,65 @@ a.session-card:hover {
1480
1480
  }
1481
1481
  }
1482
1482
 
1483
+ @media (max-width: 480px) {
1484
+ .page-wrapper {
1485
+ padding: 0 0.75rem;
1486
+ }
1487
+ .masthead {
1488
+ padding: 1.5rem 0 1rem;
1489
+ }
1490
+ .masthead__title {
1491
+ font-size: 1.5rem;
1492
+ }
1493
+ .masthead__edition {
1494
+ font-size: 0.75rem;
1495
+ flex-direction: column;
1496
+ gap: 0.25rem;
1497
+ }
1498
+ .byline {
1499
+ padding: 1rem 0;
1500
+ }
1501
+ .article-header__headline,
1502
+ .projects-section__heading {
1503
+ font-size: 1.25rem;
1504
+ }
1505
+ .project-card__headline {
1506
+ font-size: 1.125rem;
1507
+ }
1508
+ .session-meta {
1509
+ grid-template-columns: 1fr 1fr;
1510
+ gap: 0.5rem;
1511
+ }
1512
+ .stats-table th,
1513
+ .stats-table td {
1514
+ padding: 0.3rem 0.375rem;
1515
+ font-size: 0.75rem;
1516
+ }
1517
+ .stats-table td:last-child {
1518
+ font-size: 0.8125rem;
1519
+ }
1520
+ .timeline-table,
1521
+ .activity-table,
1522
+ .agents-table {
1523
+ font-size: 0.75rem;
1524
+ }
1525
+ .timeline-table th,
1526
+ .timeline-table td,
1527
+ .activity-table th,
1528
+ .activity-table td,
1529
+ .agents-table th,
1530
+ .agents-table td {
1531
+ padding: 0.3rem 0.375rem;
1532
+ }
1533
+ .nav-bar {
1534
+ flex-wrap: wrap;
1535
+ gap: 0.75rem;
1536
+ }
1537
+ .dev-take__text {
1538
+ font-size: 1rem;
1539
+ }
1540
+ }
1541
+
1483
1542
  /* ── Medium breakpoint ── */
1484
1543
  @media (min-width: 768px) and (max-width: 1023px) {
1485
1544
  .projects-columns {
@@ -137,12 +137,12 @@
137
137
  {% for p in projects %}
138
138
  <a href="/{{ user.username }}/{{ p.slug }}" class="project-card reveal" data-float="0.08">
139
139
  <h3 class="project-card__name">{{ p.title }}</h3>
140
- {% if p.narrative != blank %}
141
- <p class="project-card__narrative">{{ p.narrative }}</p>
140
+ {% if p.tagline != blank %}
141
+ <p class="project-card__narrative">{{ p.tagline }}</p>
142
142
  {% endif %}
143
- {% if p.skills.size > 0 %}
143
+ {% if p.profileSkills.size > 0 %}
144
144
  <div class="project-card__skills">
145
- {% for skill in p.skills %}
145
+ {% for skill in p.profileSkills %}
146
146
  <span class="skill-chip">{{ skill }}</span>
147
147
  {% endfor %}
148
148
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project parallax" data-render-version="2" data-template="parallax"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project parallax" data-render-version="2" data-template="parallax"{% 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-content" class="skip-link">Skip to content</a>
4
4
 
@@ -755,7 +755,7 @@ body { background: var(--px-bg); color: var(--px-text); }
755
755
  color: var(--px-accent);
756
756
  }
757
757
  .stats-bar__label {
758
- font-size: 0.6875rem;
758
+ font-size: 0.75rem;
759
759
  color: var(--px-text-tertiary);
760
760
  text-transform: uppercase;
761
761
  letter-spacing: 0.08em;
@@ -106,12 +106,12 @@
106
106
  <h3 class="project-card__title">
107
107
  <a href="/{{ user.username }}/{{ p.slug }}">{{ p.title }}</a>
108
108
  </h3>
109
- {% if p.narrative %}
110
- <p class="project-card__narrative">{{ p.narrative }}</p>
109
+ {% if p.tagline != blank %}
110
+ <p class="project-card__narrative">{{ p.tagline }}</p>
111
111
  {% endif %}
112
- {% if p.skills.size > 0 %}
112
+ {% if p.profileSkills.size > 0 %}
113
113
  <div class="project-card__skills">
114
- {% for skill in p.skills %}
114
+ {% for skill in p.profileSkills %}
115
115
  <span class="skill-tag">{{ skill }}</span>
116
116
  {% endfor %}
117
117
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project parchment" data-render-version="2" data-template="parchment"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project parchment" data-render-version="2" data-template="parchment"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-session-suffix="{{ sessionSuffix }}" data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
2
2
  <a href="#main-content" class="skip-link">Skip to content</a>
3
3
 
4
4
  <div class="page-wrapper">
@@ -367,7 +367,7 @@
367
367
  }
368
368
  .parchment .margin-stat__label {
369
369
  font-family: var(--parch-font-mono);
370
- font-size: 0.6875rem;
370
+ font-size: 0.75rem;
371
371
  color: var(--parch-text-tertiary);
372
372
  text-transform: uppercase;
373
373
  letter-spacing: 0.1em;
@@ -397,7 +397,7 @@
397
397
  }
398
398
  .parchment .project-stat__label {
399
399
  font-family: var(--parch-font-mono);
400
- font-size: 0.625rem;
400
+ font-size: 0.75rem;
401
401
  color: var(--parch-text-tertiary);
402
402
  text-transform: uppercase;
403
403
  letter-spacing: 0.1em;
@@ -427,7 +427,7 @@
427
427
  }
428
428
  .parchment .session-stats-row__label {
429
429
  font-family: var(--parch-font-mono);
430
- font-size: 0.5625rem;
430
+ font-size: 0.75rem;
431
431
  color: var(--parch-text-tertiary);
432
432
  text-transform: uppercase;
433
433
  letter-spacing: 0.1em;
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project" data-render-version="2"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project" data-render-version="2"{% 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="project-title" data-editable="title">{{ project.title }}</h1>
@@ -82,13 +82,13 @@
82
82
  <a class="portfolio-card" href="/{{ user.username }}/{{ p.slug }}">
83
83
  <div class="portfolio-card__bar portfolio-card__bar--cyan"></div>
84
84
  <div class="portfolio-card__title">{{ p.title }}</div>
85
- {% if p.narrative != blank %}
86
- <div class="portfolio-card__desc">{{ p.narrative }}</div>
85
+ {% if p.tagline != blank %}
86
+ <div class="portfolio-card__desc">{{ p.tagline }}</div>
87
87
  {% endif %}
88
88
  <div class="portfolio-card__meta">{{ p.totalSessions }} sessions &middot; {{ p.totalDurationMinutes | formatDuration }} &middot; {{ p.totalLoc | formatLoc }} LOC</div>
89
- {% if p.skills.size > 0 %}
89
+ {% if p.profileSkills.size > 0 %}
90
90
  <div class="portfolio-card__skills">
91
- {% for skill in p.skills %}
91
+ {% for skill in p.profileSkills %}
92
92
  <span class="chip">{{ skill }}</span>
93
93
  {% endfor %}
94
94
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project radar" data-render-version="2" data-template="radar"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project radar" data-render-version="2" data-template="radar"{% 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
  <nav class="radar-breadcrumb" aria-label="Breadcrumb">
@@ -249,7 +249,7 @@ body { background: var(--surface); color: var(--on-surface); }
249
249
 
250
250
  .radar .portfolio-stat__label {
251
251
  font-family: var(--font-mono);
252
- font-size: 9px;
252
+ font-size: 12px;
253
253
  text-transform: uppercase;
254
254
  letter-spacing: 0.05em;
255
255
  color: var(--on-surface-variant);
@@ -334,7 +334,7 @@ body { background: var(--surface); color: var(--on-surface); }
334
334
  font-family: var(--font-mono);
335
335
  font-size: 11px;
336
336
  line-height: 1.2;
337
- padding: 0.125rem 0.5rem;
337
+ padding: 0.25rem 0.5rem;
338
338
  border-radius: var(--radius-sm);
339
339
  background: var(--accent-faint);
340
340
  color: var(--accent);
@@ -436,7 +436,7 @@ body { background: var(--surface); color: var(--on-surface); }
436
436
  }
437
437
  .radar .stat-card__label {
438
438
  font-family: var(--font-mono);
439
- font-size: 9px;
439
+ font-size: 12px;
440
440
  text-transform: uppercase;
441
441
  letter-spacing: 0.05em;
442
442
  color: var(--on-surface-variant);
@@ -730,7 +730,7 @@ body { background: var(--surface); color: var(--on-surface); }
730
730
  }
731
731
  .radar .stat-card-sm__label {
732
732
  font-family: var(--font-mono);
733
- font-size: 9px;
733
+ font-size: 12px;
734
734
  text-transform: uppercase;
735
735
  letter-spacing: 0.05em;
736
736
  color: var(--on-surface-variant);
@@ -96,17 +96,17 @@
96
96
  <a href="/{{ user.username }}/{{ p.slug }}" class="sc-project-card sc-stagger" style="display: block; margin-bottom: 0.75rem;">
97
97
  <div class="sc-project-card__accent-bar" style="background: var(--accent);"></div>
98
98
  <div class="sc-project-card__title">{{ p.title }}</div>
99
- {% if p.narrative != blank %}
100
- <p class="sc-project-card__narrative">{{ p.narrative }}</p>
99
+ {% if p.tagline != blank %}
100
+ <p class="sc-project-card__narrative">{{ p.tagline }}</p>
101
101
  {% endif %}
102
102
  <div class="sc-project-card__meta">
103
103
  <span>{{ p.totalSessions }} sessions</span>
104
104
  <span>{{ p.totalDurationMinutes | formatDuration }}</span>
105
105
  <span>{{ p.totalLoc | localeNumber }} LOC</span>
106
106
  </div>
107
- {% if p.skills.size > 0 %}
107
+ {% if p.profileSkills.size > 0 %}
108
108
  <div class="sc-project-card__skills">
109
- {% for skill in p.skills limit: 6 %}
109
+ {% for skill in p.profileSkills %}
110
110
  <span class="sc-skill-chip">{{ skill }}</span>
111
111
  {% endfor %}
112
112
  </div>
@@ -1,4 +1,4 @@
1
- <div class="heyiam-project showcase" data-render-version="2" data-template="showcase"{% if sessionBaseUrl %} data-session-base-url="{{ sessionBaseUrl }}"{% endif %} data-username="{{ user.username }}" data-project-slug="{{ project.slug }}">
1
+ <div class="heyiam-project showcase" data-render-version="2" data-template="showcase"{% 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="sc-page">
4
4
  <main id="main-content">