@rubytech/create-maxy-code 0.1.97 → 0.1.98

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 (25) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  3. package/payload/platform/plugins/founder-pack/.claude-plugin/plugin.json +8 -0
  4. package/payload/platform/plugins/founder-pack/skills/investor-data-room/SKILL.md +218 -0
  5. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/business-plan-template.md +61 -0
  6. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/compliance-research-checklist.md +53 -0
  7. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/data-room-structure.md +77 -0
  8. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/deck-blueprint-template.md +38 -0
  9. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/design-tokens-application.md +79 -0
  10. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/html-pdf-pipeline.md +236 -0
  11. package/payload/platform/plugins/founder-pack/skills/investor-data-room/references/internal-workings-scrub.md +33 -0
  12. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  13. package/payload/platform/services/claude-session-manager/dist/http-server.js +79 -87
  14. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  15. package/payload/platform/services/claude-session-manager/scripts/stash-cleanup.sh +410 -0
  16. package/payload/premium-plugins/.claude-plugin/marketplace.json +5 -0
  17. package/payload/premium-plugins/founder-pack/.claude-plugin/plugin.json +8 -0
  18. package/payload/premium-plugins/founder-pack/skills/investor-data-room/SKILL.md +218 -0
  19. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/business-plan-template.md +61 -0
  20. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/compliance-research-checklist.md +53 -0
  21. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/data-room-structure.md +77 -0
  22. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/deck-blueprint-template.md +38 -0
  23. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/design-tokens-application.md +79 -0
  24. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/html-pdf-pipeline.md +236 -0
  25. package/payload/premium-plugins/founder-pack/skills/investor-data-room/references/internal-workings-scrub.md +33 -0
