heyiam 0.3.6 → 0.3.9

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 (92) hide show
  1. package/dist/archive.js +28 -0
  2. package/dist/db.js +9 -0
  3. package/dist/export.js +3 -0
  4. package/dist/llm/project-enhance.js +11 -5
  5. package/dist/mount.js +43 -18
  6. package/dist/public/assets/index-ByoBtx7P.css +1 -0
  7. package/dist/public/assets/index-LQHTU1Wz.js +37 -0
  8. package/dist/public/index.html +2 -2
  9. package/dist/render/build-render-data.js +1 -0
  10. package/dist/render/liquid.js +14 -1
  11. package/dist/render/mock-data.js +6 -0
  12. package/dist/render/select-profile-skills.js +54 -0
  13. package/dist/render/templates/aurora/portfolio.liquid +4 -4
  14. package/dist/render/templates/aurora/styles.css +6 -6
  15. package/dist/render/templates/bauhaus/portfolio.liquid +4 -4
  16. package/dist/render/templates/bauhaus/project.liquid +2 -2
  17. package/dist/render/templates/bauhaus/styles.css +1 -1
  18. package/dist/render/templates/blueprint/portfolio.liquid +4 -4
  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/styles.css +2 -2
  22. package/dist/render/templates/carbon/portfolio.liquid +4 -4
  23. package/dist/render/templates/carbon/styles.css +7 -7
  24. package/dist/render/templates/chalk/portfolio.liquid +4 -4
  25. package/dist/render/templates/chalk/styles.css +44 -2
  26. package/dist/render/templates/circuit/portfolio.liquid +4 -4
  27. package/dist/render/templates/cosmos/portfolio.liquid +4 -4
  28. package/dist/render/templates/cosmos/styles.css +4 -4
  29. package/dist/render/templates/daylight/portfolio.liquid +4 -4
  30. package/dist/render/templates/editorial/portfolio.liquid +4 -4
  31. package/dist/render/templates/editorial/project.liquid +1 -1
  32. package/dist/render/templates/editorial/styles.css +6 -1
  33. package/dist/render/templates/ember/portfolio.liquid +4 -4
  34. package/dist/render/templates/ember/styles.css +2 -2
  35. package/dist/render/templates/glacier/portfolio.liquid +4 -4
  36. package/dist/render/templates/glacier/project.liquid +3 -3
  37. package/dist/render/templates/glacier/styles.css +2 -2
  38. package/dist/render/templates/grid/portfolio.liquid +4 -4
  39. package/dist/render/templates/grid/styles.css +2 -2
  40. package/dist/render/templates/kinetic/portfolio.liquid +4 -4
  41. package/dist/render/templates/kinetic/project.liquid +1 -1
  42. package/dist/render/templates/kinetic/styles.css +5 -5
  43. package/dist/render/templates/meridian/portfolio.liquid +4 -4
  44. package/dist/render/templates/meridian/styles.css +1 -1
  45. package/dist/render/templates/minimal/portfolio.liquid +3 -3
  46. package/dist/render/templates/minimal/project.liquid +1 -1
  47. package/dist/render/templates/mono/portfolio.liquid +4 -4
  48. package/dist/render/templates/mono/styles.css +15 -1
  49. package/dist/render/templates/neon/portfolio.liquid +4 -4
  50. package/dist/render/templates/neon/styles.css +11 -20
  51. package/dist/render/templates/noir/portfolio.liquid +4 -4
  52. package/dist/render/templates/noir/styles.css +5 -5
  53. package/dist/render/templates/obsidian/portfolio.liquid +4 -4
  54. package/dist/render/templates/obsidian/styles.css +2 -2
  55. package/dist/render/templates/paper/portfolio.liquid +4 -4
  56. package/dist/render/templates/paper/project.liquid +2 -2
  57. package/dist/render/templates/paper/styles.css +60 -1
  58. package/dist/render/templates/parallax/portfolio.liquid +4 -4
  59. package/dist/render/templates/parallax/styles.css +1 -1
  60. package/dist/render/templates/parchment/portfolio.liquid +4 -4
  61. package/dist/render/templates/parchment/styles.css +3 -3
  62. package/dist/render/templates/partials/_work-timeline.liquid +1 -1
  63. package/dist/render/templates/project.liquid +1 -1
  64. package/dist/render/templates/radar/portfolio.liquid +4 -4
  65. package/dist/render/templates/radar/project.liquid +1 -1
  66. package/dist/render/templates/radar/styles.css +4 -4
  67. package/dist/render/templates/showcase/portfolio.liquid +4 -4
  68. package/dist/render/templates/showcase/project.liquid +1 -1
  69. package/dist/render/templates/showcase/styles.css +7 -7
  70. package/dist/render/templates/signal/portfolio.liquid +4 -4
  71. package/dist/render/templates/signal/styles.css +5 -5
  72. package/dist/render/templates/strata/portfolio.liquid +4 -4
  73. package/dist/render/templates/strata/styles.css +3 -3
  74. package/dist/render/templates/styles.css +39 -28
  75. package/dist/render/templates/terminal/portfolio.liquid +2 -2
  76. package/dist/render/templates/terminal/project.liquid +1 -1
  77. package/dist/render/templates/verdant/portfolio.liquid +4 -4
  78. package/dist/render/templates/verdant/styles.css +17 -2
  79. package/dist/render/templates/zen/portfolio.liquid +4 -4
  80. package/dist/render/templates/zen/styles.css +8 -8
  81. package/dist/routes/context.js +26 -3
  82. package/dist/routes/enhance.js +10 -3
  83. package/dist/routes/export.js +1 -0
  84. package/dist/routes/github.js +1 -1
  85. package/dist/routes/portfolio-render-data.js +15 -1
  86. package/dist/routes/preview.js +31 -1
  87. package/dist/routes/projects.js +8 -1
  88. package/dist/routes/publish.js +9 -2
  89. package/dist/settings.js +2 -0
  90. package/package.json +1 -1
  91. package/dist/public/assets/index-7mUuxgqY.js +0 -37
  92. package/dist/public/assets/index-CMyamplX.css +0 -1
