@rubytech/create-sitedesk-code 0.1.387 → 0.1.388

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 (201) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/config/brand.json +3 -3
  3. package/payload/platform/plugins/.claude-plugin/marketplace.json +0 -5
  4. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +5 -3
  5. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +2 -0
  6. package/payload/premium-plugins/.claude-plugin/marketplace.json +0 -15
  7. package/payload/server/server.js +169 -67
  8. package/payload/platform/plugins/sales/.claude-plugin/plugin.json +0 -8
  9. package/payload/platform/plugins/sales/PLUGIN.md +0 -106
  10. package/payload/platform/plugins/sales/references/close-tracking.md +0 -69
  11. package/payload/platform/plugins/sales/references/comparisons.md +0 -99
  12. package/payload/platform/plugins/sales/references/competitive-positioning.md +0 -51
  13. package/payload/platform/plugins/sales/references/faq.md +0 -73
  14. package/payload/platform/plugins/sales/references/objection-handling.md +0 -157
  15. package/payload/platform/plugins/sales/references/pricing.md +0 -101
  16. package/payload/premium-plugins/teaching/.claude-plugin/plugin.json +0 -8
  17. package/payload/premium-plugins/teaching/PLUGIN.md +0 -58
  18. package/payload/premium-plugins/teaching/skills/interactive-tutor/SKILL.md +0 -59
  19. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/assessment.md +0 -70
  20. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +0 -43
  21. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +0 -83
  22. package/payload/premium-plugins/teaching/skills/lesson-planner/SKILL.md +0 -48
  23. package/payload/premium-plugins/teaching/skills/lesson-planner/references/context-gathering.md +0 -41
  24. package/payload/premium-plugins/teaching/skills/lesson-planner/references/plan-structure.md +0 -94
  25. package/payload/premium-plugins/teaching/skills/study-pack-builder/SKILL.md +0 -52
  26. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/disaggregation.md +0 -49
  27. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/materials.md +0 -116
  28. package/payload/premium-plugins/venture-studio/.claude-plugin/plugin.json +0 -8
  29. package/payload/premium-plugins/venture-studio/PLUGIN.md +0 -128
  30. package/payload/premium-plugins/venture-studio/bin/scaffold.sh +0 -116
  31. package/payload/premium-plugins/venture-studio/skills/brand-pack/SKILL.md +0 -256
  32. package/payload/premium-plugins/venture-studio/skills/brand-pack/references/color-psychology.md +0 -118
  33. package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +0 -436
  34. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/business-plan-template.md +0 -64
  35. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/competitive-battlecard.md +0 -37
  36. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/competitor-analysis.md +0 -32
  37. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/compliance-research-checklist.md +0 -53
  38. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/data-room-structure.md +0 -88
  39. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/deck-blueprint-template.md +0 -39
  40. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/design-tokens-application.md +0 -79
  41. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/html-pdf-pipeline.md +0 -236
  42. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/internal-workings-scrub.md +0 -33
  43. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/monetization-strategy.md +0 -35
  44. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/pricing-strategy.md +0 -37
  45. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/strategy-frameworks.md +0 -46
  46. package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/termsheet-template.md +0 -88
  47. package/payload/premium-plugins/venture-studio/skills/investor-data-room/templates/prospectus/index.html +0 -1565
  48. package/payload/premium-plugins/venture-studio/skills/investor-data-room/templates/prospectus/render-pdf.mjs +0 -91
  49. package/payload/premium-plugins/venture-studio/skills/investor-data-room/templates/prospectus/term_sheet.html +0 -715
  50. package/payload/premium-plugins/venture-studio/skills/legal-essentials/SKILL.md +0 -65
  51. package/payload/premium-plugins/venture-studio/skills/office-hours/SKILL.md +0 -587
  52. package/payload/premium-plugins/venture-studio/skills/prototype-host/SKILL.md +0 -179
  53. package/payload/premium-plugins/venture-studio/skills/prototype-host/references/cloudflared-ingress-edit.md +0 -81
  54. package/payload/premium-plugins/venture-studio/skills/prototype-host/references/scaffold-frameworks.md +0 -60
  55. package/payload/premium-plugins/venture-studio/skills/prototype-host/references/systemd-user-service.md +0 -104
  56. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/SKILL.md +0 -342
  57. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/aarrr-metrics.md +0 -275
  58. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/assumption-testing.md +0 -93
  59. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/boolean-search.md +0 -308
  60. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/build-measure-learn.md +0 -262
  61. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/business-model-canvas.md +0 -171
  62. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/commitment-signals.md +0 -246
  63. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/design-thinking.md +0 -183
  64. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/earlyvangelist.md +0 -190
  65. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/first-principles.md +0 -58
  66. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/fishbone.md +0 -114
  67. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/five-whys.md +0 -43
  68. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/ice-scoring.md +0 -237
  69. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/innovation-accounting.md +0 -290
  70. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/jtbd.md +0 -105
  71. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +0 -361
  72. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/market-sizing.md +0 -58
  73. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/market-type.md +0 -167
  74. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/mom-test.md +0 -193
  75. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/mvp-types.md +0 -200
  76. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/og-images.md +0 -239
  77. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/pareto.md +0 -103
  78. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/persona-development.md +0 -291
  79. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/pivot-types.md +0 -225
  80. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/positioning-statement.md +0 -179
  81. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/prd.md +0 -363
  82. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/pre-mortem.md +0 -74
  83. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/problem-validation.md +0 -253
  84. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/product-market-fit.md +0 -256
  85. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/research-synthesis.md +0 -276
  86. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/strategy-red-team.md +0 -41
  87. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/three-engines-of-growth.md +0 -248
  88. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/validation-tests.md +0 -89
  89. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/value-proposition-canvas.md +0 -121
  90. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/win-loss-analysis.md +0 -242
  91. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/workflow-mapping.md +0 -271
  92. package/payload/premium-plugins/writer-craft/.claude-plugin/plugin.json +0 -21
  93. package/payload/premium-plugins/writer-craft/PLUGIN.md +0 -134
  94. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +0 -108
  95. package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.d.ts +0 -8
  96. package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.d.ts.map +0 -1
  97. package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.js +0 -71
  98. package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.js.map +0 -1
  99. package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/package.json +0 -7
  100. package/payload/premium-plugins/writer-craft/lib/mcp-spawn-tee/index.js +0 -193
  101. package/payload/premium-plugins/writer-craft/lib/mcp-spawn-tee/package.json +0 -3
  102. package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.d.ts +0 -51
  103. package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.d.ts.map +0 -1
  104. package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.js +0 -196
  105. package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.js.map +0 -1
  106. package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/package.json +0 -7
  107. package/payload/premium-plugins/writer-craft/mcp/dist/cli/ingest-session-text.d.ts +0 -3
  108. package/payload/premium-plugins/writer-craft/mcp/dist/cli/ingest-session-text.d.ts.map +0 -1
  109. package/payload/premium-plugins/writer-craft/mcp/dist/cli/ingest-session-text.js +0 -58
  110. package/payload/premium-plugins/writer-craft/mcp/dist/cli/ingest-session-text.js.map +0 -1
  111. package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts +0 -3
  112. package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +0 -1
  113. package/payload/premium-plugins/writer-craft/mcp/dist/index.js +0 -403
  114. package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +0 -1
  115. package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.d.ts +0 -14
  116. package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.d.ts.map +0 -1
  117. package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.js +0 -47
  118. package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.js.map +0 -1
  119. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts +0 -117
  120. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts.map +0 -1
  121. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js +0 -138
  122. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js.map +0 -1
  123. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts +0 -90
  124. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts.map +0 -1
  125. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js +0 -609
  126. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js.map +0 -1
  127. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.d.ts +0 -19
  128. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.d.ts.map +0 -1
  129. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.js +0 -124
  130. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.js.map +0 -1
  131. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts +0 -38
  132. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts.map +0 -1
  133. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js +0 -93
  134. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js.map +0 -1
  135. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts +0 -61
  136. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +0 -1
  137. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js +0 -171
  138. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map +0 -1
  139. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts +0 -35
  140. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts.map +0 -1
  141. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js +0 -127
  142. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js.map +0 -1
  143. package/payload/premium-plugins/writer-craft/mcp/package-lock.json +0 -1327
  144. package/payload/premium-plugins/writer-craft/mcp/package.json +0 -19
  145. package/payload/premium-plugins/writer-craft/mcp/scripts/smoke.mjs +0 -420
  146. package/payload/premium-plugins/writer-craft/mcp/src/index.ts +0 -457
  147. package/payload/premium-plugins/writer-craft/mcp/src/lib/neo4j.ts +0 -56
  148. package/payload/premium-plugins/writer-craft/mcp/src/lib/voice-corpus.ts +0 -154
  149. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-distil-profile.ts +0 -833
  150. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-ingest-session-text.ts +0 -153
  151. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-record-feedback.ts +0 -148
  152. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-retrieve-conditioning.ts +0 -270
  153. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-tag-content.ts +0 -181
  154. package/payload/premium-plugins/writer-craft/mcp/tsconfig.json +0 -8
  155. package/payload/premium-plugins/writer-craft/skills/citation-style/SKILL.md +0 -94
  156. package/payload/premium-plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +0 -77
  157. package/payload/premium-plugins/writer-craft/skills/citation-style/references/citation-rules.md +0 -103
  158. package/payload/premium-plugins/writer-craft/skills/citation-style/references/journal-article-models.md +0 -74
  159. package/payload/premium-plugins/writer-craft/skills/citation-style/references/other-source-models.md +0 -146
  160. package/payload/premium-plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +0 -70
  161. package/payload/premium-plugins/writer-craft/skills/editorial-practice/SKILL.md +0 -108
  162. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/copyediting.md +0 -73
  163. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +0 -85
  164. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +0 -78
  165. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/line-editing.md +0 -55
  166. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/self-editing.md +0 -89
  167. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +0 -114
  168. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +0 -73
  169. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +0 -76
  170. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +0 -67
  171. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +0 -86
  172. package/payload/premium-plugins/writer-craft/skills/point-of-view/SKILL.md +0 -97
  173. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +0 -72
  174. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +0 -91
  175. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +0 -71
  176. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +0 -85
  177. package/payload/premium-plugins/writer-craft/skills/prose-craft/SKILL.md +0 -100
  178. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +0 -72
  179. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/repetition.md +0 -71
  180. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +0 -64
  181. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/word-economy.md +0 -93
  182. package/payload/premium-plugins/writer-craft/skills/reader-engagement/SKILL.md +0 -100
  183. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +0 -79
  184. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +0 -81
  185. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +0 -67
  186. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +0 -94
  187. package/payload/premium-plugins/writer-craft/skills/review-manuscript/SKILL.md +0 -111
  188. package/payload/premium-plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +0 -119
  189. package/payload/premium-plugins/writer-craft/skills/review-prose/SKILL.md +0 -99
  190. package/payload/premium-plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +0 -112
  191. package/payload/premium-plugins/writer-craft/skills/review-scene/SKILL.md +0 -99
  192. package/payload/premium-plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +0 -95
  193. package/payload/premium-plugins/writer-craft/skills/story-architecture/SKILL.md +0 -106
  194. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +0 -118
  195. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +0 -66
  196. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +0 -87
  197. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +0 -82
  198. package/payload/premium-plugins/writer-craft/skills/story-blueprint/SKILL.md +0 -133
  199. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +0 -118
  200. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +0 -128
  201. package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +0 -241