@@ -0,0 +1,61 @@
1
+ # Business plan template — 15-section structure
2
+
3
+ The canonical structure used by `01-narrative/business-plan.md`. Every public-facing artefact (deck, prospectus, term sheet) derives from this file. Apply the internal-workings scrub (see `internal-workings-scrub.md`) on every revision.
4
+
5
+ ## Section-by-section skeleton
6
+
7
+ ### 1. Executive Summary
8
+ One paragraph each: what the company is (legal entity + Companies House identifier + substrate description), what is being raised (size, pre-money, post-money, runway, Round 2 follow-on), demand evidence (numbers with dates), market size + structural tailwind, competitive set in three failing categories + the architectural inversion, bottom-line P&L summary.
9
+
10
+ ### 2. Vision and Mission
11
+ Three blocks. **Vision.** Where the company ends up at full execution. **Mission.** What the company gives to its customer day one. **Doctrine.** The structural belief that everything else derives from.
12
+
13
+ ### 3. The Company
14
+ Legal entity table (legal name, Companies House number, incorporation date, registered office, SIC, PSC status, sole proposed director on IN01) + pre-investment cap table (sourced from the IN01 verbatim) + post-investment dilution pointer.
15
+
16
+ ### 4. The Market
17
+ Subsections: Size of the addressable market (TAM with citation per figure); Structural tailwind (margin squeeze, regulatory tailwind, or equivalent); Self-employed wedge or analogous high-growth segment; Domestic adjacency (next-vertical expansion); International upside (channel partner enabling it); Pricing and TAM (per-customer ACV × addressable count = TAM number).
18
+
19
+ ### 5. The Product
20
+ Subsections: What it is (substrate description, CRM-agnostic / data-sovereign positioning); The wedge product (narrowest unit of value, public-by-default if applicable); The upsell path (wedge → high-value output → full substrate); The substrate moat (operator-data + ontological graph + flywheel); Conversation ingestion (or equivalent lock-in mechanic); The network (federation thesis); Asymmetric-capture position (the LLM-binary wrap argument, with commercial-practice insurance); Human-services layer (training, support, white-glove, anti-fragile-against-frontier-AI).
21
+
22
+ ### 6. The Business Model
23
+ Revenue streams (subscription tiers + future network-effect revenue), unit economics (ACV, CAC, gross margin, churn placeholder), compute-mark-up doctrine ("never mark up the LLM compute; customer pays the LLM provider directly").
24
+
25
+ ### 7. Go-to-Market
26
+ Wedge → Beachhead → Blitzscale framework (with months and funding source per phase), demand evidence (40+ EOIs, paid intents, founder dogfood, partnership status — every number cited), GTM partners (one row per named partner with role and source), horse-before-cart logic (public-first wedge that earns trust for the private high-value upsell), geography.
27
+
28
+ ### 8. Competition
29
+ Three failing categories: (a) cloud-CRM-bolted-AI incumbents, (b) horizontal-AI providers inaccessible to ICP, (c) new-build cloud-SaaS replacements requiring full migration. RANL differentiation paragraph. Most-direct-competitor counter (CRM-agnostic vs migration-required is the headline rebuttal).
30
+
31
+ ### 9. Operations
32
+ Technology stack (foundation model, graph store, hardware tiered by workload, network, hosting), data sovereignty paragraph, IP ownership chain (deed-of-assignment commitment), compliance posture operational summary (pointer to Section 10 for full treatment).
33
+
34
+ ### 10. Compliance and regulatory positioning
35
+ Three regulatory regimes: UK consumer protection (DMCC Act for estate agency / equivalent for the vertical), UK data and AI regime (UK GDPR + ICO ADM Articles 22A–22D), EU AI Act (relevant only to international expansion). Adjacent UK obligations (Estate Agents Act / equivalent + AML + sector membership bodies). Closing: "Why compliance is the moat, not the tax".
36
+
37
+ ### 11. Team
38
+ Founders (foregrounded) with role + concise career summary + key credentials + pre-investment shareholding. Strategic shareholders from incorporation (advisors, family, JV partners on the cap table from day one). Hiring plan table with month-triggered roles + salary + trigger condition.
39
+
40
+ ### 12. Financial Plan
41
+ 12.1 Opening balance sheet (M0 after capex). 12.2 Year-1 Income Statement (revenue + COGS + every opex line + depreciation + EBIT + corp tax + net loss). 12.3 Year-1 cash flow summary table (period-by-period opening, net flow, closing cash). 12.4 Closing balance sheet (M12). 12.5 Two-round funding strategy (timing, size, pre-money, purpose, gating evidence per round). 12.6 Contingency levers. 12.7 Use of funds (this round) by bucket.
42
+
43
+ ### 13. Risks and Mitigations
44
+ Two-column table: risk + mitigation. Cover Loop / Anthropic / competitor-ships-earlier / wedge-fails-to-convert / founder-transition / counsel-delays / Round-2-market / investor-structure.
45
+
46
+ ### 14. Milestones (the N-month thesis)
47
+ Month-by-month table: M0 close + closing conditions; M1 first paying customer; M3 product-engineer hire + ~10 customers; M6 wedge phase complete; M7 Round 2 raise opens; M9 Round 2 closes; M12 break-even.
48
+
49
+ ### 15. The bottom line
50
+ Summary table of headline numbers (raise size, pre-money, post-money, dilution, runway, Y1 revenue/loss/cash-burn/closing-cash/ARR, break-even month, Round 2 timing/size). Closing paragraph.
51
+
52
+ ### Appendices
53
+ Cited documents listed by title only. Each available to a serious investor on request; internal-only working documents are not listed.
54
+
55
+ ## Writing rules
56
+
57
+ - **Numbers cite their source.** Every figure in the body links to an Appendix entry that is itself a publicly-shareable document.
58
+ - **No internal commentary.** See `internal-workings-scrub.md`.
59
+ - **No em-dashes between alphabetic words** in user-facing prose. Use colons, parentheses, semicolons, or rewrites.
60
+ - **Even-page-count parity** if the document is printed; add a supporting page if a section change breaks parity.
61
+ - **One pre-investment cap table source: the IN01.** Reconcile the nominal-value discrepancy (e.g. £0.001 vs £0.01) before writing the balance sheet.
@@ -0,0 +1,53 @@
1
+ # Compliance research checklist
2
+
3
+ Required before drafting business plan Section 10 (Compliance and regulatory positioning) for a UK-domiciled raise. Every claim must cite a primary source (ICO guidance, gov.uk, regulator strategy document) verified by WebSearch.
4
+
5
+ ## UK consumer-protection regime
6
+
7
+ **For estate-agency / property:** Digital Markets, Competition and Consumers Act 2024 (DMCC Act). In force from 6 April 2025. Supersedes the Consumer Protection from Unfair Trading Regulations 2008 for estate-agency consumer protection. Under the DMCC Act, **omitting material information is automatically an unfair commercial practice regardless of whether the omission affected the consumer's decision**. CMA holds direct enforcement powers including fines without court process. Property brochures must include Part B material information.
8
+
9
+ **For other verticals:** Identify the equivalent UK consumer-protection regime (financial services → FCA Consumer Duty; healthcare → CQC; legal services → SRA; etc.). Same pattern: cite the binding statute, name the regulator, identify the enforcement mechanism.
10
+
11
+ ## UK data-protection and AI regime
12
+
13
+ - **UK GDPR** sits over UK data processing. Articles 22A to 22D (added by the Data Use and Access Act) govern solely automated decision-making.
14
+ - **No UK AI-specific statute in the 2026 parliamentary session.** Labour's 2024 King's Speech committed to "appropriate legislation on the most powerful AI models" but the Bill has not been introduced. A dedicated 2026 AI Bill is not expected.
15
+ - **ICO strategy.** June 2025 strategy "Preventing Harm, Promoting Trust" frames the regulator's approach. ICO consulting on updated Automated Decision-Making and Profiling guidance during 2025–2026, with a statutory code of practice on AI and ADM in the pipeline. First substantive enforcement guidance expected later in 2026.
16
+ - **UK is not adopting the EU AI Act.** Sector-led approach via existing regulators. Starmer's stated position: *"instead of over-regulating these new technologies, we're seizing the opportunities they offer"*.
17
+
18
+ ## EU AI Act (relevant only to international expansion)
19
+
20
+ - Entered into force 1 August 2024.
21
+ - Fully applicable 2 August 2026.
22
+ - Classifies AI systems used in credit and insurance (which overlap with mortgage and property-financing decisions) as **high-risk**. Most marketing and operational AI applications sit at lower risk tiers.
23
+ - High-risk obligations: risk-management systems, data-quality controls, human oversight, transparency to affected individuals, conformity assessment, post-market monitoring.
24
+ - For UK-domiciled companies, the EU AI Act binds only when serving EU customers. Document the international expansion path and confirm whether any planned product crosses into high-risk territory.
25
+
26
+ ## Adjacent UK obligations to verify per vertical
27
+
28
+ - **Estate Agents Act 1979** for property: distinguish software vendor (out of scope) from estate agent (in scope).
29
+ - **Money Laundering Regulations 2017 + Economic Crime and Corporate Transparency Act 2023** for AML obligations.
30
+ - **PECR (Privacy and Electronic Communications Regulations 2003)** for electronic marketing, cookies, and tracking. Sits alongside UK GDPR. Enforced by ICO with fines up to £500,000.
31
+ - **Sector membership bodies** (NAEA / ARLA Propertymark for property; equivalents per vertical).
32
+ - **Client Money Protection schemes** where the business handles client money.
33
+
34
+ ## WebSearch protocol
35
+
36
+ For each regime, search for:
37
+
38
+ 1. The primary statute / regulation page on gov.uk or the regulator's site.
39
+ 2. A recent (within last 12 months) legal-firm briefing summarising current state.
40
+ 3. The regulator's strategy document.
41
+
42
+ Examples that worked in the reference project:
43
+
44
+ - DMCC Act + Propertymark guidance withdrawal: `https://www.propertymark.co.uk/resource/material-information-guidance-withdrawn-as-the-digital-markets-competition-and-consumers-act-takes-over.html`
45
+ - ICO AI strategy: `https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/artificial-intelligence/guidance-on-ai-and-data-protection/`
46
+ - UK AI Bill status: `https://iapp.org/news/a/king-s-speech-signals-diffuse-uk-digital-policy-agenda-but-no-ai-bill`
47
+ - EU AI Act compliance for UK businesses: `https://www.rmoklegal.com/guides/eu-ai-act-compliance-uk`
48
+
49
+ Cite the actual source URLs in the business plan's reply / Sources block (per the WebSearch tool's mandatory citation rule).
50
+
51
+ ## The closing argument
52
+
53
+ The business plan's Section 10 ends with "Why compliance is the moat, not the tax": cloud-CRM-bolted-AI competitors inherit the vendor's data-protection posture; the product owns the agent's data sovereignty by design, so compliance is a competitive moat (especially into EU markets where the EU AI Act amplifies the cost differential).
@@ -0,0 +1,77 @@
1
+ # Data room structure — graph-structured ten-section layout
2
+
3
+ Standard ten numbered sections plus root README, internal-narrative subdirectory, and an `html/` directory for rendered deliverables. Each section's `README.md` is both an investor-diligence index and a content-recording checklist.
4
+
5
+ ## Section purposes (README skeletons)
6
+
7
+ ### 01-narrative
8
+ **Purpose.** Strategic substance the prospectus, business plan, term sheet, and any future investor-facing material derive from. Internal scratchpad lives here too.
9
+
10
+ **Currently present.**
11
+ - `office-hours-design.md` — APPROVED office-hours output (internal).
12
+ - `business-plan.md` — 15-section public business plan.
13
+ - `deck-blueprint.md` — 12-slide brief.
14
+
15
+ ### 02-corporate-legal
16
+ **Purpose.** Statutory documentation. First section any investor's lawyer asks for.
17
+
18
+ **Standard contents.** Certificate of incorporation, IN01 application, articles of association, shareholder agreement, board resolutions, register of members, register of directors and PSCs.
19
+
20
+ ### 03-cap-table
21
+ **Purpose.** Who owns what, before and after the round. Most-scrutinised number in seed-stage diligence.
22
+
23
+ **Standard contents.** Pre-investment cap table (per IN01), post-investment cap table (with dilution math), fully-diluted including option pool, founder vesting schedule (if any), share register, subscription letters.
24
+
25
+ ### 04-financials
26
+ **Purpose.** The investability of the raise: runway, burn, revenue ramp, break-even, contingency.
27
+
28
+ **Standard contents.** `model_worksheet.md` (opening cash, capex, monthly burn, MRR ramp, two-round funding strategy, contingency levers), historical accounts (if any), bank statements, unit economics, VAT status.
29
+
30
+ ### 05-commercial
31
+ **Purpose.** Customer pipeline, demand evidence, GTM partners, route-to-revenue.
32
+
33
+ **Standard contents.** `demand-evidence.md`, named-partner files (one per partner — e.g. `kerfuffle.md`, `magnetic-bd.md` with companion proposal PDF), `pipeline.md`, pricing schedule, sales playbook, customer references.
34
+
35
+ ### 06-product-ip
36
+ **Purpose.** What investors are buying — architecture, code, brand, data, IP ownership chain.
37
+
38
+ **Standard contents.** Deed of assignment (IP transfer to the raising entity), trademark filings, domain inventory, OSS manifest, security posture, privacy policy, terms of service, third-party dependency disclosures, disaster-recovery plan, optional architecture notes (e.g. `encrypted-document-sharing.md`).
39
+
40
+ ### 07-team
41
+ **Purpose.** Who is executing, in what capacity, with what compensation.
42
+
43
+ **Standard contents.** Founder CVs (one PDF per foregrounded founder, named `<firstname>-<lastname>.pdf`), employment agreements, director service agreements, advisor agreements, org chart, hiring plan, compensation philosophy, references.
44
+
45
+ ### 08-market
46
+ **Purpose.** Size of the prize, shape of demand, competitive landscape. Every market figure in the business plan must trace to a row in this section.
47
+
48
+ **Standard contents.** `sources.md` (every figure with citation), `competitor-value-claims-rebuttal.md` (vendor-by-vendor rebuttal framework), TAM/SAM/SOM file, customer-segmentation analysis, regulatory landscape, international-expansion potential.
49
+
50
+ ### 09-operations
51
+ **Purpose.** Day-to-day regulatory, compliance, and operational infrastructure.
52
+
53
+ **Standard contents.** ICO registration, DPIA, data processing agreements, privacy notice, insurance pack (PI, public liability, cyber, D&O, employer's), HMRC registrations (corporation tax, PAYE, VAT, R&D), AML policy, code of conduct, business bank account, accountant retainer, registered office services.
54
+
55
+ ### 10-supporting
56
+ **Purpose.** Everything that adds weight to the pitch but does not belong in a structured section. Press, references, brand assets, advisor letters, demo recordings, pitch decks.
57
+
58
+ **Standard contents.** Press kit, pitch deck (live presentation version), demo recording, reference contacts, advisor letters, awards, published thought leadership.
59
+
60
+ ## Top-level README.md doubles as data-room index
61
+
62
+ Three things at the root:
63
+
64
+ 1. **Company identity table** — legal name, Companies House number, incorporation date, registered office, SIC code.
65
+ 2. **Top-level files** (any published artefacts that need a stable URL — e.g. `index.html` and `prospectus.pdf` if the directory itself is served).
66
+ 3. **Section index** with status snapshot (substantively populated / has key item missing / empty placeholder).
67
+
68
+ ## Naming conventions
69
+
70
+ - Companies House filings: `incorporation-<co-house-no>-<YYYY-MM-DD>.pdf`.
71
+ - Founder CVs: `<firstname>-<lastname>.pdf`.
72
+ - Commercial partners: `<partner-name>.md` + `<partner-name>-proposal-<id>-<date>.pdf`.
73
+ - All section READMEs are lowercase markdown.
74
+
75
+ ## Published-URL stability
76
+
77
+ If the data room hosts a public prospectus (e.g. `realagent.chat/sites/<slug>/`), keep the published path stable across renames. The published HTML lives at `html/<artefact>/index.html` inside the data room and republishes from there to the stable URL.
@@ -0,0 +1,38 @@
1
+ # Deck blueprint template — 12 slides
2
+
3
+ Each slide is specified by Purpose, Headline (one-line message), Body (bullets + figures pulled from the business plan), Visual suggestion, and Source reference. The deck is the presentation surface; the business plan is the source of truth.
4
+
5
+ ## 12-slide layout
6
+
7
+ | # | Slide | What it lands |
8
+ |---|---|---|
9
+ | 1 | Cover | Company name, raise headline, three foregrounded founders, Companies House identifier. |
10
+ | 2 | Vision | Vision / Mission / Doctrine triad. |
11
+ | 3 | The Market | TAM with citation, structural tailwind (margin-squeeze / regulatory / equivalent), self-employed or analogous wedge, domestic adjacency, international upside, pricing band. |
12
+ | 4 | Business Model | Subscription tiers + hardware + service layer + future network-effect revenue + unit economics + compute-no-markup doctrine. |
13
+ | 5 | Go-to-Market | Wedge → Beachhead → Blitzscale framework, demand evidence numbers, named GTM partners, horse-before-cart logic. |
14
+ | 6 | The Product | Substrate description, wedge, upsell path, substrate moat, conversation ingestion, network, asymmetric capture, services layer. |
15
+ | 7 | Competition | Three failing categories + most-direct-competitor counter (CRM-agnostic vs migration-required). |
16
+ | 8 | The Team | Founders + strategic shareholders, with one-line credential per person and shareholding %. |
17
+ | 9 | Economics | Y1 revenue, P&L loss, cash burn, M11 cash low, M12 closing cash, closing ARR, break-even month. Two-panel chart: MRR ramp with burn overlay + monthly cash balance. |
18
+ | 10 | The Raise | Size, pre-money, post-money, dilution, instrument, use of funds, IP transfer at close, Round 2 size + timing, pre-emption. Pie chart of post-investment cap table. |
19
+ | 11 | Milestones | M0 to M-final timeline with MRR curve and Round-1 / Round-2 close markers. |
20
+ | 12 | Other Information | Compliance (DMCC + UK ICO + EU AI Act), platform-dependency disclosure with the commercial-practice-insurance answer, contact card (founders + email + web). |
21
+
22
+ ## Production notes attached to the blueprint
23
+
24
+ - **Format.** 16:9 landscape, A4-or-equivalent print-safe. PDF deliverable + source deck file (PowerPoint or Keynote, founder preference).
25
+ - **Font and colour.** Apply the project's design tokens (`<project-site>/.docs/design-tokens.md`) — teal-ink + gold-accent + paper-surface + slate-text + champagne rule. Tier 1 raw tokens; reference Tier 2 aliases in component CSS, never raw hex.
26
+ - **Charts.** Build in the same renderer the prospectus uses so figures match the financial model. Source all numbers from `04-financials/model_worksheet.md`.
27
+ - **Logo and hero.** Reuse white-mono icon for dark slides, dark icon for light slides.
28
+ - **Internal commentary.** Zero. Every slide carries the current position as a fact. No "open items", no "pending rebuild", no "reconciliation paths". See `internal-workings-scrub.md`.
29
+ - **Speaker notes.** One paragraph per slide. The founder of the relevant function writes their own (technical founder writes the vision and product notes; commercial founder writes the GTM note; operator founder writes the team note).
30
+
31
+ ## Deliverables
32
+
33
+ Once the deck is designed, archive at:
34
+
35
+ - `<data-room>/10-supporting/investor-deck.pptx` (or `.key`)
36
+ - `<data-room>/10-supporting/investor-deck.pdf`
37
+
38
+ The blueprint file (`01-narrative/deck-blueprint.md`) stays as the brief for any future redesign.
@@ -0,0 +1,79 @@
1
+ # Design tokens application
2
+
3
+ How a print-ready HTML artefact consumes the project's design-tokens spec.
4
+
5
+ ## Source of truth
6
+
7
+ Project keeps `<project-site>/.docs/design-tokens.md` as the canonical tokens spec. Three tiers:
8
+
9
+ - **Tier 1 — Global tokens.** Raw hex values (e.g. `--teal-900: #0E1418`). Never reference directly from a component.
10
+ - **Tier 2 — Semantic aliases.** Maps Tier 1 to roles (e.g. `--text-primary: var(--teal-900)`).
11
+ - **Tier 3 — Component tokens.** Per-component variables that reference Tier 2 aliases.
12
+
13
+ Components consume Tier 2 or Tier 3, never Tier 1 directly. This isolation lets a token-value update propagate without touching component CSS.
14
+
15
+ ## Premium register defaults (the reference project)
16
+
17
+ | Token | Value | Role |
18
+ |---|---|---|
19
+ | `--teal-900` | `#0E1418` | Primary ink |
20
+ | `--teal-950` | `#06080A` | Deepest dark surface |
21
+ | `--teal-700` | `#2A3036` | Secondary ink |
22
+ | `--gold-300` | `#C9B07A` | Champagne flourish |
23
+ | `--gold-500` | `#A4884C` | Antique gold rule |
24
+ | `--gold-700` | `#7A6235` | Bronze accent |
25
+ | `--paper-0` | `#FFFFFF` | Pure white (elevated cards) |
26
+ | `--paper-25` | `#FBFAF6` | Near-white page surface (default) |
27
+ | `--paper-50` | `#F4EFE5` | One step warmer |
28
+ | `--paper-100` | `#ECF1F2` | Cool mist (callout / tinted-band surface) |
29
+ | `--slate-400` | `#8A8E96` | Tertiary text |
30
+ | `--slate-600` | `#5C6470` | Secondary text |
31
+ | `--rule-fine` | `#E2D5BD` | Champagne sand divider |
32
+
33
+ ## Tier 2 aliases
34
+
35
+ ```css
36
+ --surface-page: var(--paper-25); /* default page background */
37
+ --surface-elevated: var(--paper-0); /* cards, panels */
38
+ --surface-warm: var(--paper-100); /* tinted band; in premium register this is cool mist */
39
+ --surface-deep: var(--teal-950); /* full-bleed dark sections */
40
+ --text-primary: var(--teal-900);
41
+ --text-secondary: var(--slate-600);
42
+ --text-tertiary: var(--slate-400);
43
+ --text-on-deep: var(--paper-25);
44
+ --text-accent: var(--gold-700);
45
+ --text-accent-on-deep: var(--gold-300);
46
+ --border-fine: var(--rule-fine);
47
+ --border-accent: var(--gold-500);
48
+ --font-display: var(--serif); /* Cormorant Garamond */
49
+ --font-editorial: var(--body-serif); /* Lora */
50
+ --font-ui: var(--sans); /* Inter */
51
+ ```
52
+
53
+ ## Hard rules
54
+
55
+ - **Never hard-code a hex value inside component CSS.** Audit by `grep -E '#[0-9A-Fa-f]{3,6}' <artefact>/index.html` — every match must be inside the `:root` block.
56
+ - **Page background is `--paper-25`, never pure `#FFFFFF`.** Pure white is reserved for elevated cards (`--surface-elevated`).
57
+ - **Gold is reserved for accent, never primary CTA.** Primary action buttons sit on `--teal-900` with `--gold-700` hover.
58
+ - **All-caps eyebrows always use `--font-ui` + letter-spacing ≥ 0.24em.**
59
+ - **Cool mist (`--paper-100 #ECF1F2`) replaced warm cream (`#EFE7D8`) in the premium register.** Tinted bands / callouts read as pale steely blue, not light brown.
60
+
61
+ ## When the user says "I don't like this colour"
62
+
63
+ The pattern from the reference project: the user identifies a token whose value is off. The fix is:
64
+
65
+ 1. Update the value in `<project-site>/.docs/design-tokens.md` Tier 1 table.
66
+ 2. Mirror the value in every consuming artefact's `:root` block (business plan HTML, prospectus HTML, deck HTML).
67
+ 3. Re-render PDFs.
68
+
69
+ Keep the token NAMES stable. Updating values is non-breaking; renaming is.
70
+
71
+ ## Logo assets
72
+
73
+ Project ships icon variants in `<project-site>/public/<brand>/`:
74
+
75
+ - White-mono variant for dark backgrounds (cover, backpage).
76
+ - Dark variant for light content pages.
77
+ - Colour variant for general use.
78
+
79
+ Copy the needed variants into the artefact directory (e.g. `html/business-plan/logo-light.png`) for relative-path reference inside the HTML.
@@ -0,0 +1,236 @@
1
+ # HTML + PDF render pipeline
2
+
3
+ Image-only A4 portrait PDF, rendered from a single HTML file via Playwright + img2pdf + qpdf. Mirrors the constraints in the `property-brochure:a4-print-documents` skill.
4
+
5
+ ## File layout per artefact
6
+
7
+ ```
8
+ html/<artefact>/
9
+ index.html # source of truth
10
+ render-pdf.mjs # Playwright pipeline
11
+ <artefact>.pdf # rendered output
12
+ logo-light.png # for dark cover/backpage
13
+ logo-dark.png # for light content pages (optional)
14
+ README.md # render + verify commands, page list
15
+ ```
16
+
17
+ ## HTML scaffold (key blocks)
18
+
19
+ ```html
20
+ <!DOCTYPE html>
21
+ <html lang="en-GB">
22
+ <head>
23
+ <meta charset="UTF-8">
24
+ <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Inter:wght@400;500;600;700&family=Lora:ital,wght@0,400;0,500;0,600;1,400&display=swap" rel="stylesheet">
25
+ <style>
26
+ /* Tier 1 + Tier 2 design tokens from project's design-tokens.md */
27
+ :root {
28
+ --teal-900: #0E1418;
29
+ --teal-950: #06080A;
30
+ --gold-500: #A4884C;
31
+ --gold-300: #C9B07A;
32
+ --gold-700: #7A6235;
33
+ --paper-0: #FFFFFF;
34
+ --paper-25: #FBFAF6;
35
+ --paper-100: #ECF1F2;
36
+ --slate-400: #8A8E96;
37
+ --slate-600: #5C6470;
38
+ --rule-fine: #E2D5BD;
39
+ --serif: 'Cormorant Garamond', serif;
40
+ --body-serif: 'Lora', Georgia, serif;
41
+ --sans: 'Inter', sans-serif;
42
+ --surface-page: var(--paper-25);
43
+ --surface-deep: var(--teal-950);
44
+ --text-primary: var(--teal-900);
45
+ --text-on-deep: var(--paper-25);
46
+ --text-accent: var(--gold-700);
47
+ --text-accent-on-deep: var(--gold-300);
48
+ }
49
+
50
+ @page { size: A4 portrait; margin: 18mm 16mm 20mm; }
51
+ @page :first { margin: 0; }
52
+ @page backpage-full { margin: 0; }
53
+
54
+ body {
55
+ margin: 0;
56
+ background: var(--surface-page);
57
+ color: var(--text-primary);
58
+ font-family: var(--body-serif);
59
+ font-size: 11pt;
60
+ line-height: 1.55;
61
+ counter-reset: pagenum;
62
+ }
63
+
64
+ .page {
65
+ counter-increment: pagenum;
66
+ position: relative;
67
+ }
68
+ .page:not(.page--cover):not(.page--backpage)::after {
69
+ content: counter(pagenum);
70
+ position: absolute;
71
+ bottom: 10mm;
72
+ right: 16mm;
73
+ font-family: var(--sans);
74
+ font-size: 9pt;
75
+ letter-spacing: 0.28em;
76
+ color: var(--slate-400);
77
+ }
78
+ .page:not(.page--cover):not(.page--backpage)::before {
79
+ content: "REAL AGENT NETWORK LIMITED · BUSINESS PLAN · v1.0";
80
+ position: absolute;
81
+ bottom: 10mm;
82
+ left: 16mm;
83
+ font-family: var(--sans);
84
+ font-size: 7pt;
85
+ letter-spacing: 0.24em;
86
+ color: var(--slate-400);
87
+ }
88
+
89
+ @media screen {
90
+ body { background: #FFFFFF; padding: 24px; }
91
+ .page {
92
+ width: 210mm; min-height: 297mm;
93
+ margin: 20px auto; padding: 18mm 16mm 20mm;
94
+ background: var(--surface-page);
95
+ box-shadow: 0 4px 28px rgba(0,0,0,0.14);
96
+ }
97
+ .page--cover, .page--backpage { padding: 0; overflow: hidden; }
98
+ }
99
+
100
+ @media print {
101
+ body { background: var(--surface-page); padding: 0; }
102
+ .page { page-break-after: always; padding: 0; }
103
+ .page--cover, .page--backpage {
104
+ margin: 0; width: auto; box-shadow: none;
105
+ height: 100vh; position: relative; overflow: hidden;
106
+ -webkit-print-color-adjust: exact;
107
+ print-color-adjust: exact;
108
+ }
109
+ .page--backpage { page-break-before: always; page: backpage-full; }
110
+ .download-btn { display: none !important; }
111
+ }
112
+
113
+ .download-btn {
114
+ position: fixed; top: 20px; right: 20px; z-index: 100;
115
+ font-family: var(--sans); font-size: 9pt; letter-spacing: 0.28em;
116
+ text-transform: uppercase; color: var(--paper-0);
117
+ background: var(--teal-900); padding: 11px 18px 12px;
118
+ border-radius: 9999px; text-decoration: none;
119
+ box-shadow: 0 4px 16px rgba(14, 20, 24, 0.18);
120
+ }
121
+ .download-btn:hover { background: var(--gold-700); }
122
+ </style>
123
+ </head>
124
+ <body>
125
+ <a class="download-btn" href="<artefact>.pdf" download>Download PDF</a>
126
+
127
+ <section class="page page--cover" data-screen-label="cover"> ... </section>
128
+ <section class="page" data-screen-label="exec-summary"> ... </section>
129
+ <!-- ... one <section class="page"> per A4 page ... -->
130
+ <section class="page page--backpage" data-screen-label="backpage"> ... </section>
131
+ </body>
132
+ </html>
133
+ ```
134
+
135
+ ## render-pdf.mjs (canonical)
136
+
137
+ ```javascript
138
+ #!/usr/bin/env node
139
+ import { chromium } from 'playwright';
140
+ import { execFileSync } from 'node:child_process';
141
+ import { mkdirSync, rmSync, existsSync } from 'node:fs';
142
+ import { dirname, basename, join, resolve, extname } from 'node:path';
143
+ import { pathToFileURL } from 'node:url';
144
+
145
+ const [, , htmlInput, pdfOutput] = process.argv;
146
+ if (!htmlInput || !pdfOutput) {
147
+ console.error('Usage: render-pdf.mjs <input.html> <output.pdf>');
148
+ process.exit(64);
149
+ }
150
+
151
+ const htmlPath = resolve(htmlInput);
152
+ const pdfPath = resolve(pdfOutput);
153
+ const tmpDir = resolve(dirname(pdfPath), `.tmp-${basename(pdfPath, extname(pdfPath))}`);
154
+ rmSync(tmpDir, { recursive: true, force: true });
155
+ mkdirSync(tmpDir, { recursive: true });
156
+
157
+ const VIEWPORT_W = 794; // A4 portrait at 96 dpi
158
+ const VIEWPORT_H = 1123;
159
+ const SCALE = 3.125; // → 300 dpi PNGs
160
+ const A4_HEIGHT_PX_SLACK = VIEWPORT_H + 2;
161
+
162
+ (async () => {
163
+ const browser = await chromium.launch();
164
+ const context = await browser.newContext({
165
+ viewport: { width: VIEWPORT_W, height: VIEWPORT_H },
166
+ deviceScaleFactor: SCALE,
167
+ });
168
+ const page = await context.newPage();
169
+
170
+ await page.goto(pathToFileURL(htmlPath).toString(), { waitUntil: 'networkidle' });
171
+ await page.emulateMedia({ media: 'print' });
172
+ await page.evaluate(() => document.fonts ? document.fonts.ready : Promise.resolve());
173
+ await page.evaluate(() => { document.body.style.padding = '0'; });
174
+
175
+ const sections = await page.$$('section.page');
176
+ if (sections.length === 0) {
177
+ console.error('No <section class="page"> elements found.');
178
+ process.exit(65);
179
+ }
180
+
181
+ const pngFiles = [];
182
+ let overflow = false;
183
+
184
+ for (let i = 0; i < sections.length; i++) {
185
+ const section = sections[i];
186
+ const label = await section.getAttribute('data-screen-label') || `page${i + 1}`;
187
+ const scrollHeight = await section.evaluate(el => el.scrollHeight);
188
+ if (scrollHeight > A4_HEIGHT_PX_SLACK) {
189
+ console.error(`[OVERFLOW] page ${i + 1} (${label}): ${scrollHeight}px > A4 + 2px slack`);
190
+ overflow = true;
191
+ }
192
+ const outPath = join(tmpDir, `page-${String(i + 1).padStart(2, '0')}-${label}.png`);
193
+ await section.scrollIntoViewIfNeeded();
194
+ await section.screenshot({ path: outPath, type: 'png' });
195
+ pngFiles.push(outPath);
196
+ }
197
+
198
+ await browser.close();
199
+ if (overflow) {
200
+ console.error('Overflow detected. Aborting.');
201
+ process.exit(4);
202
+ }
203
+
204
+ const preLinearize = join(tmpDir, 'pre-linearize.pdf');
205
+ execFileSync('img2pdf', ['--pagesize', '210mmx297mm', '--output', preLinearize, ...pngFiles], { stdio: 'inherit' });
206
+ execFileSync('qpdf', ['--linearize', '--object-streams=disable', preLinearize, pdfPath], { stdio: 'inherit' });
207
+
208
+ console.log(`✓ PDF written: ${pdfPath}`);
209
+ })();
210
+ ```
211
+
212
+ ## Verification
213
+
214
+ After every render:
215
+
216
+ ```sh
217
+ qpdf --check <artefact>.pdf # → "No syntax or stream encoding errors found"
218
+ pdfinfo <artefact>.pdf | grep -E "Pages|Optimized" # → confirms page count + linearization
219
+ ```
220
+
221
+ Then **read every page visually**. `pdfinfo` reporting "25 pages, A4" is not verification.
222
+
223
+ ## Dependencies
224
+
225
+ ```sh
226
+ npm i -D playwright && npx playwright install chromium
227
+ brew install img2pdf qpdf
228
+ ```
229
+
230
+ ## Hard rules
231
+
232
+ - One `<section class="page">` per A4 page. Renderer aborts (exit 4) on overflow.
233
+ - `execFileSync` (never `execSync` with template strings).
234
+ - Cover and backpage are full-bleed dark teal (`--surface-deep`); skip page numbers and running footer via `:not(.page--cover):not(.page--backpage)` selectors on the page-counter pseudo-elements.
235
+ - Even page count for booklet binding (multiple of 4 ideal).
236
+ - Logo: copy the white-mono icon variant as `logo-light.png` for dark cover/backpage; copy the dark icon variant as `logo-dark.png` if used on light content pages.
@@ -0,0 +1,33 @@
1
+ # Internal-workings scrub — public-vs-internal doctrine
2
+
3
+ Public-facing documents (business plan, prospectus, deck, term sheet, anything the investor reads) state the **current position** only. The journey to that position, the reasoning behind it, comparisons against prior baselines, open items still being reconciled, and cross-references to internal sections all stay in working documents in the data-room's internal sections.
4
+
5
+ ## Patterns that must NOT appear in public docs
6
+
7
+ - **Comparison to baseline / prior version.** *"The loss has grown from -£282.6k to -£323.1k because…"*, *"Total opex (M0 customer-success hire adds £40,500 vs the M10 model worksheet baseline)"*.
8
+ - **Process commentary.** *"Numbers below use the model's published figures pending the reconciled rebuild"*, *"reconciliation pending"*, *"open item, not actioned here"*, *"see Section X critical note and Section Y contingency levers for the reconciliation paths"*.
9
+ - **Internal cross-references to scaffolding.** *"see Section 12.3 critical note"*, *"see Section 12.6 contingency levers"* when the linked content itself is process-talk rather than substance.
10
+ - **Discrepancy resolution narratives.** *"The earlier '£0.01 vs £0.001 nominal' note is resolved by treating the £4,500 as share premium"*.
11
+ - **"Open Q" or "Open item" markers in body text.** Belongs in section READMEs and the office-hours design doc only.
12
+ - **Date-coded internal designs.** *"2026-04-22 design"*, *"office-hours design doc"*, *"model worksheet (Appendix A) needs a rebuild"*.
13
+ - **"Pre-contingency-lever activation" / "once X is included" hedges in summary tables.**
14
+ - **Explanatory parentheticals that name the process.** *"(M10-trigger model did not carry)"* is process commentary and must go.
15
+
16
+ ## What IS acceptable in a public-facing document
17
+
18
+ - The current position, stated as a fact.
19
+ - A footnote citing a source (Companies House, IBISWorld, ICO, etc.) when the figure derives from public data.
20
+ - A pointer to a public appendix (titled documents only; not internal-section READMEs).
21
+ - Conditions on a forecast figure that an investor needs to know (e.g. "assuming Round 2 closes at M9-M10").
22
+
23
+ ## The same content, internal vs public
24
+
25
+ | Internal version (working doc) | Public version (business plan) |
26
+ |---|---|
27
+ | Total operating expenses ~£649,100 (M0 customer-success hire adds £40,500 vs the M10 model worksheet baseline). | Total operating expenses ~£649,100. |
28
+ | Year-1 P&L loss has grown from -£282.6k to -£323.1k because the customer-success hire is brought forward from M10 to M0. | Year-1 P&L loss is approximately £323k against revenue of £356k. |
29
+ | Cash crosses zero at M8–M9 if Round 2 does not close; the model worksheet's M11 £34k cash low arrives roughly two months earlier under the M0 CS hire structure. | The raise is sized to deliver the Round 2 gating milestones; Round 2 closes at M9 to M10. |
30
+
31
+ ## Recurrence is a P0 violation
32
+
33
+ In the reference project this rule was violated three times in one session (initial draft used a dated internal design reference; appendix table referenced internal-only documents alongside externally-shareable ones; M0 customer-success hire updates added "model worksheet baseline" comparisons). The pattern: every time the founder adds content or asks for an update, the temptation is to include "what changed and why" alongside the new value. The temptation must be resisted; the public document carries only the new value. The "what changed and why" goes in a sibling internal document if it needs to live somewhere.