@@ -55,7 +55,7 @@ export function createPublishRouter(ctx) {
55
55
  // Render project preview HTML
56
56
  router.post('/api/projects/:project/render-preview', async (req, res) => {
57
57
  try {
58
- const { username, slug, title, narrative, repoUrl, projectUrl, screenshotUrl, timeline, skills, totalSessions, totalLoc, totalDurationMinutes, totalAgentDurationMinutes, totalFilesChanged, totalTokens, sessionCards, } = req.body;
58
+ const { username, slug, title, narrative, repoUrl, projectUrl, screenshotUrl, timeline, skills, totalSessions, totalLoc, totalDurationMinutes, totalAgentDurationMinutes, totalFilesChanged, totalTokens, sessionCards, hideSessionDates, } = req.body;
59
59
  const renderData = buildProjectRenderData({
60
60
  username: username || 'preview',
61
61
  slug, title, narrative,
@@ -69,6 +69,7 @@ export function createPublishRouter(ctx) {
69
69
  totalFilesChanged: totalFilesChanged || 0,
70
70
  totalTokens,
71
71
  sessionCards: sessionCards || [],
72
+ hideSessionDates,
72
73
  });
73
74
  const templateName = getDefaultTemplate() || 'editorial';
74
75
  const html = renderProjectHtml(renderData, undefined, templateName);
@@ -181,6 +182,11 @@ export function createPublishRouter(ctx) {
181
182
  send({ type: 'screenshot', status: 'capturing' });
182
183
  const raw = screenshotBase64.includes(',') ? screenshotBase64.split(',')[1] : screenshotBase64;
183
184
  imageBuffer = Buffer.from(raw, 'base64');
185
+ // FIXME(security): ext detection only handles png/jpg, so an SVG
186
+ // (allowed by the file picker's `accept="image/*"`) gets uploaded
187
+ // to S3 with `Content-Type: image/png` while the bytes are SVG.
188
+ // CSP on heyi.am mitigates script execution, but reject SVG here
189
+ // (or convert it) instead of relying on downstream defenses.
184
190
  ext = screenshotBase64.startsWith('data:image/jpeg') || screenshotBase64.startsWith('data:image/jpg') ? 'jpg' : 'png';
185
191
  }
186
192
  else if (projectUrl) {
@@ -424,7 +430,7 @@ export function createPublishRouter(ctx) {
424
430
  fingerprint: 'portfolio-upload',
425
431
  enhancedAt: new Date().toISOString(),
426
432
  selectedSessionIds: detail.sessions.map((s) => s.id),
427
- result: { narrative: '', arc: [], skills: [], timeline: [], questions: [] },
433
+ result: { tagline: '', narrative: '', arc: [], skills: [], timeline: [], questions: [] },
428
434
  };
429
435
  const selectedSessionIds = enhance !== null && enhance.selectedSessionIds !== undefined
430
436
  ? enhance.selectedSessionIds
@@ -720,6 +726,7 @@ export function createPublishRouter(ctx) {
720
726
  enhancedAt: new Date().toISOString(),
721
727
  selectedSessionIds: detail.sessions.map((s) => s.id),
722
728
  result: {
729
+ tagline: '',
723
730
  narrative: '',
724
731
  arc: [],
725
732
  skills: [],
package/dist/settings.js CHANGED
@@ -163,6 +163,8 @@ export function saveProjectEnhanceResult(projectDirName, selectedSessionIds, res
163
163
  ...(extras?.repoUrl ? { repoUrl: extras.repoUrl } : {}),
164
164
  ...(extras?.projectUrl ? { projectUrl: extras.projectUrl } : {}),
165
165
  ...(extras?.screenshotBase64 ? { screenshotBase64: extras.screenshotBase64 } : {}),
166
+ ...(extras?.template ? { template: extras.template } : {}),
167
+ ...(extras?.hideSessionDates ? { hideSessionDates: true } : {}),
166
168
  result,
167
169
  };
168
170
  writeFileSync(projectEnhancePath(projectDirName, configDir), JSON.stringify(cache, null, 2), { mode: 0o600 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "heyiam",
3
- "version": "0.3.6",
3
+ "version": "0.3.9",
4
4
  "description": "Turn AI coding sessions into portfolio case studies",
5
5
  "type": "module",
6
6
  "license": "MIT",