@@ -1,91 +0,0 @@
1
- // Render an HTML document into an A4 PORTRAIT image-only PDF.
2
- // Mirrors the property-brochure pipeline (skills/property-brochure/references/build.md).
3
- // Each <section class="page"> is screenshot as ONE PNG; bound to A4 via img2pdf;
4
- // linearized via qpdf. The HTML CSS sizes each .page to exactly A4 (210mm × 297mm).
5
- //
6
- // node render-pdf.mjs <input.html> <output.pdf> [scale]
7
-
8
- import { chromium } from 'playwright';
9
- import { execFileSync } from 'node:child_process';
10
- import { mkdirSync, readdirSync, rmSync, statSync } from 'node:fs';
11
- import { dirname, join, resolve, basename } from 'node:path';
12
- import { fileURLToPath } from 'node:url';
13
-
14
- const __dirname = dirname(fileURLToPath(import.meta.url));
15
-
16
- const inputArg = process.argv[2];
17
- const outputArg = process.argv[3];
18
- const SCALE = parseFloat(process.argv[4] || '3.125'); // 3.125× → 300 dpi
19
- if (!inputArg || !outputArg) {
20
- console.error('Usage: node render-pdf.mjs <input.html> <output.pdf> [scale]');
21
- process.exit(2);
22
- }
23
-
24
- const INPUT = resolve(inputArg);
25
- const OUTPUT = resolve(outputArg);
26
- const TMP = join(__dirname, `.tmp-${basename(INPUT, '.html')}`);
27
-
28
- rmSync(TMP, { recursive: true, force: true });
29
- mkdirSync(TMP, { recursive: true });
30
-
31
- const browser = await chromium.launch();
32
- const context = await browser.newContext({
33
- viewport: { width: 794, height: 1123 }, // A4 portrait at 96 dpi
34
- deviceScaleFactor: SCALE,
35
- });
36
- const page = await context.newPage();
37
- await page.emulateMedia({ media: 'print' }); // trigger @media print rules
38
- await page.goto(`file://${INPUT}`, { waitUntil: 'networkidle' });
39
-
40
- // Hide screen-only chrome but DO NOT inject layout CSS — the HTML's @media print
41
- // rules are responsible for sizing each .page to A4. Per the brochure pipeline.
42
- await page.addStyleTag({ content: `
43
- .pdf-btn { display: none !important; }
44
- html, body { background: #fff !important; margin: 0 !important; }
45
- ` });
46
-
47
- await page.evaluate(() => Promise.all(
48
- Array.from(document.images, img => img.complete ? null : new Promise(r => { img.onload = img.onerror = r; }))
49
- ));
50
-
51
- const sections = await page.$$('section.page');
52
- if (!sections.length) {
53
- console.error('No <section class="page"> found in', INPUT);
54
- process.exit(3);
55
- }
56
- console.log(`Rendering ${sections.length} A4 page(s) from ${basename(INPUT)} at ${SCALE}× ...`);
57
-
58
- // Per build.md: "Verify every page fits A4: measure scrollHeight for all .page elements"
59
- // A4 portrait at 96 dpi is 1123 CSS px. Anything past that is content overflow that will
60
- // be clipped by `overflow: hidden` and lost from the rendered PDF.
61
- const A4_H = 1123;
62
- let overflowed = false;
63
- for (let i = 0; i < sections.length; i++) {
64
- const box = await sections[i].boundingBox();
65
- const scrollH = await sections[i].evaluate(el => el.scrollHeight);
66
- const ok = scrollH <= A4_H + 2; // 2px slack
67
- if (!ok) overflowed = true;
68
- console.log(` page ${i + 1}: scrollHeight ${scrollH}px${ok ? '' : ` ⚠ EXCEEDS A4 (${A4_H}px) — content will be clipped`}`);
69
- }
70
- if (overflowed) {
71
- console.error('\nOne or more <section class="page"> elements overflow A4 height. Split their content into separate <section class="page"> blocks. Aborting render.');
72
- await browser.close();
73
- process.exit(4);
74
- }
75
-
76
- for (let i = 0; i < sections.length; i++) {
77
- const file = join(TMP, `page-${String(i + 1).padStart(2, '0')}.png`);
78
- await sections[i].scrollIntoViewIfNeeded();
79
- await sections[i].screenshot({ path: file, type: 'png' });
80
- const bytes = statSync(file).size;
81
- console.log(` page ${i + 1}: ${(bytes / 1024).toFixed(0)} KB`);
82
- }
83
-
84
- await browser.close();
85
-
86
- const pngs = readdirSync(TMP).filter(f => f.startsWith('page-') && f.endsWith('.png')).sort().map(f => join(TMP, f));
87
- const preLinear = join(TMP, 'pre-linearize.pdf');
88
- execFileSync('img2pdf', ['--pagesize', '210mmx297mm', '--output', preLinear, ...pngs], { stdio: 'inherit' });
89
- execFileSync('qpdf', ['--linearize', '--object-streams=disable', preLinear, OUTPUT], { stdio: 'inherit' });
90
-
91
- console.log(`\nWrote ${OUTPUT}`);