heyiam 0.2.29 → 0.3.0

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 (177) hide show
  1. package/README.md +45 -0
  2. package/dist/config.js +10 -1
  3. package/dist/db.js +1 -2
  4. package/dist/export.js +40 -25
  5. package/dist/format-utils.js +5 -0
  6. package/dist/index.js +168 -0
  7. package/dist/mount.js +300 -102
  8. package/dist/parsers/claude.js +2 -28
  9. package/dist/parsers/codex.js +2 -26
  10. package/dist/parsers/cursor.js +2 -26
  11. package/dist/parsers/duration.js +35 -0
  12. package/dist/parsers/gemini.js +2 -20
  13. package/dist/parsers/types.js +0 -1
  14. package/dist/public/assets/index-BZ65TU_Y.js +40 -0
  15. package/dist/public/assets/index-CqCaW2cb.css +1 -0
  16. package/dist/public/index.html +2 -2
  17. package/dist/redact.js +4 -104
  18. package/dist/render/build-render-data.js +9 -2
  19. package/dist/render/index.js +32 -5
  20. package/dist/render/liquid.js +147 -7
  21. package/dist/render/mock-data.js +303 -0
  22. package/dist/render/templates/aurora/portfolio.liquid +204 -0
  23. package/dist/render/templates/aurora/project.liquid +260 -0
  24. package/dist/render/templates/aurora/session.liquid +223 -0
  25. package/dist/render/templates/aurora/styles.css +1178 -0
  26. package/dist/render/templates/bauhaus/portfolio.liquid +179 -0
  27. package/dist/render/templates/bauhaus/project.liquid +300 -0
  28. package/dist/render/templates/bauhaus/session.liquid +333 -0
  29. package/dist/render/templates/bauhaus/styles.css +1641 -0
  30. package/dist/render/templates/blueprint/portfolio.liquid +167 -0
  31. package/dist/render/templates/blueprint/project.liquid +286 -0
  32. package/dist/render/templates/blueprint/session.liquid +248 -0
  33. package/dist/render/templates/blueprint/styles.css +1285 -0
  34. package/dist/render/templates/canvas/portfolio.liquid +215 -0
  35. package/dist/render/templates/canvas/project.liquid +235 -0
  36. package/dist/render/templates/canvas/session.liquid +223 -0
  37. package/dist/render/templates/canvas/styles.css +1436 -0
  38. package/dist/render/templates/carbon/portfolio.liquid +170 -0
  39. package/dist/render/templates/carbon/project.liquid +249 -0
  40. package/dist/render/templates/carbon/session.liquid +190 -0
  41. package/dist/render/templates/carbon/styles.css +1091 -0
  42. package/dist/render/templates/chalk/portfolio.liquid +199 -0
  43. package/dist/render/templates/chalk/project.liquid +245 -0
  44. package/dist/render/templates/chalk/session.liquid +215 -0
  45. package/dist/render/templates/chalk/styles.css +1157 -0
  46. package/dist/render/templates/circuit/portfolio.liquid +162 -0
  47. package/dist/render/templates/circuit/project.liquid +247 -0
  48. package/dist/render/templates/circuit/session.liquid +205 -0
  49. package/dist/render/templates/circuit/styles.css +1403 -0
  50. package/dist/render/templates/cosmos/portfolio.liquid +232 -0
  51. package/dist/render/templates/cosmos/project.liquid +327 -0
  52. package/dist/render/templates/cosmos/session.liquid +239 -0
  53. package/dist/render/templates/cosmos/styles.css +1151 -0
  54. package/dist/render/templates/daylight/portfolio.liquid +217 -0
  55. package/dist/render/templates/daylight/project.liquid +229 -0
  56. package/dist/render/templates/daylight/session.liquid +219 -0
  57. package/dist/render/templates/daylight/styles.css +1311 -0
  58. package/dist/render/templates/editorial/portfolio.liquid +126 -0
  59. package/dist/render/templates/editorial/project.liquid +202 -0
  60. package/dist/render/templates/editorial/session.liquid +171 -0
  61. package/dist/render/templates/editorial/styles.css +822 -0
  62. package/dist/render/templates/ember/portfolio.liquid +318 -0
  63. package/dist/render/templates/ember/project.liquid +232 -0
  64. package/dist/render/templates/ember/session.liquid +202 -0
  65. package/dist/render/templates/ember/styles.css +1283 -0
  66. package/dist/render/templates/glacier/portfolio.liquid +271 -0
  67. package/dist/render/templates/glacier/project.liquid +288 -0
  68. package/dist/render/templates/glacier/session.liquid +217 -0
  69. package/dist/render/templates/glacier/styles.css +1200 -0
  70. package/dist/render/templates/grid/portfolio.liquid +265 -0
  71. package/dist/render/templates/grid/project.liquid +306 -0
  72. package/dist/render/templates/grid/session.liquid +260 -0
  73. package/dist/render/templates/grid/styles.css +1441 -0
  74. package/dist/render/templates/kinetic/portfolio.liquid +170 -0
  75. package/dist/render/templates/kinetic/project.liquid +242 -0
  76. package/dist/render/templates/kinetic/session.liquid +228 -0
  77. package/dist/render/templates/kinetic/styles.css +944 -0
  78. package/dist/render/templates/meridian/portfolio.liquid +255 -0
  79. package/dist/render/templates/meridian/project.liquid +376 -0
  80. package/dist/render/templates/meridian/session.liquid +298 -0
  81. package/dist/render/templates/meridian/styles.css +1369 -0
  82. package/dist/render/templates/minimal/portfolio.liquid +71 -0
  83. package/dist/render/templates/minimal/project.liquid +154 -0
  84. package/dist/render/templates/minimal/session.liquid +140 -0
  85. package/dist/render/templates/minimal/styles.css +525 -0
  86. package/dist/render/templates/mono/portfolio.liquid +291 -0
  87. package/dist/render/templates/mono/project.liquid +275 -0
  88. package/dist/render/templates/mono/session.liquid +276 -0
  89. package/dist/render/templates/mono/styles.css +1016 -0
  90. package/dist/render/templates/neon/portfolio.liquid +217 -0
  91. package/dist/render/templates/neon/project.liquid +225 -0
  92. package/dist/render/templates/neon/session.liquid +195 -0
  93. package/dist/render/templates/neon/styles.css +1265 -0
  94. package/dist/render/templates/noir/portfolio.liquid +137 -0
  95. package/dist/render/templates/noir/project.liquid +220 -0
  96. package/dist/render/templates/noir/session.liquid +241 -0
  97. package/dist/render/templates/noir/styles.css +1223 -0
  98. package/dist/render/templates/obsidian/portfolio.liquid +257 -0
  99. package/dist/render/templates/obsidian/project.liquid +280 -0
  100. package/dist/render/templates/obsidian/session.liquid +241 -0
  101. package/dist/render/templates/obsidian/styles.css +1401 -0
  102. package/dist/render/templates/paper/portfolio.liquid +267 -0
  103. package/dist/render/templates/paper/project.liquid +235 -0
  104. package/dist/render/templates/paper/session.liquid +271 -0
  105. package/dist/render/templates/paper/styles.css +1509 -0
  106. package/dist/render/templates/parallax/portfolio.liquid +305 -0
  107. package/dist/render/templates/parallax/project.liquid +275 -0
  108. package/dist/render/templates/parallax/session.liquid +295 -0
  109. package/dist/render/templates/parallax/styles.css +1874 -0
  110. package/dist/render/templates/parchment/portfolio.liquid +290 -0
  111. package/dist/render/templates/parchment/project.liquid +289 -0
  112. package/dist/render/templates/parchment/session.liquid +346 -0
  113. package/dist/render/templates/parchment/styles.css +1397 -0
  114. package/dist/render/templates/partials/_beats.liquid +16 -0
  115. package/dist/render/templates/partials/_breadcrumb.liquid +9 -0
  116. package/dist/render/templates/partials/_footer.liquid +7 -0
  117. package/dist/render/templates/partials/_growth-chart.liquid +7 -0
  118. package/dist/render/templates/partials/_key-decisions.liquid +20 -0
  119. package/dist/render/templates/partials/_links.liquid +16 -0
  120. package/dist/render/templates/partials/_narrative.liquid +8 -0
  121. package/dist/render/templates/partials/_phases.liquid +20 -0
  122. package/dist/render/templates/partials/_portfolio-header.liquid +20 -0
  123. package/dist/render/templates/partials/_portfolio-projects.liquid +16 -0
  124. package/dist/render/templates/partials/_portfolio-stats.liquid +19 -0
  125. package/dist/render/templates/partials/_qa.liquid +13 -0
  126. package/dist/render/templates/partials/_screenshot.liquid +15 -0
  127. package/dist/render/templates/partials/_session-cards.liquid +30 -0
  128. package/dist/render/templates/partials/_session-header.liquid +39 -0
  129. package/dist/render/templates/partials/_session-sidebar.liquid +30 -0
  130. package/dist/render/templates/partials/_skills.liquid +12 -0
  131. package/dist/render/templates/partials/_source-breakdown.liquid +22 -0
  132. package/dist/render/templates/partials/_stats.liquid +38 -0
  133. package/dist/render/templates/partials/_work-timeline.liquid +7 -0
  134. package/dist/render/templates/project.liquid +7 -4
  135. package/dist/render/templates/radar/portfolio.liquid +233 -0
  136. package/dist/render/templates/radar/project.liquid +278 -0
  137. package/dist/render/templates/radar/session.liquid +300 -0
  138. package/dist/render/templates/radar/styles.css +1049 -0
  139. package/dist/render/templates/showcase/portfolio.liquid +231 -0
  140. package/dist/render/templates/showcase/project.liquid +237 -0
  141. package/dist/render/templates/showcase/session.liquid +210 -0
  142. package/dist/render/templates/showcase/styles.css +1279 -0
  143. package/dist/render/templates/signal/portfolio.liquid +227 -0
  144. package/dist/render/templates/signal/project.liquid +278 -0
  145. package/dist/render/templates/signal/session.liquid +282 -0
  146. package/dist/render/templates/signal/styles.css +1395 -0
  147. package/dist/render/templates/strata/portfolio.liquid +192 -0
  148. package/dist/render/templates/strata/project.liquid +282 -0
  149. package/dist/render/templates/strata/session.liquid +261 -0
  150. package/dist/render/templates/strata/styles.css +1350 -0
  151. package/dist/render/templates/styles.css +1190 -0
  152. package/dist/render/templates/terminal/portfolio.liquid +118 -0
  153. package/dist/render/templates/terminal/project.liquid +161 -0
  154. package/dist/render/templates/terminal/session.liquid +145 -0
  155. package/dist/render/templates/terminal/styles.css +492 -0
  156. package/dist/render/templates/verdant/portfolio.liquid +333 -0
  157. package/dist/render/templates/verdant/project.liquid +309 -0
  158. package/dist/render/templates/verdant/session.liquid +237 -0
  159. package/dist/render/templates/verdant/styles.css +1257 -0
  160. package/dist/render/templates/zen/portfolio.liquid +136 -0
  161. package/dist/render/templates/zen/project.liquid +187 -0
  162. package/dist/render/templates/zen/session.liquid +203 -0
  163. package/dist/render/templates/zen/styles.css +1207 -0
  164. package/dist/render/templates.js +90 -0
  165. package/dist/routes/context.js +15 -10
  166. package/dist/routes/enhance.js +17 -40
  167. package/dist/routes/export.js +14 -4
  168. package/dist/routes/preview.js +480 -108
  169. package/dist/routes/projects.js +11 -19
  170. package/dist/routes/publish.js +15 -17
  171. package/dist/routes/settings.js +94 -1
  172. package/dist/routes/sse.js +9 -0
  173. package/dist/server.js +8 -2
  174. package/dist/settings.js +17 -9
  175. package/package.json +2 -4
  176. package/dist/public/assets/index-CC9G8EF1.js +0 -21
  177. package/dist/public/assets/index-Dalqz2mC.css +0 -1
