Audit report template
A security assessment report in one HTML file – executive summary with severity counts, scope and method, findings with evidence and fixes, a 30-day plan, and an appendix. Duplicate it, or hand the prompt to your agent.
Template
A quarterly board update in one HTML page – headline numbers, what went well and what did not, a revenue chart, hiring and risk tables, and the decisions you need. Duplicate it, or hand the prompt to your agent.
Publishing this from your own stack? See Display for AI reports.
Preview
board-update.html<!doctype html>
<!-- Template: Board update. Replace the sample content and keep the structure. Sections: Header and document details, The quarter in four numbers (headline figures + revenue chart), What went well, What did not, What we are changing, People, Risks, Asks of the board (three decisions + summary table), Footer. -->
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light">
<title>Q3 2026 board update – Halden Bikes</title>
<meta name="description" content="Halden Bikes board update for the third quarter of 2026: revenue, margin, units, runway, what changed, and three decisions for the 14 October board meeting.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Archivo+Black&family=Archivo:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root{
--bg: oklch(0.95 0.08 90);
--bg-deep: oklch(0.89 0.11 88);
--ochre: oklch(0.60 0.11 78);
--ink: oklch(0.18 0.012 80);
--ink-2: oklch(0.42 0.025 80);
--on-ink: oklch(0.95 0.08 90);
--on-ink-2: oklch(0.82 0.07 90);
--display: "Archivo Black", "Arial Black", ui-sans-serif, sans-serif;
--text: Archivo, ui-sans-serif, sans-serif;
--rule-thick: 6px;
--rule: 2px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
margin:0;
background:var(--bg);
color:var(--ink);
font-family:Archivo, ui-sans-serif, sans-serif;
font-size:1rem;
line-height:1.55;
}
.wrap{max-width:64rem;margin-inline:auto;padding-inline:1rem}
@media (min-width:52rem){.wrap{padding-inline:2.5rem}}
p{margin:0 0 1rem}
strong{font-weight:600}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* Header */
.top{padding-top:1.5rem}
.brand{
display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:.5rem 1.5rem;
border-bottom:var(--rule-thick) solid var(--ink);padding-bottom:.75rem;
}
.wordmark{font-family:var(--display);font-size:1.5rem;letter-spacing:-0.02em;text-transform:uppercase;line-height:1}
.brand-line{font-size:.9375rem;color:var(--ink-2);font-weight:500}
h1{
font-family:var(--display);font-weight:400;
font-size:clamp(2.5rem, 1.6rem + 4.2vw, 4rem);
line-height:.98;letter-spacing:-0.02em;margin:1.75rem 0 1rem;max-width:14ch;
}
.standfirst{
font-size:clamp(1.125rem, 1rem + .6vw, 1.375rem);line-height:1.4;font-weight:500;
max-width:34em;margin:0 0 1.75rem;
}
.doc-info{
display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1.5rem;margin:0;
padding:1rem 0 1.25rem;border-top:var(--rule) solid var(--ink);border-bottom:var(--rule) solid var(--ink);
font-size:.9375rem;
}
@media (min-width:52rem){.doc-info{grid-template-columns:repeat(4,minmax(0,1fr))}}
.doc-info dt{color:var(--ink-2);margin:0;font-weight:500}
.doc-info dd{margin:0;font-weight:600}
/* Section rhythm: heading in the margin, body on the right */
.sec{display:grid;gap:1rem;border-top:var(--rule-thick) solid var(--ink);padding:1.25rem 0 1.5rem;margin-top:.75rem}
@media (min-width:52rem){.sec{grid-template-columns:13rem minmax(0,1fr);gap:1rem 3rem;padding-top:1.5rem}}
.sec h2,.asks h2{
font-family:var(--display);font-weight:400;
font-size:clamp(1.5rem, 1.25rem + 1vw, 1.9rem);
line-height:1.05;letter-spacing:-0.02em;margin:0;
}
.sec>*,.asks .wrap>*,.ledger>*,.chart>*,.sec-body{min-width:0}
.sec-body>:first-child{margin-top:0}
.sec-body>:last-child{margin-bottom:0}
.pair{display:grid}
@media (min-width:52rem){.pair{grid-template-columns:1fr 1fr;gap:0 3rem}.pair .sec{grid-template-columns:minmax(0,1fr);gap:1rem;align-content:start}}
/* Headline numbers */
.figures{margin-top:2.5rem}
.figures h2,.ledger{grid-column:1 / -1}
.ledger{
display:grid;
border-top:var(--rule-thick) solid var(--ink);border-bottom:var(--rule-thick) solid var(--ink);
font-feature-settings:"tnum" 1;
}
@media (min-width:52rem){.ledger{grid-template-columns:1.1fr 1fr}}
.ledger-lead{padding:1.25rem 0 1.5rem;border-bottom:var(--rule) solid var(--ink)}
@media (min-width:52rem){.ledger-lead{border-bottom:0;border-right:var(--rule) solid var(--ink);padding-right:2rem}}
.fig-row{padding:1rem 0;border-bottom:var(--rule) solid var(--ink)}
.fig-row:last-child{border-bottom:0}
@media (min-width:52rem){.fig-row{padding:1rem 0 1rem 2rem}}
.fig-label{margin:0;font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2)}
.fig-value{
font-family:var(--display);font-size:clamp(4.75rem, 2rem + 7.5vw, 7.5rem);
line-height:.95;letter-spacing:-0.03em;margin:.35rem 0 .6rem;
}
.fig-delta{font-family:var(--display);font-size:1.375rem;margin:0;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;line-height:1.2}
.fig-delta small{font-family:var(--text);font-weight:500;font-size:1rem;color:var(--ink-2)}
.fig-note{margin:.5rem 0 0;color:var(--ink-2);font-size:.9375rem;max-width:30em;line-height:1.45}
.fig-line{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;margin:.2rem 0 .1rem}
.fig-value-s{font-family:var(--display);font-size:clamp(2.25rem, 1.75rem + 1.6vw, 3rem);line-height:1;letter-spacing:-0.02em;margin:0}
.fig-delta-s{font-family:var(--display);font-size:1.125rem;margin:0;display:inline-flex;align-items:center;gap:.35rem}
.fig-delta-s small{font-family:var(--text);font-weight:500;font-size:.9375rem;color:var(--ink-2)}
.up{width:.7em;height:.7em;fill:currentColor;flex:none}
/* Revenue chart */
.chart{grid-column:1 / -1;margin:1.75rem 0 0;display:grid;gap:1rem}
@media (min-width:52rem){.chart{grid-template-columns:13rem minmax(0,1fr);gap:1rem 3rem;align-items:start}.chart figcaption{order:-1;padding-top:.35rem}}
.chart svg{width:100%;height:auto;display:block;color:var(--ink);font-family:var(--text);font-feature-settings:"tnum" 1}
.chart text{fill:var(--ink)}
.chart .muted{fill:var(--ink-2)}
.chart .past{fill:var(--ochre)}
.chart .now{fill:var(--ink)}
.chart .d{font-family:var(--display)}
.chart .row-label{font-size:13px;text-transform:uppercase;letter-spacing:.08em;font-weight:600;fill:var(--ink-2)}
.chart figcaption{font-size:.9375rem;line-height:1.5;color:var(--ink-2);margin:0}
.chart figcaption strong{color:var(--ink);font-weight:600;display:block;margin-bottom:.25rem}
.legend{display:flex;gap:1rem;margin-top:.75rem;font-size:.8125rem;color:var(--ink)}
.legend span::before{content:"";display:inline-block;width:.75em;height:.75em;margin-right:.4em;vertical-align:-.05em}
.legend .l-past::before{background:var(--ochre)}
.legend .l-now::before{background:var(--ink)}
/* Numbered points */
.points{list-style:none;margin:0;padding:0;counter-reset:pt}
.points li{position:relative;padding-left:2.75rem;margin:0 0 1rem;counter-increment:pt}
.points li:last-child{margin-bottom:0}
.points li::before{content:counter(pt);position:absolute;left:0;top:.05em;font-family:var(--display);font-size:1.5rem;line-height:1}
.points p{margin:0}
.points,.sec-body>p,.decisions p{max-width:40em}
/* Tables */
table{width:100%;border-collapse:collapse;font-size:.9375rem;font-feature-settings:"tnum" 1}
caption{text-align:left;font-size:.875rem;color:var(--ink-2);padding:0 0 .5rem}
th,td{text-align:left;vertical-align:top;padding:.65rem 1rem .65rem 0;border-bottom:1px solid var(--ink);line-height:1.45}
th:last-child,td:last-child{padding-right:0}
thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;font-weight:600;color:var(--ink-2);border-bottom:var(--rule) solid var(--ink);padding-top:0}
tbody th{font-weight:600}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.risks table{min-width:40rem}
.col-r{width:26%}
.col-l{width:6.5rem}
.col-o{width:10rem}
/* Asks: the closing band */
.asks{background:var(--ink);color:var(--on-ink);margin-top:1rem;padding:2.25rem 0 2.5rem}
.asks .wrap{display:grid;gap:1.25rem}
@media (min-width:52rem){.asks .wrap{grid-template-columns:13rem minmax(0,1fr);gap:1rem 3rem}}
.asks p{color:var(--on-ink-2)}
.asks .lede{color:var(--on-ink);font-size:1.125rem;font-weight:500;margin-top:0}
.decisions{list-style:none;margin:1.5rem 0 0;padding:0;counter-reset:dc;border-top:var(--rule) solid var(--on-ink)}
.decisions li{counter-increment:dc;display:grid;grid-template-columns:3.25rem minmax(0,1fr);border-bottom:var(--rule) solid var(--on-ink);padding:1.25rem 0}
.decisions li::before{content:counter(dc);font-family:var(--display);font-size:2.5rem;line-height:.9;color:var(--on-ink)}
.decisions h3{font-family:var(--display);font-weight:400;font-size:1.2rem;line-height:1.25;margin:0 0 .5rem;letter-spacing:-0.01em}
.decisions p{margin:0 0 .5rem}
.decisions p:last-child{margin-bottom:0}
.decisions p strong{color:var(--on-ink);font-weight:600}
.asks .table-scroll{margin-top:2rem}
.on-ink{min-width:30rem}
.on-ink caption{color:var(--on-ink-2)}
.on-ink th,.on-ink td{border-bottom-color:var(--on-ink)}
.on-ink thead th{color:var(--on-ink-2);border-bottom-color:var(--on-ink)}
.on-ink tbody td{color:var(--on-ink-2)}
.on-ink tbody th,.on-ink tbody td.rec{color:var(--on-ink)}
.close{margin:2rem 0 0;color:var(--on-ink);font-family:var(--display);font-size:1.125rem;line-height:1.4;max-width:34em}
/* Footer */
footer{padding:1.5rem 0 3rem;font-size:.875rem;color:var(--ink-2);display:flex;flex-wrap:wrap;gap:.35rem 1.25rem;line-height:1.5}
</style>
</head>
<body>
<main>
<div class="wrap">
<header class="top">
<div class="brand">
<span class="wordmark">Halden</span>
<span class="brand-line">Halden Bikes · Copenhagen · Board update no. 7</span>
</div>
<h1>Q3 2026 board update</h1>
<p class="standfirst">Our best quarter so far. Revenue passed €3M, gross margin moved up for the fifth quarter in a row, and we shipped more than 2,000 bikes for the first time. Two things did not go to plan: Berlin slipped to November and returns crept up. Both are explained below, with what we are changing and the three decisions we need from you on 14 October.</p>
<dl class="doc-info">
<div><dt>Prepared by</dt><dd>Mette Kjaer, CEO</dd></div>
<div><dt>For</dt><dd>Board meeting, 14 October 2026</dd></div>
<div><dt>Period</dt><dd>1 July to 30 September 2026</dd></div>
<div><dt>Circulation</dt><dd>Board and observers</dd></div>
</dl>
</header>
<section class="sec figures" aria-labelledby="h-figures">
<h2 id="h-figures">The quarter in four numbers</h2>
<div class="ledger">
<div class="ledger-lead">
<p class="fig-label">Revenue, Q3 2026</p>
<p class="fig-value">€3.1M</p>
<p class="fig-delta"><svg class="up" viewBox="0 0 10 10" aria-hidden="true"><path d="M5 1 9 9H1z"/></svg><span class="sr">up</span>27% <small>quarter on quarter</small></p>
<p class="fig-note">€2.44M in Q2. 2.2× the same quarter last year. First quarter above the €3M mark we set at the Series A.</p>
</div>
<div class="ledger-side">
<div class="fig-row">
<p class="fig-label">Gross margin</p>
<div class="fig-line">
<p class="fig-value-s">41%</p>
<p class="fig-delta-s"><svg class="up" viewBox="0 0 10 10" aria-hidden="true"><path d="M5 1 9 9H1z"/></svg><span class="sr">up</span>3 pt</p>
</div>
<p class="fig-note">38% in Q2. The second motor supplier and rail freight did most of the work.</p>
</div>
<div class="fig-row">
<p class="fig-label">Units shipped</p>
<div class="fig-line">
<p class="fig-value-s">2,140</p>
<p class="fig-delta-s"><svg class="up" viewBox="0 0 10 10" aria-hidden="true"><path d="M5 1 9 9H1z"/></svg><span class="sr">up</span>24%</p>
</div>
<p class="fig-note">1,720 in Q2. First quarter above 2,000, and no discounting to get there.</p>
</div>
<div class="fig-row">
<p class="fig-label">Runway</p>
<div class="fig-line">
<p class="fig-value-s">22 months</p>
<p class="fig-delta-s"><small>at plan</small></p>
</div>
<p class="fig-note">€9.8M cash on 30 September. Plan burn averages €445k a month through 2027, Berlin included.</p>
</div>
</div>
</div>
<figure class="chart">
<svg viewBox="0 0 560 372" role="img" aria-label="Revenue rose in each of the last six quarters, from 1.05 million euro in Q2 2025 to 3.1 million euro in Q3 2026, the first quarter above the 3 million mark. Gross margin rose from 31 percent to 41 percent over the same period.">
<line x1="4" y1="76.5" x2="556" y2="76.5" stroke="currentColor" stroke-width="1" stroke-dasharray="3 4" opacity=".75"/>
<text x="6" y="70" font-size="14" font-weight="600" class="muted">€3M mark</text>
<rect class="past" x="20" y="202.3" width="60" height="67.7"/>
<rect class="past" x="112" y="181" width="60" height="89"/>
<rect class="past" x="204" y="165.5" width="60" height="104.5"/>
<rect class="past" x="296" y="146.8" width="60" height="123.2"/>
<rect class="past" x="388" y="112.6" width="60" height="157.4"/>
<rect class="now" x="480" y="70" width="60" height="200"/>
<text x="50" y="192" text-anchor="middle" font-size="16" font-weight="600" class="muted">€1.05M</text>
<text x="142" y="171" text-anchor="middle" font-size="16" font-weight="600" class="muted">€1.38M</text>
<text x="234" y="155.5" text-anchor="middle" font-size="16" font-weight="600" class="muted">€1.62M</text>
<text x="326" y="136.8" text-anchor="middle" font-size="16" font-weight="600" class="muted">€1.91M</text>
<text x="418" y="102.6" text-anchor="middle" font-size="16" font-weight="600" class="muted">€2.44M</text>
<text x="510" y="58" text-anchor="middle" font-size="26" class="d">€3.1M</text>
<line x1="4" y1="270" x2="556" y2="270" stroke="currentColor" stroke-width="4"/>
<text x="50" y="293" text-anchor="middle" font-size="15" font-weight="600">Q2 25</text>
<text x="142" y="293" text-anchor="middle" font-size="15" font-weight="600">Q3 25</text>
<text x="234" y="293" text-anchor="middle" font-size="15" font-weight="600">Q4 25</text>
<text x="326" y="293" text-anchor="middle" font-size="15" font-weight="600">Q1 26</text>
<text x="418" y="293" text-anchor="middle" font-size="15" font-weight="600">Q2 26</text>
<text x="510" y="293" text-anchor="middle" font-size="15" class="d">Q3 26</text>
<line x1="4" y1="308" x2="556" y2="308" stroke="currentColor" stroke-width="1"/>
<text x="6" y="325" class="row-label">Gross margin</text>
<text x="50" y="353" text-anchor="middle" font-size="17" font-weight="600" class="muted">31%</text>
<text x="142" y="353" text-anchor="middle" font-size="17" font-weight="600" class="muted">33%</text>
<text x="234" y="353" text-anchor="middle" font-size="17" font-weight="600" class="muted">34%</text>
<text x="326" y="353" text-anchor="middle" font-size="17" font-weight="600" class="muted">36%</text>
<text x="418" y="353" text-anchor="middle" font-size="17" font-weight="600" class="muted">38%</text>
<text x="510" y="353" text-anchor="middle" font-size="21" class="d">41%</text>
</svg>
<figcaption>
<strong>Revenue by quarter, with gross margin underneath.</strong>
Q3 2026 is the first quarter above €3M and the fifth quarter in a row with a margin gain. The dashed line is the €3M quarterly mark from the Series A plan; we crossed it two quarters early. Management accounts, unaudited.
<span class="legend"><span class="l-past">Earlier quarters</span><span class="l-now">Q3 2026</span></span>
</figcaption>
</figure>
</section>
<div class="pair">
<section class="sec" aria-labelledby="h-well">
<h2 id="h-well">What went well</h2>
<div class="sec-body">
<ol class="points">
<li><p><strong>Demand held through summer without a single discount.</strong> 2,140 bikes shipped: 1,890 online and 250 from the Copenhagen store. July is normally our slowest month; this year it came in 12% above June. Average order value rose to €1,449 from €1,419 as more riders add the rack and the second battery at checkout.</p></li>
<li><p><strong>The Halden Cargo launched on 2 September and took 610 pre-orders in four weeks.</strong> That is €1.15M of deposit-backed backlog shipping from November, and the first product we have launched from a waitlist rather than a campaign. Nearly half the pre-orders came from existing riders.</p></li>
<li><p><strong>Gross margin reached 41%, up 3 points.</strong> The second motor supplier we contracted in Q2 cut motor cost by 11% (1.6 pt). Moving frame shipments from air to rail took €38 off every bike (1.1 pt). Accessory pricing did the rest (0.3 pt). None of it came from the price list, which we held.</p></li>
<li><p><strong>Service got faster.</strong> The Copenhagen workshop went to two shifts in July. Median repair turnaround fell from 9 days to 4, and the post-service score rose from 54 to 61. Kasper Nygaard started as CTO on 1 August; the firmware team is now four people and shipped the range-estimate fix that riders had been asking for since spring.</p></li>
</ol>
</div>
</section>
<section class="sec" aria-labelledby="h-not">
<h2 id="h-not">What did not</h2>
<div class="sec-body">
<ol class="points">
<li><p><strong>Berlin slipped from September to November.</strong> The building permit for the shopfront took eleven weeks instead of six. The store manager started on 15 September as planned, so we are paying a salary against a store that is not open yet. €140k of launch marketing moved to Q4 with the opening, and the Q4 revenue plan for Germany is now about €300k lighter.</p></li>
<li><p><strong>Returns rose from 4.1% to 5.6%.</strong> That is 120 bikes back in the quarter. Two-thirds cite frame size, and almost all of those are riders between 175 and 182 cm who were sent a medium frame by the size guide when a large fits them better. It is a fixable data problem, and it cost us about €85k in refurbishment and re-shipping.</p></li>
<li><p><strong>Our cell supplier cut our Q4 allocation by 15%.</strong> We have cells for October and November production. December is covered only if a second supplier qualifies in time, which is why decision 1 is on the agenda.</p></li>
<li><p><strong>Paid acquisition got more expensive.</strong> Paid CAC rose from €178 to €212 as summer auction prices on social climbed. Referrals kept blended CAC at €146 (Q2: €131), but we should not count on referrals hiding this for another quarter.</p></li>
</ol>
</div>
</section>
</div>
<section class="sec" aria-labelledby="h-change">
<h2 id="h-change">What we are changing</h2>
<div class="sec-body">
<ol class="points">
<li><p><strong>The size guide becomes a fit quiz.</strong> Eight questions including inseam, and a recommendation that errs toward the larger frame at the boundary. Live on 20 October. Test-ride vans run in Copenhagen, Aarhus and Hamburg from November so riders in the boundary sizes can try both frames before they buy. Target: returns under 4% by Q1.</p></li>
<li><p><strong>The second cell supplier moves from Q1 2027 to Q4 2026.</strong> Qualification takes eight weeks and needs a €380k deposit, which is decision 1. With it, December production is safe and we carry a six-week cell buffer into 2027.</p></li>
<li><p><strong>Berlin opens on 19 November with the launch budget intact.</strong> The permit was signed on 28 September and the fit-out contractor is on a penalty clause. The €140k of launch marketing lands in the opening month instead of being spread across the quarter.</p></li>
<li><p><strong>Paid social drops by 30%; referrals and test rides take the money.</strong> Blended CAC is capped at €150 for Q4. Freja Dahl owns the number and reports it weekly in the leadership meeting.</p></li>
</ol>
</div>
</section>
<section class="sec" aria-labelledby="h-people">
<h2 id="h-people">People</h2>
<div class="sec-body">
<p>Headcount is 47, up from 38 at the end of Q2 and two behind plan. Both gaps are customer-service roles that wait for Berlin. The table lists the roles that move the plan.</p>
<table>
<caption>Hiring that affects the plan, as of 30 September 2026</caption>
<thead>
<tr><th scope="col">Role</th><th scope="col">Status</th><th scope="col">Start</th></tr>
</thead>
<tbody>
<tr><th scope="row">Head of Operations</th><td>Offer accepted</td><td>1 November 2026</td></tr>
<tr><th scope="row">Store manager, Berlin</th><td>Started</td><td>15 September 2026</td></tr>
<tr><th scope="row">Firmware engineer (2 roles)</th><td>1 started, 1 in final round</td><td>1 October 2026 and December 2026</td></tr>
<tr><th scope="row">Supply chain lead</th><td>Interviewing, shortlist of 3</td><td>December 2026</td></tr>
<tr><th scope="row">Finance manager</th><td>Offer out</td><td>1 December 2026</td></tr>
<tr><th scope="row">Customer service, Hamburg (3 roles)</th><td>Opens in November</td><td>January 2027</td></tr>
<tr><th scope="row">Head of Brand</th><td>Paused until the Series B</td><td>To be decided</td></tr>
</tbody>
</table>
</div>
</section>
<section class="sec risks" aria-labelledby="h-risks">
<h2 id="h-risks">Risks</h2>
<div class="sec-body">
<p>The risks we are watching, in the order they worry us. Likelihood is our own judgement for the next two quarters.</p>
<div class="table-scroll">
<table>
<caption>Risk register, top five, reviewed 2 October 2026</caption>
<thead>
<tr><th scope="col" class="col-r">Risk</th><th scope="col" class="col-l">Likelihood</th><th scope="col">Mitigation</th><th scope="col" class="col-o">Owner</th></tr>
</thead>
<tbody>
<tr><th scope="row">Cell allocation short for December production</th><td>High</td><td>Second supplier qualified by mid-December (decision 1); six-week buffer stock built from January</td><td>Jonas Holm, COO</td></tr>
<tr><th scope="row">Returns stay above 5%</th><td>Medium</td><td>Fit quiz live 20 October; test-ride vans from November; review of the medium and large frame geometry in Q1</td><td>Sofie Lund, Product</td></tr>
<tr><th scope="row">Winter demand dips deeper than plan</th><td>Medium</td><td>Cargo pre-order backlog covers six weeks of Q4 production; paid spend can be cut within a week</td><td>Freja Dahl, Growth</td></tr>
<tr><th scope="row">Import duty on frames rises in 2027</th><td>Medium</td><td>Price list held to Q1; a Portuguese frame supplier has quoted and sends samples in November</td><td>Mette Kjaer, CEO</td></tr>
<tr><th scope="row">Berlin slips again</th><td>Low</td><td>Permit signed 28 September; contractor on a penalty clause; opening date confirmed weekly</td><td>Anders Winther, Retail</td></tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
<section class="asks" aria-labelledby="h-asks">
<div class="wrap">
<h2 id="h-asks">Asks of the board</h2>
<div>
<p class="lede">Three decisions, one page. Everything above feeds into these.</p>
<ol class="decisions">
<li>
<div>
<h3>Approve a €380k deposit for a second cell supplier</h3>
<p>Paid in October and credited against cell purchases from January. It takes runway from 22 to 21 months and removes the only thing that can stop December production.</p>
<p><strong>If we wait:</strong> about 600 fewer bikes in December, roughly €900k of revenue, in the month the Cargo backlog starts shipping.</p>
</div>
</li>
<li>
<div>
<h3>Approve the Berlin lease amendment</h3>
<p>The landlord offers three months rent-free as compensation for the permit delay if we extend the term from three years to five. That is €32k back in Q4 and €260k of extra commitment in years four and five. The shareholders' agreement requires board approval above €250k, which is why it is here.</p>
<p><strong>If we decline:</strong> we keep the three-year term, pay full rent from November, and lose nothing else. We recommend taking it; the location is right and the rent is fixed.</p>
</div>
</li>
<li>
<div>
<h3>Start the Series B in January 2027, not April</h3>
<p>22 months looks comfortable, but the Cargo ramp needs about €2M of inventory in the first half of 2027, and we would rather raise on Q4 numbers with 18 months of runway than on Q1 numbers with 15.</p>
<p><strong>What we need:</strong> agreement on the timing, reactions to the deck draft by 30 November, and the introductions on the list we circulated in September.</p>
</div>
</li>
</ol>
<div class="table-scroll">
<table class="on-ink">
<caption>The three decisions side by side</caption>
<thead>
<tr><th scope="col">Decision</th><th scope="col">We recommend</th><th scope="col">Cash effect</th><th scope="col">Runway after</th></tr>
</thead>
<tbody>
<tr><th scope="row">1. Second cell supplier deposit</th><td class="rec">Approve</td><td>€380k out in October</td><td>21 months</td></tr>
<tr><th scope="row">2. Berlin lease amendment</th><td class="rec">Approve</td><td>€32k back in Q4; €260k more in 2030 and 2031</td><td>22 months</td></tr>
<tr><th scope="row">3. Series B in January</th><td class="rec">Agree the timing</td><td>None until close</td><td>22 months</td></tr>
</tbody>
</table>
</div>
<p class="close">We take the three votes at the start of the meeting. The Cargo demo is in the courtyard afterwards, so bring a helmet.</p>
</div>
</div>
</section>
<div class="wrap">
<footer>
<span>Halden Bikes ApS, Copenhagen</span>
<span>Board update no. 7 · Q3 2026</span>
<span>Prepared 6 October 2026 for the meeting on 14 October 2026</span>
<span>Management accounts, unaudited</span>
<span>Previous update: Q2 2026, 8 July 2026</span>
</footer>
</div>
</main>
</body>
</html>
The quarter on one page, written so a board member reads it on a phone between meetings. Four numbers, an honest split between what worked and what did not, and a closing section that names the decisions you need from them.
The sample is Halden Bikes, a fictional e-bike company in Copenhagen, for Q3 2026. The structure fits a monthly investor update as well.
Headline numbers, four narrative sections, a six-quarter revenue chart, a hiring table, a risk table, and the decisions section. Inline CSS and SVG, no scripts.
More templates
A security assessment report in one HTML file – executive summary with severity counts, scope and method, findings with evidence and fixes, a 30-day plan, and an appendix. Duplicate it, or hand the prompt to your agent.
An agency campaign recap in one HTML page – the headline result, the numbers that matter, a weekly chart, a channel table, what worked, what did not, next bets, and budget versus spend. Duplicate it, or hand the prompt to your agent.
A blameless postmortem in one HTML page – summary, impact, a timestamped timeline, root cause, contributing factors, what went well and badly, and owned action items. Duplicate it, or hand the prompt to your agent.
Any agent, any model. Behind your company’s sign-in, at one flat price.
Free to start · Unlimited viewers