@rubytech/create-maxy-code 0.1.98 → 0.1.100
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.
- package/package.json +1 -1
- package/payload/platform/plugins/founder-pack/skills/investor-data-room/SKILL.md +44 -4
- package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/termsheet-template.md +88 -0
- package/payload/premium-plugins/founder-pack/skills/investor-data-room/SKILL.md +44 -4
- package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/termsheet-template.md +88 -0
- package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/SKILL.md +1 -0
- package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md +1 -1
- package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/template.html +10 -1
- package/payload/server/public/assets/{ChatInput-CzQhPt90.css → ChatInput-u7hSrC3q.css} +1 -1
- package/payload/server/public/assets/{Checkbox-ynZtDWi3.js → Checkbox-CfiWjuMH.js} +1 -1
- package/payload/server/public/assets/{admin-WyIfDMQG.js → admin-D6VRETeg.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Ko_izKmY.js → architectureDiagram-Q4EWVU46-CSAyzBIK.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-D58VDC0w.js → blockDiagram-DXYQGD6D-l_AoJo_I.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-C-eRXyKi.js → c4Diagram-AHTNJAMY-Dsjc59iO.js} +1 -1
- package/payload/server/public/assets/channel-BlwH4wTf.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DZLEfLAb.js → chunk-336JU56O-BgAz-EJ4.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BriTU3L8.js → chunk-426QAEUC-DHF9zZlS.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BdxRL-AY.js → chunk-4TB4RGXK-Cqb1TREv.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-BgEmy7Y3.js → chunk-5FUZZQ4R-CV4WMN8u.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-emnbDRLA.js → chunk-5PVQY5BW-CL0bAr0t.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-BvCf2Xf2.js → chunk-EDXVE4YY-WY3Sg1Fq.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-DTpEYJRb.js → chunk-ENJZ2VHE-BIVdDrD2.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-Ced2j48Y.js → chunk-ICPOFSXX-CUHDQxso.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-B21_a3Dv.js → chunk-OYMX7WX6-D1sj6R4f.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-CPS3yyXK.js → chunk-U2HBQHQK-BGso49fW.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-BJ_B5NW7.js → chunk-X2U36JSP-C2tUGTcL.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-CMLy-WXm.js → chunk-YZCP3GAM-CLvYLDvo.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BkLnzCHe.js → chunk-ZZ45TVLE-yHQe8STh.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DuEhfP67.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-zSqemF--.js +1 -0
- package/payload/server/public/assets/clone-DUSqJbTD.js +1 -0
- package/payload/server/public/assets/{dagre-KV5264BT-RY0E5UAn.js → dagre-KV5264BT-Df1MO_DJ.js} +1 -1
- package/payload/server/public/assets/{dagre-Dd_gq4yj.js → dagre-fQyUaxmN.js} +1 -1
- package/payload/server/public/assets/data-BFHNkj3Y.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-DR7XiPLh.js → diagram-5BDNPKRD-E3qTf9lX.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-2EbOfKFs.js → diagram-G4DWMVQ6-DCV-gR0I.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-CGcY0Ze7.js → diagram-MMDJMWI5-CZKwrxSp.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-Dk6MmAso.js → diagram-TYMM5635-ClXOl5De.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-CKvdlUqk.js → erDiagram-SMLLAGMA-v2-MNn-e.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BqKhvCDz.js → flowDiagram-DWJPFMVM-CDFzDH-2.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CeiE-IRb.js → ganttDiagram-T4ZO3ILL-DEA-33qn.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BbPKn7v2.js → gitGraphDiagram-UUTBAWPF-lLy_eZzu.js} +1 -1
- package/payload/server/public/assets/graph-Df2aJN0a.js +1 -0
- package/payload/server/public/assets/{graph-labels-BzMN9eev.js → graph-labels-CCTdQ2Vi.js} +1 -1
- package/payload/server/public/assets/{graphlib-tG6kR59B.js → graphlib-B6Y7yD4A.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-6MiRGCI1.js → infoDiagram-42DDH7IO-D-Pm-tYB.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BwY4p5mg.js → ishikawaDiagram-UXIWVN3A-DVHkDPv1.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-BXAQ_fUi.js → journeyDiagram-VCZTEJTY-CsxM47ah.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-ChiiO7Yt.js → kanban-definition-6JOO6SKY-C7EYwNjH.js} +1 -1
- package/payload/server/public/assets/{lib-DbPz9cfu.js → lib-iH6Mg9EP.js} +1 -1
- package/payload/server/public/assets/{line-B5g5OrOD.js → line-CvBly01q.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-BMGzMKJx.js → mermaid-parser.core-D32akjeh.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-DLMgkjXn.js → mermaid.core-B3O4X8ja.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BvyzRLAi.js → mindmap-definition-QFDTVHPH-yreoqnSK.js} +1 -1
- package/payload/server/public/assets/{page-D93GZ3YQ.js → page-BVuuY21i.js} +1 -1
- package/payload/server/public/assets/{page--nZ_z-z7.js → page-Dc2CtJkh.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG--EV9pVfs.js → pieDiagram-DEJITSTG-DEYXlFD5.js} +1 -1
- package/payload/server/public/assets/{public-sYW0Dwku.js → public-DknvBIqv.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DJcL08ft.js → quadrantDiagram-34T5L4WZ-CVTVYl5c.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-D4VdmmSu.js → requirementDiagram-MS252O5E-D438ZRqW.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-Dsw3nHRS.js → sankeyDiagram-XADWPNL6-B2Hs1q9K.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CAgemUx5.js → sequenceDiagram-FGHM5R23-BqRHtAoK.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-B7dyL9_X.js → stateDiagram-FHFEXIEX-ILOj6_TV.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B2cQBKI1.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B7iKswhp.js → timeline-definition-GMOUNBTQ-D-uskEEs.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-uFS0i1qX.js → vennDiagram-DHZGUBPP-DJjaoR79.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-lDUh4LAD.js → wardleyDiagram-NUSXRM2D-B1EO_5jp.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-0v7MEVwW.js → xychartDiagram-5P7HB3ND-CQnz0KUb.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/public/assets/channel-CejaITMF.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BmoqALf4.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-vMajwCNi.js +0 -1
- package/payload/server/public/assets/clone-mvVfHkyg.js +0 -1
- package/payload/server/public/assets/data-D2aPJB7w.js +0 -1
- package/payload/server/public/assets/graph-B5UWg8zV.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CImN6Wk6.js +0 -1
- /package/payload/server/public/assets/{ChatInput-Cj9JQtYt.js → ChatInput-BmmxQOhM.js} +0 -0
package/package.json
CHANGED
|
@@ -60,13 +60,18 @@ Complete when the data room contains:
|
|
|
60
60
|
business-plan.pdf # rendered output
|
|
61
61
|
logo-light.png logo-dark.png
|
|
62
62
|
prospectus/
|
|
63
|
-
index.html
|
|
63
|
+
index.html # A4 portrait, 10-15 page persuasive cut
|
|
64
|
+
term_sheet.html # A4 portrait, 6-8 page formal term sheet
|
|
64
65
|
render-pdf.mjs
|
|
65
|
-
prospectus.pdf
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
prospectus.pdf term_sheet.pdf
|
|
67
|
+
logo-light.png logo-dark.png
|
|
68
|
+
deck/
|
|
69
|
+
index.html # 16:9 landscape (297mm x 167mm), 12+1 slides
|
|
68
70
|
render-pdf.mjs
|
|
69
71
|
deck.pdf
|
|
72
|
+
logo-light.png logo-dark.png
|
|
73
|
+
team/ # cropped headshot WebPs for slide 8 founder grid
|
|
74
|
+
<founder-firstname>-<lastname>.webp
|
|
70
75
|
```
|
|
71
76
|
|
|
72
77
|
Skip stages that are already complete; do not regenerate stale artefacts blindly.
|
|
@@ -137,6 +142,32 @@ Compliance research is mandatory before drafting Section 10. WebSearch (or equiv
|
|
|
137
142
|
|
|
138
143
|
References: `references/business-plan-template.md` for the section-by-section template; `references/compliance-research-checklist.md` for the UK + EU regulatory regimes to verify.
|
|
139
144
|
|
|
145
|
+
## Stage 3b — Term sheet synthesis
|
|
146
|
+
|
|
147
|
+
Generate `html/prospectus/term_sheet.html` as an **A4 portrait, 10-page formal term sheet** sectioned as:
|
|
148
|
+
|
|
149
|
+
1. Cover + preamble + parties (Issuer / Founders / Investors / round size / minimum cheque / target close)
|
|
150
|
+
2. Share economics & use of proceeds (instrument, valuation, dilution, issue price, share count, use of funds)
|
|
151
|
+
3. Cap table on closing (post-money, fully diluted, total = 100%)
|
|
152
|
+
4. Governance & shareholder protections (board, info rights, pre-emption, drag/tag, SEIS/EIS posture)
|
|
153
|
+
5. Closing terms (governing law, IP assignment, conditions to closing, long-form docs timeline)
|
|
154
|
+
6. Signatures (Company + Investor blocks)
|
|
155
|
+
7. **Appendix A — High Net Worth Individual Investor Statement** (FSMA 2000 / FCA COBS 4 Annex 2 verbatim)
|
|
156
|
+
8. **Appendix B — Self-Certified Sophisticated Investor Statement** (FSMA 2000 / FCA COBS 4 Annex 4 verbatim)
|
|
157
|
+
9. Backpage (contact)
|
|
158
|
+
|
|
159
|
+
**Doctrine for the term sheet:**
|
|
160
|
+
|
|
161
|
+
- **Entity name is the IN01-filed name**, not a marketing entity. Issuer must read as the actual filed company (e.g. "Real Agent Network Limited" not "Real Agent Systems Ltd").
|
|
162
|
+
- **Cap table matches the IN01 + Round 1 dilution model exactly.** Pre-investment shares + new investor Round Shares = post-investment total. No fractional shares; no rounding to the % column that breaks share totals.
|
|
163
|
+
- **Founder list reads exactly as the cap table.** No phantom founders. Strategic shareholders (e.g. an investing LLP) ride in the cap table by entity name, not via their individuals.
|
|
164
|
+
- **Sole director on IN01 is the director-designate.** A term sheet that names two directors when IN01 names one is a defect.
|
|
165
|
+
- **SEIS/EIS posture is post-funding obligation, not closing contingency.** Never assured prior to distribution; no representation as to qualifying status. Forms no part of consideration.
|
|
166
|
+
- **Confidentiality and exclusivity provisions are the only binding clauses.** Everything else non-binding until long-form docs.
|
|
167
|
+
- **FCA self-certification statements are appendices to the term sheet, not separate documents.** The High Net Worth Individual Investor Statement (FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 2) and the Self-Certified Sophisticated Investor Statement (COBS 4 Annex 4) ship as Appendix A and Appendix B. **Use verbatim wording**; never paraphrase regulatory text. Current source: UKBAA's templated PDFs (Feb 2024 versions reflect the post-31 Jan 2024 reverted thresholds: HNW £170k income or £430k net assets; sophisticated director threshold £1.6m turnover). When the regulatory wording changes, the templates change first at UKBAA / FCA COBS Annexes; re-fetch before issue.
|
|
168
|
+
|
|
169
|
+
References: `references/termsheet-template.md`.
|
|
170
|
+
|
|
140
171
|
## Stage 4 — Deck blueprint synthesis
|
|
141
172
|
|
|
142
173
|
Generate `01-narrative/deck-blueprint.md` as a **12-slide brief** the deck designer can execute. Each slide has Purpose, Headline (one-line message), Body (bullets + figures pulled from the business plan), Visual suggestion, and Source reference. The 12 slides:
|
|
@@ -194,6 +225,14 @@ References: `references/html-pdf-pipeline.md` for the canonical `render-pdf.mjs`
|
|
|
194
225
|
- **Even page count for booklet binding.** Multiple of 4 ideally; minimum even. Add or remove a supporting page to maintain parity if a section change breaks it.
|
|
195
226
|
- **Verify by reading every rendered page.** `pdfinfo` page count is not verification. The bottom 30% of every page must reach the content margin without significant whitespace.
|
|
196
227
|
|
|
228
|
+
## Slide-design patterns (collected from the deck build)
|
|
229
|
+
|
|
230
|
+
- **Cap-table over labelled pie chart.** A labelled donut with seven slices puts the percentages on the chart but adds visual clutter at small slice counts. A clean post-investment cap table (Shareholder / Shares / % with a gold-rule Total row) reads faster on the slide and matches the term-sheet treatment. Default to the table; reserve the pie for slides with three to four large slices.
|
|
231
|
+
- **Circular founder avatars on the team slide.** Square photos at full card width over-allocate vertical real-estate and crowd the bio + advisor band. Fixed-diameter circular avatars (e.g. 42mm × 42mm, `border-radius: 50%`, centred `margin: 0 auto`) leave room for the eyebrow + name + 3-line bio + advisor band on a 16:9 slide.
|
|
232
|
+
- **Headshot crops are face-centred, not full-environment.** Crop each source PNG/JPG to a tight head + shoulders square at 1200×1200 (`magick <src> -crop WxH+X+Y +repage -resize 1200x1200 -strip <crop>.png`), then encode with `cwebp -q 88 -m 6 -mt`. Resize-then-encode never loses face fidelity at the 42mm display size. Track per-founder face position from the source dimensions and centre the crop window on it.
|
|
233
|
+
- **Bio line budget on slide 8 is ~3 lines at 8.5pt.** A 4th line crashes into the advisor band's `border-top`. Trim aggressively: lead with the headline number ("33 years residential estate agency"), then 2-3 firms and 1-2 awards.
|
|
234
|
+
- **Linter strips trailing text in long edits.** When editing a multi-line founder bio (or any cell where you append clauses past a verbatim sentence), the auto-formatter has rewritten the trailing fragment on this project. Always re-grep the file after the edit; if "Sole IN01 director." or "2× Capper" went missing, the edit needs a second pass with a smaller anchor.
|
|
235
|
+
|
|
197
236
|
## Pitfalls to avoid (collected from the reference project)
|
|
198
237
|
|
|
199
238
|
- **Renaming a directory after the URL is published.** Keep `<project-site>/.docs/data-room/html/<artefact>/index.html` stable; if the URL changes, downstream investor links break.
|
|
@@ -212,6 +251,7 @@ References: `references/html-pdf-pipeline.md` for the canonical `render-pdf.mjs`
|
|
|
212
251
|
- `references/compliance-research-checklist.md` — UK + EU regulatory regimes to verify
|
|
213
252
|
- `references/internal-workings-scrub.md` — the public-vs-internal doctrine, patterns to scrub, recurrence list
|
|
214
253
|
- `references/design-tokens-application.md` — how to consume `realagent-site/.docs/design-tokens.md` from an artefact's `:root` block
|
|
254
|
+
- `references/termsheet-template.md` — A4-portrait term-sheet structure, cap-table reconciliation, common defects
|
|
215
255
|
|
|
216
256
|
## Reference project
|
|
217
257
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Term sheet template
|
|
2
|
+
|
|
3
|
+
A4-portrait, 6-to-8-page formal term sheet, same render pipeline as the business plan (Playwright + img2pdf + qpdf). Lives at `html/prospectus/term_sheet.html`. The reference project produces a 7-page artefact: cover + 5 content pages + signatures.
|
|
4
|
+
|
|
5
|
+
## Page-by-page structure
|
|
6
|
+
|
|
7
|
+
| # | Page | Contents |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 1 | Cover + preamble | Issuer (full Companies-House-filed legal name), document title, "Non-binding — confidentiality and exclusivity bind", preamble (round purpose, recipient self-cert reminder), introductory parties table (Issuer, Founders list, Investors, round size, minimum cheque, minimum aggregate, target first close) |
|
|
10
|
+
| 2 | Share economics & use of proceeds | Instrument (ordinary £0.001 or £0.01 nominal, ranking *pari passu*), pre-money / post-money / dilution, issue price (computed from pre-money ÷ pre-investment shares), Round Share count, use of proceeds split, long-stop date, funds-expected timing |
|
|
11
|
+
| 3 | Cap table on closing | Holder / Role / Shares / % table; founders subtotal; Round Shares row; total = 100% / 625,000 |
|
|
12
|
+
| 4 | Governance & shareholder protections | Board composition (director-designate per IN01), information rights (≥5% threshold), pre-emption, drag-along / tag-along, share-transfer good-leaver / bad-leaver, SEIS/EIS posture, confidentiality (binding), exclusivity (binding) |
|
|
13
|
+
| 5 | Closing terms | Governing law (English), expenses (each party bears own), founder IP assignment (deed at first close, no licence-back, no royalty), conditions to closing, long-form documentation timeline |
|
|
14
|
+
| 6 | Signatures | Company block (director-designate per IN01) + Investor block (name / entity / commitment / signature line) |
|
|
15
|
+
| 7 | **Appendix A — High Net Worth Individual Investor Statement** | FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 2 statement, verbatim. Income £170,000 / net assets £430,000 thresholds (post-31 Jan 2024 reverted thresholds). Checkboxes, declaration callout, signature lines. |
|
|
16
|
+
| 8 | **Appendix B — Self-Certified Sophisticated Investor Statement** | FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 4 statement, verbatim. Conditions A (PE / SME finance professional past 2yr), B (director of company with £1.6m+ turnover past 2yr), C (business-angel network member 6m+). Checkboxes, declaration callout, signature lines. |
|
|
17
|
+
| 9 | Backpage | Contact card (2×2 founder grid: role / name / email / phone) + confidentiality reminder + companies-house identifier |
|
|
18
|
+
|
|
19
|
+
## Cap table reconciliation
|
|
20
|
+
|
|
21
|
+
The cap table on closing **must reconcile against the IN01 + the Round 1 dilution model exactly**. The pattern from the reference project:
|
|
22
|
+
|
|
23
|
+
| Step | Source |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Pre-investment shares (e.g. 500,000) | IN01 statement of capital |
|
|
26
|
+
| Per-founder pre-investment % | IN01 cap table |
|
|
27
|
+
| Dilution % | (Round size / post-money) = 350 / 1,750 = 20% in the reference project |
|
|
28
|
+
| Post-investment % per founder | Pre-investment % × (1 − dilution%) |
|
|
29
|
+
| Post-investment shares per founder | Pre-investment shares × (1 − dilution%) — note this only works if all founders dilute pro rata |
|
|
30
|
+
| Round Shares | New investor's post-investment % × total post-investment shares |
|
|
31
|
+
| Total post-closing shares | Pre-investment shares ÷ (1 − dilution%) |
|
|
32
|
+
|
|
33
|
+
Reference project numbers (pre 500k, dilution 20%):
|
|
34
|
+
- Joel 24.90% / 124,500 → 19.92% / 124,500 (no change in shares; dilution is via issuance of new shares)
|
|
35
|
+
- Adam 24.90% / 124,500 → 19.92% / 124,500
|
|
36
|
+
- Alex 20.00% / 100,000 → 16.00% / 100,000
|
|
37
|
+
- Jamie 15.16% / 75,813 → 12.13% / 75,813
|
|
38
|
+
- BackleyBlack 8.75% / 43,749 → 7.00% / 43,749
|
|
39
|
+
- Stewart Smalley 6.29% / 31,438 → 5.03% / 31,438
|
|
40
|
+
- Founders subtotal 500,000 / 80.00%
|
|
41
|
+
- New investors (Round 1) 125,000 / 20.00%
|
|
42
|
+
- Total post-closing 625,000 / 100.00%
|
|
43
|
+
|
|
44
|
+
Issue price = pre-money / pre-investment shares = £1,400,000 / 500,000 = **£2.80 per Round Share** (£0.001 nominal + £2.799 share premium in the reference project where nominal was £0.001; or £0.01 nominal + £2.79 premium if the term sheet sets nominal at £0.01).
|
|
45
|
+
|
|
46
|
+
## Doctrine
|
|
47
|
+
|
|
48
|
+
- **Issuer name is the IN01-filed legal entity.** Stale term sheets that reference a marketing entity (e.g. "Real Agent Systems Ltd" instead of the filed "Real Agent Network Limited") are defects. The Companies House number on every page header should match.
|
|
49
|
+
- **Founder list reads exactly as the cap table.** Six holders on the cap table = six in the founder list. No phantom founders. Strategic shareholders (e.g. an investing LLP) ride in by entity name, not by their constituent individuals.
|
|
50
|
+
- **Sole director on IN01 is the director-designate on the term sheet's signature page.** A term sheet that names two directors when IN01 named one needs reconciling before issue.
|
|
51
|
+
- **SEIS/EIS posture is post-funding obligation, never closing contingency.** Never assured prior to distribution; no representation as to qualifying status. Forms no part of consideration.
|
|
52
|
+
- **Confidentiality + exclusivity bind; everything else is non-binding** until subscription & shareholders' agreement.
|
|
53
|
+
|
|
54
|
+
## FCA self-certification appendices — sourcing the verbatim wording
|
|
55
|
+
|
|
56
|
+
Both appendices reproduce the FCA template **word-for-word**. Never paraphrase regulatory text. The FCA Handbook pages (COBS 4 Annex 2 / Annex 4) are JavaScript-rendered and not directly fetchable; the most reliable verbatim source is the **UK Business Angels Association** templated PDFs, updated whenever HM Treasury or the FCA change the thresholds:
|
|
57
|
+
|
|
58
|
+
- High Net Worth: <https://ukbaa.org.uk/wp-content/uploads/2024/02/HighNetWorthStatement.pdf>
|
|
59
|
+
- Sophisticated: <https://ukbaa.org.uk/wp-content/uploads/2024/02/SelfCertifiedStatement.pdf>
|
|
60
|
+
|
|
61
|
+
These are the **Feb 2024 versions**, reflecting the thresholds in force after HM Treasury reverted the January-2024 increases. Current thresholds:
|
|
62
|
+
|
|
63
|
+
| Statement | Condition | Threshold |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| HNW | A — income | £170,000 in last financial year (excludes one-off pension withdrawals) |
|
|
66
|
+
| HNW | B — net assets | £430,000 (excludes primary residence, loan secured on it, equity released from it, pension, insurance rights) |
|
|
67
|
+
| Sophisticated | A — PE / SME finance professional | last two years |
|
|
68
|
+
| Sophisticated | B — director of company | annual turnover ≥ £1.6 million, last two years |
|
|
69
|
+
| Sophisticated | C — business-angel network | member ≥ 6 months, still a member |
|
|
70
|
+
|
|
71
|
+
**Re-fetch before issue.** Thresholds change. The Feb 2024 templates were issued after HM Treasury reverted a Jan 2024 increase to £170k income / £430k net assets / £1.6m turnover (the original 2023 thresholds were £100k / £250k / £1m). The pattern: if it changes again, UKBAA reissues; re-fetch their PDF and re-render the appendix.
|
|
72
|
+
|
|
73
|
+
Render the appendices in the **same A4 stylesheet as the term sheet** but with a `.page--appendix` class that tightens `h2` (22pt instead of 26pt), `.form-question` margins (2.5mm instead of 4mm), and `.form-declaration` padding (3mm instead of 4mm). Without these overrides, the Sophisticated page (3 questions + 4 declarations + signature) overflows A4.
|
|
74
|
+
|
|
75
|
+
## Render
|
|
76
|
+
|
|
77
|
+
Same `render-pdf.mjs` pattern as the business plan; viewport 794×1123 (A4 portrait at 96 dpi), deviceScaleFactor 3.125 (300 dpi PNG), `img2pdf --pagesize 210mmx297mm`, `qpdf --linearize`. Output: `html/prospectus/term_sheet.pdf`.
|
|
78
|
+
|
|
79
|
+
## Common defects to avoid
|
|
80
|
+
|
|
81
|
+
| Defect | Fix |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Issuer name mismatch (marketing vs filed) | Use the IN01 legal name verbatim on every page header |
|
|
84
|
+
| Founder list includes individuals also represented by an LLP holding | Use the LLP holding only; do not double-count |
|
|
85
|
+
| Issue price stated without showing the calculation | `£2.80 = £1.4m ÷ 500,000 pre-shares` in the issue-price row |
|
|
86
|
+
| Cap-table % rounding doesn't sum to 100% | Compute % as `shares / total` and verify the sum; never hand-enter % rows |
|
|
87
|
+
| SEIS/EIS implied as confirmed | "Pursuing SEIS/EIS Advance Assurance from HMRC is a post-funding obligation … not a closing contingency … no representation as to qualifying status" |
|
|
88
|
+
| Director-designate doesn't match IN01 | Read the IN01 PDF; the proposed director on IN01 is the director-designate |
|
|
@@ -60,13 +60,18 @@ Complete when the data room contains:
|
|
|
60
60
|
business-plan.pdf # rendered output
|
|
61
61
|
logo-light.png logo-dark.png
|
|
62
62
|
prospectus/
|
|
63
|
-
index.html
|
|
63
|
+
index.html # A4 portrait, 10-15 page persuasive cut
|
|
64
|
+
term_sheet.html # A4 portrait, 6-8 page formal term sheet
|
|
64
65
|
render-pdf.mjs
|
|
65
|
-
prospectus.pdf
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
prospectus.pdf term_sheet.pdf
|
|
67
|
+
logo-light.png logo-dark.png
|
|
68
|
+
deck/
|
|
69
|
+
index.html # 16:9 landscape (297mm x 167mm), 12+1 slides
|
|
68
70
|
render-pdf.mjs
|
|
69
71
|
deck.pdf
|
|
72
|
+
logo-light.png logo-dark.png
|
|
73
|
+
team/ # cropped headshot WebPs for slide 8 founder grid
|
|
74
|
+
<founder-firstname>-<lastname>.webp
|
|
70
75
|
```
|
|
71
76
|
|
|
72
77
|
Skip stages that are already complete; do not regenerate stale artefacts blindly.
|
|
@@ -137,6 +142,32 @@ Compliance research is mandatory before drafting Section 10. WebSearch (or equiv
|
|
|
137
142
|
|
|
138
143
|
References: `references/business-plan-template.md` for the section-by-section template; `references/compliance-research-checklist.md` for the UK + EU regulatory regimes to verify.
|
|
139
144
|
|
|
145
|
+
## Stage 3b — Term sheet synthesis
|
|
146
|
+
|
|
147
|
+
Generate `html/prospectus/term_sheet.html` as an **A4 portrait, 10-page formal term sheet** sectioned as:
|
|
148
|
+
|
|
149
|
+
1. Cover + preamble + parties (Issuer / Founders / Investors / round size / minimum cheque / target close)
|
|
150
|
+
2. Share economics & use of proceeds (instrument, valuation, dilution, issue price, share count, use of funds)
|
|
151
|
+
3. Cap table on closing (post-money, fully diluted, total = 100%)
|
|
152
|
+
4. Governance & shareholder protections (board, info rights, pre-emption, drag/tag, SEIS/EIS posture)
|
|
153
|
+
5. Closing terms (governing law, IP assignment, conditions to closing, long-form docs timeline)
|
|
154
|
+
6. Signatures (Company + Investor blocks)
|
|
155
|
+
7. **Appendix A — High Net Worth Individual Investor Statement** (FSMA 2000 / FCA COBS 4 Annex 2 verbatim)
|
|
156
|
+
8. **Appendix B — Self-Certified Sophisticated Investor Statement** (FSMA 2000 / FCA COBS 4 Annex 4 verbatim)
|
|
157
|
+
9. Backpage (contact)
|
|
158
|
+
|
|
159
|
+
**Doctrine for the term sheet:**
|
|
160
|
+
|
|
161
|
+
- **Entity name is the IN01-filed name**, not a marketing entity. Issuer must read as the actual filed company (e.g. "Real Agent Network Limited" not "Real Agent Systems Ltd").
|
|
162
|
+
- **Cap table matches the IN01 + Round 1 dilution model exactly.** Pre-investment shares + new investor Round Shares = post-investment total. No fractional shares; no rounding to the % column that breaks share totals.
|
|
163
|
+
- **Founder list reads exactly as the cap table.** No phantom founders. Strategic shareholders (e.g. an investing LLP) ride in the cap table by entity name, not via their individuals.
|
|
164
|
+
- **Sole director on IN01 is the director-designate.** A term sheet that names two directors when IN01 names one is a defect.
|
|
165
|
+
- **SEIS/EIS posture is post-funding obligation, not closing contingency.** Never assured prior to distribution; no representation as to qualifying status. Forms no part of consideration.
|
|
166
|
+
- **Confidentiality and exclusivity provisions are the only binding clauses.** Everything else non-binding until long-form docs.
|
|
167
|
+
- **FCA self-certification statements are appendices to the term sheet, not separate documents.** The High Net Worth Individual Investor Statement (FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 2) and the Self-Certified Sophisticated Investor Statement (COBS 4 Annex 4) ship as Appendix A and Appendix B. **Use verbatim wording**; never paraphrase regulatory text. Current source: UKBAA's templated PDFs (Feb 2024 versions reflect the post-31 Jan 2024 reverted thresholds: HNW £170k income or £430k net assets; sophisticated director threshold £1.6m turnover). When the regulatory wording changes, the templates change first at UKBAA / FCA COBS Annexes; re-fetch before issue.
|
|
168
|
+
|
|
169
|
+
References: `references/termsheet-template.md`.
|
|
170
|
+
|
|
140
171
|
## Stage 4 — Deck blueprint synthesis
|
|
141
172
|
|
|
142
173
|
Generate `01-narrative/deck-blueprint.md` as a **12-slide brief** the deck designer can execute. Each slide has Purpose, Headline (one-line message), Body (bullets + figures pulled from the business plan), Visual suggestion, and Source reference. The 12 slides:
|
|
@@ -194,6 +225,14 @@ References: `references/html-pdf-pipeline.md` for the canonical `render-pdf.mjs`
|
|
|
194
225
|
- **Even page count for booklet binding.** Multiple of 4 ideally; minimum even. Add or remove a supporting page to maintain parity if a section change breaks it.
|
|
195
226
|
- **Verify by reading every rendered page.** `pdfinfo` page count is not verification. The bottom 30% of every page must reach the content margin without significant whitespace.
|
|
196
227
|
|
|
228
|
+
## Slide-design patterns (collected from the deck build)
|
|
229
|
+
|
|
230
|
+
- **Cap-table over labelled pie chart.** A labelled donut with seven slices puts the percentages on the chart but adds visual clutter at small slice counts. A clean post-investment cap table (Shareholder / Shares / % with a gold-rule Total row) reads faster on the slide and matches the term-sheet treatment. Default to the table; reserve the pie for slides with three to four large slices.
|
|
231
|
+
- **Circular founder avatars on the team slide.** Square photos at full card width over-allocate vertical real-estate and crowd the bio + advisor band. Fixed-diameter circular avatars (e.g. 42mm × 42mm, `border-radius: 50%`, centred `margin: 0 auto`) leave room for the eyebrow + name + 3-line bio + advisor band on a 16:9 slide.
|
|
232
|
+
- **Headshot crops are face-centred, not full-environment.** Crop each source PNG/JPG to a tight head + shoulders square at 1200×1200 (`magick <src> -crop WxH+X+Y +repage -resize 1200x1200 -strip <crop>.png`), then encode with `cwebp -q 88 -m 6 -mt`. Resize-then-encode never loses face fidelity at the 42mm display size. Track per-founder face position from the source dimensions and centre the crop window on it.
|
|
233
|
+
- **Bio line budget on slide 8 is ~3 lines at 8.5pt.** A 4th line crashes into the advisor band's `border-top`. Trim aggressively: lead with the headline number ("33 years residential estate agency"), then 2-3 firms and 1-2 awards.
|
|
234
|
+
- **Linter strips trailing text in long edits.** When editing a multi-line founder bio (or any cell where you append clauses past a verbatim sentence), the auto-formatter has rewritten the trailing fragment on this project. Always re-grep the file after the edit; if "Sole IN01 director." or "2× Capper" went missing, the edit needs a second pass with a smaller anchor.
|
|
235
|
+
|
|
197
236
|
## Pitfalls to avoid (collected from the reference project)
|
|
198
237
|
|
|
199
238
|
- **Renaming a directory after the URL is published.** Keep `<project-site>/.docs/data-room/html/<artefact>/index.html` stable; if the URL changes, downstream investor links break.
|
|
@@ -212,6 +251,7 @@ References: `references/html-pdf-pipeline.md` for the canonical `render-pdf.mjs`
|
|
|
212
251
|
- `references/compliance-research-checklist.md` — UK + EU regulatory regimes to verify
|
|
213
252
|
- `references/internal-workings-scrub.md` — the public-vs-internal doctrine, patterns to scrub, recurrence list
|
|
214
253
|
- `references/design-tokens-application.md` — how to consume `realagent-site/.docs/design-tokens.md` from an artefact's `:root` block
|
|
254
|
+
- `references/termsheet-template.md` — A4-portrait term-sheet structure, cap-table reconciliation, common defects
|
|
215
255
|
|
|
216
256
|
## Reference project
|
|
217
257
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Term sheet template
|
|
2
|
+
|
|
3
|
+
A4-portrait, 6-to-8-page formal term sheet, same render pipeline as the business plan (Playwright + img2pdf + qpdf). Lives at `html/prospectus/term_sheet.html`. The reference project produces a 7-page artefact: cover + 5 content pages + signatures.
|
|
4
|
+
|
|
5
|
+
## Page-by-page structure
|
|
6
|
+
|
|
7
|
+
| # | Page | Contents |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 1 | Cover + preamble | Issuer (full Companies-House-filed legal name), document title, "Non-binding — confidentiality and exclusivity bind", preamble (round purpose, recipient self-cert reminder), introductory parties table (Issuer, Founders list, Investors, round size, minimum cheque, minimum aggregate, target first close) |
|
|
10
|
+
| 2 | Share economics & use of proceeds | Instrument (ordinary £0.001 or £0.01 nominal, ranking *pari passu*), pre-money / post-money / dilution, issue price (computed from pre-money ÷ pre-investment shares), Round Share count, use of proceeds split, long-stop date, funds-expected timing |
|
|
11
|
+
| 3 | Cap table on closing | Holder / Role / Shares / % table; founders subtotal; Round Shares row; total = 100% / 625,000 |
|
|
12
|
+
| 4 | Governance & shareholder protections | Board composition (director-designate per IN01), information rights (≥5% threshold), pre-emption, drag-along / tag-along, share-transfer good-leaver / bad-leaver, SEIS/EIS posture, confidentiality (binding), exclusivity (binding) |
|
|
13
|
+
| 5 | Closing terms | Governing law (English), expenses (each party bears own), founder IP assignment (deed at first close, no licence-back, no royalty), conditions to closing, long-form documentation timeline |
|
|
14
|
+
| 6 | Signatures | Company block (director-designate per IN01) + Investor block (name / entity / commitment / signature line) |
|
|
15
|
+
| 7 | **Appendix A — High Net Worth Individual Investor Statement** | FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 2 statement, verbatim. Income £170,000 / net assets £430,000 thresholds (post-31 Jan 2024 reverted thresholds). Checkboxes, declaration callout, signature lines. |
|
|
16
|
+
| 8 | **Appendix B — Self-Certified Sophisticated Investor Statement** | FSMA 2000 (Financial Promotion) Order 2005 / FCA COBS 4 Annex 4 statement, verbatim. Conditions A (PE / SME finance professional past 2yr), B (director of company with £1.6m+ turnover past 2yr), C (business-angel network member 6m+). Checkboxes, declaration callout, signature lines. |
|
|
17
|
+
| 9 | Backpage | Contact card (2×2 founder grid: role / name / email / phone) + confidentiality reminder + companies-house identifier |
|
|
18
|
+
|
|
19
|
+
## Cap table reconciliation
|
|
20
|
+
|
|
21
|
+
The cap table on closing **must reconcile against the IN01 + the Round 1 dilution model exactly**. The pattern from the reference project:
|
|
22
|
+
|
|
23
|
+
| Step | Source |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Pre-investment shares (e.g. 500,000) | IN01 statement of capital |
|
|
26
|
+
| Per-founder pre-investment % | IN01 cap table |
|
|
27
|
+
| Dilution % | (Round size / post-money) = 350 / 1,750 = 20% in the reference project |
|
|
28
|
+
| Post-investment % per founder | Pre-investment % × (1 − dilution%) |
|
|
29
|
+
| Post-investment shares per founder | Pre-investment shares × (1 − dilution%) — note this only works if all founders dilute pro rata |
|
|
30
|
+
| Round Shares | New investor's post-investment % × total post-investment shares |
|
|
31
|
+
| Total post-closing shares | Pre-investment shares ÷ (1 − dilution%) |
|
|
32
|
+
|
|
33
|
+
Reference project numbers (pre 500k, dilution 20%):
|
|
34
|
+
- Joel 24.90% / 124,500 → 19.92% / 124,500 (no change in shares; dilution is via issuance of new shares)
|
|
35
|
+
- Adam 24.90% / 124,500 → 19.92% / 124,500
|
|
36
|
+
- Alex 20.00% / 100,000 → 16.00% / 100,000
|
|
37
|
+
- Jamie 15.16% / 75,813 → 12.13% / 75,813
|
|
38
|
+
- BackleyBlack 8.75% / 43,749 → 7.00% / 43,749
|
|
39
|
+
- Stewart Smalley 6.29% / 31,438 → 5.03% / 31,438
|
|
40
|
+
- Founders subtotal 500,000 / 80.00%
|
|
41
|
+
- New investors (Round 1) 125,000 / 20.00%
|
|
42
|
+
- Total post-closing 625,000 / 100.00%
|
|
43
|
+
|
|
44
|
+
Issue price = pre-money / pre-investment shares = £1,400,000 / 500,000 = **£2.80 per Round Share** (£0.001 nominal + £2.799 share premium in the reference project where nominal was £0.001; or £0.01 nominal + £2.79 premium if the term sheet sets nominal at £0.01).
|
|
45
|
+
|
|
46
|
+
## Doctrine
|
|
47
|
+
|
|
48
|
+
- **Issuer name is the IN01-filed legal entity.** Stale term sheets that reference a marketing entity (e.g. "Real Agent Systems Ltd" instead of the filed "Real Agent Network Limited") are defects. The Companies House number on every page header should match.
|
|
49
|
+
- **Founder list reads exactly as the cap table.** Six holders on the cap table = six in the founder list. No phantom founders. Strategic shareholders (e.g. an investing LLP) ride in by entity name, not by their constituent individuals.
|
|
50
|
+
- **Sole director on IN01 is the director-designate on the term sheet's signature page.** A term sheet that names two directors when IN01 named one needs reconciling before issue.
|
|
51
|
+
- **SEIS/EIS posture is post-funding obligation, never closing contingency.** Never assured prior to distribution; no representation as to qualifying status. Forms no part of consideration.
|
|
52
|
+
- **Confidentiality + exclusivity bind; everything else is non-binding** until subscription & shareholders' agreement.
|
|
53
|
+
|
|
54
|
+
## FCA self-certification appendices — sourcing the verbatim wording
|
|
55
|
+
|
|
56
|
+
Both appendices reproduce the FCA template **word-for-word**. Never paraphrase regulatory text. The FCA Handbook pages (COBS 4 Annex 2 / Annex 4) are JavaScript-rendered and not directly fetchable; the most reliable verbatim source is the **UK Business Angels Association** templated PDFs, updated whenever HM Treasury or the FCA change the thresholds:
|
|
57
|
+
|
|
58
|
+
- High Net Worth: <https://ukbaa.org.uk/wp-content/uploads/2024/02/HighNetWorthStatement.pdf>
|
|
59
|
+
- Sophisticated: <https://ukbaa.org.uk/wp-content/uploads/2024/02/SelfCertifiedStatement.pdf>
|
|
60
|
+
|
|
61
|
+
These are the **Feb 2024 versions**, reflecting the thresholds in force after HM Treasury reverted the January-2024 increases. Current thresholds:
|
|
62
|
+
|
|
63
|
+
| Statement | Condition | Threshold |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| HNW | A — income | £170,000 in last financial year (excludes one-off pension withdrawals) |
|
|
66
|
+
| HNW | B — net assets | £430,000 (excludes primary residence, loan secured on it, equity released from it, pension, insurance rights) |
|
|
67
|
+
| Sophisticated | A — PE / SME finance professional | last two years |
|
|
68
|
+
| Sophisticated | B — director of company | annual turnover ≥ £1.6 million, last two years |
|
|
69
|
+
| Sophisticated | C — business-angel network | member ≥ 6 months, still a member |
|
|
70
|
+
|
|
71
|
+
**Re-fetch before issue.** Thresholds change. The Feb 2024 templates were issued after HM Treasury reverted a Jan 2024 increase to £170k income / £430k net assets / £1.6m turnover (the original 2023 thresholds were £100k / £250k / £1m). The pattern: if it changes again, UKBAA reissues; re-fetch their PDF and re-render the appendix.
|
|
72
|
+
|
|
73
|
+
Render the appendices in the **same A4 stylesheet as the term sheet** but with a `.page--appendix` class that tightens `h2` (22pt instead of 26pt), `.form-question` margins (2.5mm instead of 4mm), and `.form-declaration` padding (3mm instead of 4mm). Without these overrides, the Sophisticated page (3 questions + 4 declarations + signature) overflows A4.
|
|
74
|
+
|
|
75
|
+
## Render
|
|
76
|
+
|
|
77
|
+
Same `render-pdf.mjs` pattern as the business plan; viewport 794×1123 (A4 portrait at 96 dpi), deviceScaleFactor 3.125 (300 dpi PNG), `img2pdf --pagesize 210mmx297mm`, `qpdf --linearize`. Output: `html/prospectus/term_sheet.pdf`.
|
|
78
|
+
|
|
79
|
+
## Common defects to avoid
|
|
80
|
+
|
|
81
|
+
| Defect | Fix |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Issuer name mismatch (marketing vs filed) | Use the IN01 legal name verbatim on every page header |
|
|
84
|
+
| Founder list includes individuals also represented by an LLP holding | Use the LLP holding only; do not double-count |
|
|
85
|
+
| Issue price stated without showing the calculation | `£2.80 = £1.4m ÷ 500,000 pre-shares` in the issue-price row |
|
|
86
|
+
| Cap-table % rounding doesn't sum to 100% | Compute % as `shares / total` and verify the sum; never hand-enter % rows |
|
|
87
|
+
| SEIS/EIS implied as confirmed | "Pursuing SEIS/EIS Advance Assurance from HMRC is a post-funding obligation … not a closing contingency … no representation as to qualifying status" |
|
|
88
|
+
| Director-designate doesn't match IN01 | Read the IN01 PDF; the proposed director on IN01 is the director-designate |
|
|
@@ -342,6 +342,7 @@ Report `DONE` only after:
|
|
|
342
342
|
- The **web bundle** exists at `output/web/` and as a zipped `output/<slug>-web.zip` — see `property-brochure → Web bundle` for what it contains. The bundle includes both `brochure.html` and the companion `index.html` (see `property-brochure → Page`), plus a copy of the web PDF named simply `<property_slug>-brochure.pdf` to match the in-page Download links. Smoke-test was performed: an isolated HTTP server returned 200 for every referenced asset (HTML, web-tier images, jpg snapshots, the bundled PDF), and **both** `brochure.html` and `index.html` rendered correctly. Typical zip is 30–50 MB for a 16-page folio.
|
|
343
343
|
- **Back-page QR codes are clickable.** Each QR is wrapped in an `<a target="_blank">` tag and accompanied by a visible underlined URL beneath the label, so a digital reader can click instead of scan. See `property-brochure → Back-page QR codes`.
|
|
344
344
|
- The user-facing report names which steps ran and which were reused, **and the chosen orientation**, **and the path to both the canonical print archive and the web zip**.
|
|
345
|
+
- **The web PDF and the web zip are delivered to the user via `SendUserFile` (Claude Code native), not via `admin: file-attach`.** Call `SendUserFile` with both paths in one call: `<property_dir>/output/<property_slug>-brochure-web.pdf` and `<property_dir>/output/<property_slug>-web.zip`. Include a one-line caption naming the property and the bundle size. `admin: file-attach` writes the file into the admin attachment store and returns an `attachmentId` envelope that LOOKS like success, but produces no visible attachment in the chat surface for this channel — that's the wasted first-turn failure mode that ships on every make-brochure run when the agent reaches for the admin tool. Reach for `SendUserFile` first, every time. **30 MiB ceiling:** `SendUserFile` accepts files up to 30 MiB each. The web PDF is well within (~7–15 MB at JPEG-embedded). The web zip can exceed when the bundle carries many photos — if `du -h <slug>-web.zip` reports > 30 MiB, do NOT call `SendUserFile` with it; instead, send the operator the public URL at `<tunnel-url>/files/output/<slug>-web.zip` (the bundle already lives under `output/` which the tunnel serves). The web PDF still goes via `SendUserFile`. Per `system-prompt.ts:267`: *"The tool returns 'N files delivered to user' even when the byte upload silently fails, so the response is not evidence of delivery."* Treat the operator's visible-attachment tile as the only evidence of delivery; if they don't see it, retry once with the public-URL path.
|
|
345
346
|
- No image was read in violation of the 2000px rule (verifiable: every image read should have been preceded by a `sips`/`identify` measurement, and any over-threshold image was previewed via `/tmp/`).
|
|
346
347
|
|
|
347
348
|
If any condition is unmet, report `DONE_WITH_CONCERNS` and list the gap.
|
package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md
CHANGED
|
@@ -174,7 +174,7 @@ When any field above is unresolved after consulting its primary source, **stop b
|
|
|
174
174
|
- **Doc-comment strip pass runs against BOTH templates.** After substitution, the `<!-- REPLACE … -->` authoring notes must be removed from both `brochure.html` AND `index.html`. A strip pass that covers only the brochure leaves landing-page authoring notes rendering as visible body text whenever a comment delimiter is misplaced. The companion source-side check in `references/build.md → Template authoring hygiene + CI lint` catches the same defect class at template-edit time.
|
|
175
175
|
- **EPC is mandatory — `TBC` is not shippable.** UK law requires an EPC for any marketed property. The brochure must not render with `epc_rating: "TBC"`, no matter what `property-extract` returned. If the rating is missing or the listing displayed `TBC`, the operator confirmation prompt must demand an actual A–G band (plus current/potential scores and the certificate path) before substitution proceeds. The operator's authoritative fallback is the [EPC Register](https://www.epcregister.com/) — look up by address or postcode, download the certificate, supply the values. `TBC` is the one answer the operator cannot confirm for this field.
|
|
176
176
|
- **Web bundle ships the PDF, not per-page JPGs.** The bundle does not include `cover-print.jpg … backpage-print.jpg` — those duplicate the brochure content already embedded in `<slug>-brochure.pdf`. The web copy of `brochure.html` has its `.print-img` src attributes cleared so the print stylesheet drops to the live-DOM fallback; operators who want a printable PDF download the bundled PDF directly. See `references/build.md → Clear .print-img src in the web copy`. Shipping both was the historical bundle-bloat defect.
|
|
177
|
-
- **
|
|
177
|
+
- **Bottom chrome on `.page` is absolutely-positioned and stacks deterministically.** Three classes of bottom element exist: (1) the `.folio` page-number strip (`bottom: 8mm`, ~8mm tall → occupies bottom ~16mm of every page); (2) `.back-disclaimer` on the back page (`bottom: 16mm`, wraps to up to 5 lines × 3.7mm → occupies bottom ~34.5mm); (3) `.mi-foot` on the Material Information page (`bottom: 22mm`, ~7mm tall → occupies bottom ~22–29mm). All are `position: absolute`, anchored to their nearest positioned ancestor (`.page` which is `position: relative`). In-flow content above (e.g. `.mi-grid` inside `.mi-page`, `.backpage-inner` centred content) is a SIBLING in the stacking flow — nothing in CSS structure enforces clearance from the absolute layer. The fix is to either (a) **make the relevant footer absolute** (the approach used for `.mi-foot` to prevent oversized `.mi-grid` from pushing the disclaimer into the folio), or (b) **pull the in-flow container up via its parent's `padding-bottom`** when the footer is small and predictable (e.g. `.backpage-inner` uses 42mm to clear folio + disclaimer with a 4mm gap). Never use `margin-*` on a `position: absolute` element whose anchor is `bottom` — it has no positional effect.
|
|
178
178
|
- **Folio is plain text on whitespace or absent — never chrome over imagery.** The `.folio > span` carries no background, blur, padding, border-radius, or shadow. It is plain text in `--teal-900` that sits on the clean whitespace reserved at the page bottom (see the previous rule on padding-bottom clearance). The folio is **hidden entirely** on full-bleed-bottom pages: `.cover`, `.page.intermission`, `.page.folio-dark`, and any `.page` whose body wraps a `.feature-page` (photo+panel layout where the photo bleeds to the page bottom). Never reintroduce a folio-pill background to "make it readable over the image" — that's competing chrome on the page; suppress the folio on that page instead. Any new full-bleed-bottom page class must be added to the `.folio` `display: none` selector in `references/template.html`.
|
|
179
179
|
- **Page 13's `{{ siteplan_src }}` is never the floorplan.** Page 13 (the site-plan / plot page, `.page siteplan-page`, "Continued, Chapter VI · The plot") expects a plot drawing, site plan, or aerial photo — an image distinct from the floorplan that page 14 already carries. If no such image is naturally available (no `<slug>-siteplan.png` line-art, no aerial photo on disk), the operator confirmation prompt MUST list `{{ siteplan_src }}` as an unresolved field and request a substitute by name — a wide exterior, a paddock/grounds photo, a drone shot of the property in its setting, or a hand-marked site sketch. Silently falling back to the floorplan duplicates page 14's content and is a defect (the brochure ships with the same image on two consecutive pages — visible immediately on review). The fallback is forbidden by the same doctrine as `TBC`: never coerce a field to a default the operator did not confirm. If the operator cannot supply a substitute, the brochure drops to the 12-page reduced layout (no page 13) — not to a 16-page layout with a duplicated floorplan.
|
|
180
180
|
- **Verification covers every page in the deliverable — sampling is a defect, not a shortcut.** `scrollHeight` fit checks, computed-style collision probes (`.mi-foot` ↔ `.folio` gap, `.back-disclaimer` ↔ in-flow content, any future absolute-bottom element vs in-flow neighbour), and visual review before declaring done all walk **every page** in the 16-page folio (or 12-page reduced layout). "Sample-checked 3 of 12 pages" or any variant ("spot-checked the spreads I changed", "skimmed a few representative pages") is not authorised — the skill explicitly says "verify every page" in `references/build.md → Live editing workflow` step 8 and in `references/structure.md`. The deliverable is the brochure as a whole; a defect on an unchecked page ships exactly as readily as a defect on a checked one. If a probe is expensive enough that walking 16 pages feels burdensome, the cost is the probe's, not the skill's — propose a faster probe rather than narrowing the coverage.
|
|
@@ -1023,7 +1023,16 @@
|
|
|
1023
1023
|
letter-spacing: 0.01em;
|
|
1024
1024
|
}
|
|
1025
1025
|
.mi-foot {
|
|
1026
|
-
|
|
1026
|
+
/* Absolute positioning — anchored to page bottom so an oversized .mi-grid
|
|
1027
|
+
cannot push the disclaimer into the folio zone. The folio sits at
|
|
1028
|
+
bottom 8mm with ~8mm visible height (occupies 8-16mm from page bottom);
|
|
1029
|
+
this anchor at 22mm leaves a 6mm gap above the folio. Any .mi-grid
|
|
1030
|
+
overflow extends UNDERNEATH this footer (clipped by .page's
|
|
1031
|
+
overflow:hidden at 210mm) without disrupting the chrome layer. */
|
|
1032
|
+
position: absolute;
|
|
1033
|
+
left: 14mm; right: 14mm; bottom: 22mm;
|
|
1034
|
+
background: var(--paper-25);
|
|
1035
|
+
z-index: 3;
|
|
1027
1036
|
padding-top: 14px;
|
|
1028
1037
|
border-top: 1px solid var(--rule);
|
|
1029
1038
|
font-family: var(--serif);
|