@@ -0,0 +1,333 @@
1
+ <div class="heyiam-session bauhaus" data-render-version="2" data-template="bauhaus">
2
+
3
+ {%- comment -%} Breadcrumb {%- endcomment -%}
4
+ <nav class="breadcrumb" aria-label="Breadcrumb">
5
+ <a href="/{{ user.username }}">{{ user.username }}</a>
6
+ <span aria-hidden="true">/</span>
7
+ {% if projectSlug %}
8
+ <a href="/{{ user.username }}/{{ projectSlug }}">{{ projectSlug }}</a>
9
+ <span aria-hidden="true">/</span>
10
+ {% endif %}
11
+ <strong>{{ session.title }}</strong>
12
+ </nav>
13
+
14
+ <div class="page-layout">
15
+ {%- comment -%} Main content column {%- endcomment -%}
16
+ <main class="content-col">
17
+
18
+ {%- comment -%} Session hero {%- endcomment -%}
19
+ <header class="session-hero anim-slide-left">
20
+ <h1>{{ session.title }}</h1>
21
+ <div class="session-meta">
22
+ {% if session.sourceTool %}
23
+ <span class="meta-badge meta-badge-source">{{ session.sourceTool }}</span>
24
+ {% endif %}
25
+ {% if session.recordedAt %}
26
+ <span class="meta-date">{{ session.recordedAt | formatDate }}</span>
27
+ {% endif %}
28
+ </div>
29
+ <div class="session-hero-shapes anim-scale-in anim-delay-2" aria-hidden="true">
30
+ <div class="sh-circle"></div>
31
+ <div class="sh-rect"></div>
32
+ <div class="sh-sq"></div>
33
+ </div>
34
+ </header>
35
+
36
+ {%- comment -%} Stats row {%- endcomment -%}
37
+ <section class="stats-row anim-fade-up anim-delay-1" aria-label="Session statistics">
38
+ <div class="stats-row-item">
39
+ <div class="sr-number">{{ session.durationMinutes | formatDuration }}</div>
40
+ <div class="sr-label">Duration</div>
41
+ </div>
42
+ <div class="stats-row-item">
43
+ <div class="sr-number">{{ session.turns }}</div>
44
+ <div class="sr-label">Turns</div>
45
+ </div>
46
+ <div class="stats-row-item">
47
+ <div class="sr-number">{{ session.locChanged | localeNumber }}</div>
48
+ <div class="sr-label">LOC</div>
49
+ </div>
50
+ <div class="stats-row-item">
51
+ <div class="sr-number">{{ session.filesChanged }}</div>
52
+ <div class="sr-label">Files</div>
53
+ </div>
54
+ </section>
55
+
56
+ {%- comment -%} Dev take {%- endcomment -%}
57
+ {% if session.devTake %}
58
+ <section class="dev-take anim-slide-right anim-delay-2" aria-label="Developer commentary">
59
+ <div class="dev-take-label">Dev Take</div>
60
+ <blockquote>{{ session.devTake }}</blockquote>
61
+ </section>
62
+ {% endif %}
63
+
64
+ {%- comment -%} Context {%- endcomment -%}
65
+ {% if session.context %}
66
+ <section class="dev-take anim-slide-left anim-delay-2" aria-label="Session context">
67
+ <div class="dev-take-label">Context</div>
68
+ <blockquote>{{ session.context }}</blockquote>
69
+ </section>
70
+ {% endif %}
71
+
72
+ {%- comment -%} Narrative {%- endcomment -%}
73
+ {% if session.narrative %}
74
+ <section class="narrative-section anim-slide-left anim-delay-2" aria-label="Session narrative">
75
+ <div class="section-heading">
76
+ <svg width="18" height="18" aria-hidden="true">
77
+ <rect width="18" height="18" fill="var(--red)" />
78
+ </svg>
79
+ <h2>Narrative</h2>
80
+ <div class="heading-line" aria-hidden="true"></div>
81
+ </div>
82
+ <div class="narrative-block">
83
+ {{ session.narrative }}
84
+ </div>
85
+ </section>
86
+ {% endif %}
87
+
88
+ {%- comment -%} Execution path (beats) {%- endcomment -%}
89
+ {% if session.beats.size > 0 %}
90
+ <section class="beats-section anim-slide-left anim-delay-2" aria-label="Execution path">
91
+ <div class="section-heading">
92
+ <svg width="18" height="18" aria-hidden="true">
93
+ <rect width="18" height="18" fill="var(--red)" />
94
+ </svg>
95
+ <h2>Execution Path</h2>
96
+ <div class="heading-line" aria-hidden="true"></div>
97
+ </div>
98
+ <ol class="beats-list">
99
+ {% for beat in session.beats %}
100
+ <li class="beat-item">
101
+ <div class="beat-number" aria-hidden="true">{{ beat.stepNumber }}</div>
102
+ <div class="beat-content">
103
+ <div class="beat-title">{{ beat.title }}</div>
104
+ <div class="beat-desc">{{ beat.body }}</div>
105
+ </div>
106
+ </li>
107
+ {% endfor %}
108
+ </ol>
109
+ </section>
110
+ {% endif %}
111
+
112
+ {%- comment -%} Q&A {%- endcomment -%}
113
+ {% if session.qaPairs.size > 0 %}
114
+ <section class="qa-section anim-slide-right anim-delay-3" aria-label="Questions and answers">
115
+ <div class="section-heading">
116
+ <svg width="18" height="18" aria-hidden="true">
117
+ <circle cx="9" cy="9" r="9" fill="var(--blue)" />
118
+ </svg>
119
+ <h2>Q&amp;A</h2>
120
+ <div class="heading-line" aria-hidden="true"></div>
121
+ </div>
122
+ <div class="qa-list">
123
+ {% for qa in session.qaPairs %}
124
+ <article class="qa-item">
125
+ <div class="qa-question">
126
+ <span class="qa-q-marker" aria-hidden="true">Q</span>
127
+ <span>{{ qa.question }}</span>
128
+ </div>
129
+ <div class="qa-answer">
130
+ <span class="qa-a-marker" aria-hidden="true">A</span>
131
+ <span>{{ qa.answer }}</span>
132
+ </div>
133
+ </article>
134
+ {% endfor %}
135
+ </div>
136
+ </section>
137
+ {% endif %}
138
+
139
+ {%- comment -%} Highlights {%- endcomment -%}
140
+ {% if session.highlights.size > 0 %}
141
+ <section class="highlights-section anim-slide-left anim-delay-3" aria-label="Highlights">
142
+ <div class="section-heading">
143
+ <svg width="18" height="18" aria-hidden="true">
144
+ <rect width="18" height="18" fill="var(--yellow)" />
145
+ </svg>
146
+ <h2>Highlights</h2>
147
+ <div class="heading-line" aria-hidden="true"></div>
148
+ </div>
149
+ <ul class="decisions-list">
150
+ {% for h in session.highlights %}
151
+ <li class="decision-item">
152
+ <div class="decision-number" aria-hidden="true">{{ forloop.index }}</div>
153
+ <div class="decision-text">{{ h }}</div>
154
+ </li>
155
+ {% endfor %}
156
+ </ul>
157
+ </section>
158
+ {% endif %}
159
+
160
+ {%- comment -%} Agent summary {%- endcomment -%}
161
+ {% if session.agentSummary %}
162
+ <section class="agents-section anim-slide-left anim-delay-3" aria-label="Agent summary">
163
+ <div class="section-heading">
164
+ <svg width="18" height="18" aria-hidden="true">
165
+ <rect width="18" height="18" fill="var(--yellow)" />
166
+ </svg>
167
+ <h2>Agent Summary</h2>
168
+ <div class="heading-line" aria-hidden="true"></div>
169
+ </div>
170
+ <div class="agents-table-wrapper">
171
+ <table class="agents-table">
172
+ <thead>
173
+ <tr>
174
+ <th scope="col">Role</th>
175
+ <th scope="col">Duration</th>
176
+ <th scope="col">LOC</th>
177
+ </tr>
178
+ </thead>
179
+ <tbody>
180
+ {% for agent in session.agentSummary.agents %}
181
+ <tr>
182
+ <td>
183
+ <div class="agent-role-name">
184
+ <span class="agent-role-dot" style="background: {{ agent.color }}"></span>
185
+ <span class="agent-role-label">{{ agent.role }}</span>
186
+ </div>
187
+ </td>
188
+ <td>{{ agent.duration_minutes | formatDuration }}</td>
189
+ <td>{{ agent.loc_changed | localeNumber }}</td>
190
+ </tr>
191
+ {% endfor %}
192
+ </tbody>
193
+ </table>
194
+ </div>
195
+
196
+ {%- comment -%} Agent bar chart {%- endcomment -%}
197
+ {% assign maxAgentDuration = 0 %}
198
+ {% for agent in session.agentSummary.agents %}
199
+ {% if agent.duration_minutes > maxAgentDuration %}
200
+ {% assign maxAgentDuration = agent.duration_minutes %}
201
+ {% endif %}
202
+ {% endfor %}
203
+ {% if maxAgentDuration > 0 %}
204
+ <div class="agent-bar-chart anim-fade-up anim-delay-4" aria-label="Agent duration visualization">
205
+ {% for agent in session.agentSummary.agents %}
206
+ <div class="agent-bar-row">
207
+ <div class="agent-bar-label">{{ agent.role }}</div>
208
+ <div class="agent-bar-track">
209
+ <div class="agent-bar-fill" style="width: {{ agent.duration_minutes | times: 100 | divided_by: maxAgentDuration }}%; background: {{ agent.color }};"></div>
210
+ </div>
211
+ <div class="agent-bar-value">{{ agent.duration_minutes | formatDuration }}</div>
212
+ </div>
213
+ {% endfor %}
214
+ </div>
215
+ {% endif %}
216
+ </section>
217
+ {% endif %}
218
+
219
+ </main>
220
+
221
+ {%- comment -%} Sidebar {%- endcomment -%}
222
+ <aside class="sidebar anim-slide-right anim-delay-2" aria-label="Session details">
223
+
224
+ {%- comment -%} Tools used {%- endcomment -%}
225
+ {% if session.toolBreakdown.size > 0 %}
226
+ <div class="sidebar-card">
227
+ <div class="sidebar-card-header">
228
+ <svg class="sidebar-card-header-shape" width="14" height="14" aria-hidden="true">
229
+ <rect width="14" height="14" fill="var(--red)" />
230
+ </svg>
231
+ Tools Used
232
+ </div>
233
+ <div class="sidebar-card-body">
234
+ {% for tool in session.toolBreakdown %}
235
+ <div class="sidebar-row">
236
+ <span class="sidebar-row-label">{{ tool.tool }}</span>
237
+ <span class="sidebar-row-value">{{ tool.count }}</span>
238
+ </div>
239
+ {% endfor %}
240
+ </div>
241
+ </div>
242
+ {% endif %}
243
+
244
+ {%- comment -%} Files changed {%- endcomment -%}
245
+ {% if session.topFiles.size > 0 %}
246
+ <div class="sidebar-card">
247
+ <div class="sidebar-card-header">
248
+ <svg class="sidebar-card-header-shape" width="14" height="14" aria-hidden="true">
249
+ <circle cx="7" cy="7" r="7" fill="var(--blue)" />
250
+ </svg>
251
+ Files Changed
252
+ </div>
253
+ <div class="sidebar-card-body">
254
+ {% for file in session.topFiles %}
255
+ <div class="file-row">
256
+ <span class="file-path" title="{{ file.path }}">{{ file.path }}</span>
257
+ <span class="file-diff">+{{ file.additions }}</span>
258
+ </div>
259
+ {% endfor %}
260
+ </div>
261
+ </div>
262
+ {% endif %}
263
+
264
+ {%- comment -%} Skills {%- endcomment -%}
265
+ {% if session.skills.size > 0 %}
266
+ <div class="sidebar-card">
267
+ <div class="sidebar-card-header">
268
+ <svg class="sidebar-card-header-shape" width="14" height="14" aria-hidden="true">
269
+ <rect width="14" height="14" fill="var(--yellow)" />
270
+ </svg>
271
+ Skills
272
+ </div>
273
+ <div class="sidebar-card-body">
274
+ <div class="sidebar-skills">
275
+ {% for skill in session.skills %}
276
+ <span class="sidebar-skill">{{ skill }}</span>
277
+ {% endfor %}
278
+ </div>
279
+ </div>
280
+ </div>
281
+ {% endif %}
282
+
283
+ {%- comment -%} Session info {%- endcomment -%}
284
+ <div class="sidebar-card">
285
+ <div class="sidebar-card-header">
286
+ <svg class="sidebar-card-header-shape" width="14" height="14" aria-hidden="true">
287
+ <rect width="14" height="14" fill="var(--red)" />
288
+ </svg>
289
+ Session Info
290
+ </div>
291
+ <div class="sidebar-card-body">
292
+ <div class="sidebar-row">
293
+ <span class="sidebar-row-label">Duration</span>
294
+ <span class="sidebar-row-value">{{ session.durationMinutes | formatDuration }}</span>
295
+ </div>
296
+ {% if session.wallClockMinutes %}
297
+ <div class="sidebar-row">
298
+ <span class="sidebar-row-label">Wall clock</span>
299
+ <span class="sidebar-row-value">{{ session.wallClockMinutes | formatDuration }}</span>
300
+ </div>
301
+ {% endif %}
302
+ <div class="sidebar-row">
303
+ <span class="sidebar-row-label">Turns</span>
304
+ <span class="sidebar-row-value">{{ session.turns }}</span>
305
+ </div>
306
+ <div class="sidebar-row">
307
+ <span class="sidebar-row-label">Files</span>
308
+ <span class="sidebar-row-value">{{ session.filesChanged }}</span>
309
+ </div>
310
+ <div class="sidebar-row">
311
+ <span class="sidebar-row-label">LOC</span>
312
+ <span class="sidebar-row-value">{{ session.locChanged | localeNumber }}</span>
313
+ </div>
314
+ </div>
315
+ </div>
316
+
317
+ </aside>
318
+ </div>
319
+
320
+ {%- comment -%} Footer {%- endcomment -%}
321
+ <footer class="bauhaus-footer">
322
+ <div class="footer-inner">
323
+ <span class="footer-text">Built with heyi.am</span>
324
+ <div class="footer-shapes" aria-hidden="true">
325
+ <span class="footer-shape footer-sq-red"></span>
326
+ <span class="footer-shape footer-circle-blue"></span>
327
+ <span class="footer-shape footer-sq-yellow"></span>
328
+ </div>
329
+ </div>
330
+ </footer>
331
+
332
+
333
+ </div>