chore: импорт сайта breazu
refs breazu/breazu#1 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
f2d89e7117
10 files changed
+1000
No files matched your search
+355
@@ -0,0 +1,355 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>breazu — Sample Audit</title>
|
||||
<meta name="description" content="Sample independent audit of a synthetic fixed-price development proposal — 10 findings, 7 amendments, a verdict.">
|
||||
<link rel="icon" href="assets/app_icon_light.svg" type="image/svg+xml">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Outfit:wght@500;600;700&family=Figtree:wght@400;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap">
|
||||
<style>
|
||||
:root {
|
||||
--paper: #FFFFFF;
|
||||
--surface: #F4F7FC;
|
||||
--ink: #011B3E;
|
||||
--muted: #4A5B75;
|
||||
--line: #DCE4F0;
|
||||
--brand: #0863FD;
|
||||
--brand-ink: #0550D6;
|
||||
--brand-soft: #E8F0FE;
|
||||
--warn: #FE7228;
|
||||
--warn-soft: #FFEFE4;
|
||||
--crit: #DC3D43;
|
||||
--crit-soft: #FCE9EA;
|
||||
--panel: #FFFFFF;
|
||||
--shadow: 0 10px 30px rgba(1, 27, 62, 0.07);
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme="light"]) {
|
||||
--paper: #0A1428;
|
||||
--surface: #101D36;
|
||||
--ink: #EAF0FA;
|
||||
--muted: #93A5C1;
|
||||
--line: #26385C;
|
||||
--brand: #4C8DFF;
|
||||
--brand-ink: #7FAEFF;
|
||||
--brand-soft: #14294D;
|
||||
--warn: #FF8A47;
|
||||
--warn-soft: #3A2210;
|
||||
--crit: #F26A6F;
|
||||
--crit-soft: #3B1A1D;
|
||||
--panel: #101D36;
|
||||
--shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
}
|
||||
:root[data-theme="dark"] {
|
||||
--paper: #0A1428;
|
||||
--surface: #101D36;
|
||||
--ink: #EAF0FA;
|
||||
--muted: #93A5C1;
|
||||
--line: #26385C;
|
||||
--brand: #4C8DFF;
|
||||
--brand-ink: #7FAEFF;
|
||||
--brand-soft: #14294D;
|
||||
--warn: #FF8A47;
|
||||
--warn-soft: #3A2210;
|
||||
--crit: #F26A6F;
|
||||
--crit-soft: #3B1A1D;
|
||||
--panel: #101D36;
|
||||
--shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; }
|
||||
body { background: var(--paper); color: var(--ink); font-family: 'Figtree', 'Segoe UI', sans-serif; font-size: 16.5px; line-height: 1.62; }
|
||||
.mono { font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace; }
|
||||
.page { max-width: 920px; margin: 0 auto; padding: 40px 28px 80px; }
|
||||
a { color: var(--brand-ink); }
|
||||
|
||||
.logo-light { display: block; }
|
||||
.logo-dark { display: none; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme="light"]) .logo-light { display: none; }
|
||||
:root:not([data-theme="light"]) .logo-dark { display: block; }
|
||||
}
|
||||
:root[data-theme="dark"] .logo-light { display: none; }
|
||||
:root[data-theme="dark"] .logo-dark { display: block; }
|
||||
|
||||
/* letterhead */
|
||||
.letterhead { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; border-bottom: 2px solid var(--ink); padding-bottom: 16px; }
|
||||
.letterhead img { height: 42px; width: auto; display: block; }
|
||||
.lh-right { font-family: 'JetBrains Mono', monospace; font-size: 11.5px; color: var(--muted); text-align: right; letter-spacing: 0.04em; }
|
||||
.demo-band { margin-top: 16px; display: inline-flex; align-items: center; gap: 8px; font-family: 'JetBrains Mono', monospace; font-size: 11.5px; letter-spacing: 0.08em; color: var(--warn); background: var(--warn-soft); border: 1px solid color-mix(in srgb, var(--warn) 35%, transparent); padding: 5px 12px; border-radius: 999px; }
|
||||
|
||||
h1 { font-family: 'Outfit', sans-serif; font-size: clamp(26px, 4.5vw, 34px); line-height: 1.18; font-weight: 700; letter-spacing: -0.015em; margin: 26px 0 8px; text-wrap: balance; }
|
||||
.subtitle { color: var(--muted); font-size: 16px; max-width: 64ch; }
|
||||
|
||||
/* object */
|
||||
.object { margin: 28px 0 0; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; background: var(--panel); }
|
||||
.object-grid { display: grid; grid-template-columns: repeat(4, 1fr); }
|
||||
.object-cell { padding: 13px 18px; border-right: 1px solid var(--line); }
|
||||
.object-cell:last-child { border-right: none; }
|
||||
.object-label { font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted); }
|
||||
.object-value { font-size: 15.5px; font-weight: 600; margin-top: 3px; }
|
||||
.object-note { border-top: 1px solid var(--line); padding: 11px 18px; font-size: 13.5px; color: var(--muted); background: var(--surface); }
|
||||
|
||||
/* verdict */
|
||||
.verdict { margin: 26px 0 0; border: 1.5px solid var(--brand); border-radius: 14px; background: var(--panel); overflow: hidden; box-shadow: var(--shadow); }
|
||||
.verdict-head { display: flex; align-items: center; gap: 14px; padding: 16px 22px; background: var(--brand-soft); flex-wrap: wrap; }
|
||||
.stamp { font-family: 'JetBrains Mono', monospace; font-weight: 600; font-size: 13.5px; letter-spacing: 0.1em; color: var(--brand-ink); border: 2px solid var(--brand); padding: 6px 14px; border-radius: 999px; white-space: nowrap; }
|
||||
.verdict-line { font-family: 'Outfit', sans-serif; font-size: 17px; font-weight: 600; }
|
||||
.verdict-figures { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--line); }
|
||||
.vf { padding: 14px 22px; border-right: 1px solid var(--line); }
|
||||
.vf:last-child { border-right: none; }
|
||||
.vf-num { font-family: 'JetBrains Mono', monospace; font-size: 22px; font-weight: 600; font-variant-numeric: tabular-nums; }
|
||||
.vf-num.red { color: var(--warn); }
|
||||
.vf-num.green { color: var(--brand-ink); }
|
||||
.vf-cap { font-size: 13px; color: var(--muted); margin-top: 2px; }
|
||||
.verdict-body { padding: 14px 22px 16px; font-size: 15.5px; border-top: 1px solid var(--line); }
|
||||
|
||||
section { margin-top: 44px; }
|
||||
.sec-head { display: flex; align-items: baseline; gap: 12px; border-bottom: 1px solid var(--line); padding-bottom: 8px; margin-bottom: 18px; }
|
||||
.sec-num { font-family: 'JetBrains Mono', monospace; font-size: 13px; color: var(--brand); font-weight: 600; }
|
||||
h2 { font-family: 'Outfit', sans-serif; font-size: 21px; font-weight: 700; letter-spacing: -0.01em; }
|
||||
|
||||
/* tables */
|
||||
.tbl-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 14px; }
|
||||
table { width: 100%; border-collapse: collapse; font-size: 14.5px; background: var(--panel); }
|
||||
thead th { font-family: 'JetBrains Mono', monospace; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); text-align: left; padding: 10px 14px; border-bottom: 1.5px solid var(--line); background: var(--surface); white-space: nowrap; }
|
||||
tbody td { padding: 10px 14px; border-bottom: 1px solid var(--line); vertical-align: top; }
|
||||
tbody tr:last-child td { border-bottom: none; }
|
||||
td.fid { font-family: 'JetBrains Mono', monospace; color: var(--muted); font-size: 12.5px; white-space: nowrap; }
|
||||
td.exposure { font-family: 'JetBrains Mono', monospace; font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; }
|
||||
.sev { font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: 0.07em; padding: 2px 10px; border-radius: 999px; white-space: nowrap; }
|
||||
.sev-crit { color: var(--crit); background: var(--crit-soft); }
|
||||
.sev-major { color: var(--warn); background: var(--warn-soft); }
|
||||
.sev-check { color: var(--brand-ink); background: var(--brand-soft); }
|
||||
|
||||
/* finding cards */
|
||||
.finding { border: 1px solid var(--line); border-radius: 14px; background: var(--panel); margin-bottom: 18px; overflow: hidden; }
|
||||
.finding-head { display: flex; align-items: baseline; gap: 12px; padding: 13px 20px; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
|
||||
.finding-head .fid { font-family: 'JetBrains Mono', monospace; color: var(--muted); font-size: 12.5px; }
|
||||
.finding-title { font-family: 'Outfit', sans-serif; font-weight: 600; font-size: 16.5px; flex: 1; min-width: 200px; }
|
||||
.finding-body { padding: 14px 20px 16px; }
|
||||
.finding-body p { margin-bottom: 10px; max-width: 74ch; }
|
||||
.finding-body p:last-child { margin-bottom: 0; }
|
||||
.evidence { font-size: 14px; border-left: 3px solid var(--warn); padding: 9px 16px; margin: 10px 0; color: var(--muted); font-style: italic; background: var(--surface); border-radius: 0 8px 8px 0; }
|
||||
.evidence .mono { font-style: normal; font-size: 12.5px; }
|
||||
.fix { display: flex; gap: 10px; margin-top: 12px; padding: 11px 16px; background: var(--brand-soft); border-radius: 10px; font-size: 14.5px; }
|
||||
.fix strong { color: var(--brand-ink); font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: 0.08em; padding-top: 3px; }
|
||||
|
||||
.strike { text-decoration: line-through; text-decoration-color: var(--warn); text-decoration-thickness: 1.5px; color: var(--muted); }
|
||||
.corr { color: var(--warn); font-weight: 600; }
|
||||
|
||||
/* amendments */
|
||||
ol.amendments { counter-reset: am; list-style: none; padding: 0; }
|
||||
ol.amendments li { counter-increment: am; position: relative; padding: 13px 18px 13px 60px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); margin-bottom: 10px; font-size: 15px; }
|
||||
ol.amendments li::before { content: "A" counter(am); position: absolute; left: 14px; top: 13px; font-family: 'JetBrains Mono', monospace; font-size: 12.5px; font-weight: 600; color: var(--brand-ink); border: 1px solid var(--brand); border-radius: 999px; padding: 1px 8px; }
|
||||
|
||||
.note { font-size: 13.5px; color: var(--muted); margin-top: 12px; max-width: 74ch; }
|
||||
|
||||
.method { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
|
||||
.method-card { border: 1px solid var(--line); border-radius: 14px; background: var(--panel); padding: 15px 18px; }
|
||||
.method-card h3 { font-family: 'Outfit', sans-serif; font-size: 15px; font-weight: 600; margin-bottom: 6px; }
|
||||
.method-card h3 .mono { color: var(--brand); font-size: 12px; }
|
||||
.method-card p { font-size: 13.5px; color: var(--muted); }
|
||||
|
||||
.closing { margin-top: 44px; border-top: 2px solid var(--ink); padding-top: 18px; display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
.closing .sig { font-size: 15px; }
|
||||
.closing .sig .mono { font-size: 12px; color: var(--muted); }
|
||||
.disclaimer { margin-top: 26px; font-size: 12.5px; color: var(--muted); border: 1px dashed var(--line); border-radius: 12px; padding: 12px 18px; }
|
||||
.backlink { display: inline-block; margin-top: 20px; font-family: 'Outfit', sans-serif; font-weight: 600; font-size: 14.5px; }
|
||||
|
||||
@media (max-width: 760px) {
|
||||
.object-grid, .verdict-figures, .method { grid-template-columns: 1fr 1fr; }
|
||||
.vf:nth-child(2) { border-right: none; }
|
||||
.vf:last-child { border-top: 1px solid var(--line); border-right: 1px solid var(--line); }
|
||||
}
|
||||
@media (max-width: 520px) {
|
||||
.object-grid, .verdict-figures, .method { grid-template-columns: 1fr; }
|
||||
.object-cell, .vf { border-right: none; border-bottom: 1px solid var(--line); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="page">
|
||||
|
||||
<header class="letterhead">
|
||||
<a href="index.html" aria-label="breazu — home" style="display:inline-flex;">
|
||||
<img class="logo-light" src="assets/logo_with_name_transparentbg.svg" alt="breazu">
|
||||
<img class="logo-dark" src="assets/logo_with_name_transparentbg_dark.svg" alt="breazu">
|
||||
</a>
|
||||
<div class="lh-right">INDEPENDENT PROPOSAL AUDIT<br>REF BZ-2026-DEMO</div>
|
||||
</header>
|
||||
<div class="demo-band">SAMPLE REPORT · SYNTHETIC PROPOSAL · NO REAL CLIENT DATA</div>
|
||||
|
||||
<h1>Audit of a fixed-price development proposal: mobile ecosystem for a fitness chain</h1>
|
||||
<p class="subtitle">Prepared for the buyer’s side before contract signature. The vendor is anonymised; the proposal was written the way real proposals are written.</p>
|
||||
|
||||
<div class="object">
|
||||
<div class="object-grid">
|
||||
<div class="object-cell"><div class="object-label">Client</div><div class="object-value">NordFit Group (24 clubs)</div></div>
|
||||
<div class="object-cell"><div class="object-label">Vendor</div><div class="object-value">Vendor A (anonymised)</div></div>
|
||||
<div class="object-cell"><div class="object-label">Contract value</div><div class="object-value mono">€284,600</div></div>
|
||||
<div class="object-cell"><div class="object-label">Timeline / items</div><div class="object-value mono">7 mo · 96 lines</div></div>
|
||||
</div>
|
||||
<div class="object-note">Object: fixed-price proposal for two mobile apps, a member web portal and migration from the incumbent club-management system. Documents received: proposal (PDF, 31 pp.), estimate (XLSX, 96 line items), draft contract.</div>
|
||||
</div>
|
||||
|
||||
<div class="verdict">
|
||||
<div class="verdict-head">
|
||||
<span class="stamp">SIGN WITH AMENDMENTS</span>
|
||||
<span class="verdict-line">Signable deal — after 7 contract amendments and a corrected estimate.</span>
|
||||
</div>
|
||||
<div class="verdict-figures">
|
||||
<div class="vf"><div class="vf-num red">€84–112k</div><div class="vf-cap">probable exposure found: likely change requests, unpriced obligations, arithmetic</div></div>
|
||||
<div class="vf"><div class="vf-num">10</div><div class="vf-cap">findings · 3 critical, 5 major, 2 for vendor clarification</div></div>
|
||||
<div class="vf"><div class="vf-num green">€31,000/yr</div><div class="vf-cap">cost of ownership the proposal does not mention</div></div>
|
||||
</div>
|
||||
<div class="verdict-body">The price is within market range for the scope and the team is plausibly sized. Unamended, the contract allows the final cost to drift 30–40% above signature price through mechanisms already written into the text.</div>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="sec-head"><span class="sec-num mono">01</span><h2>Findings index</h2></div>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<thead><tr><th>ID</th><th>Finding</th><th>Severity</th><th style="text-align:right">Exposure</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td class="fid">F-01</td><td>Estimate arithmetic: 4 line totals exceed the sum of role hours</td><td><span class="sev sev-crit">CRITICAL</span></td><td class="exposure">€3,328</td></tr>
|
||||
<tr><td class="fid">F-02</td><td>“Fixed” price is not fixed: re-confirmation after discovery, no cap</td><td><span class="sev sev-crit">CRITICAL</span></td><td class="exposure">unbounded</td></tr>
|
||||
<tr><td class="fid">F-03</td><td>Stated goal depends on a paid option: data migration priced outside base scope</td><td><span class="sev sev-crit">CRITICAL</span></td><td class="exposure">€19,800</td></tr>
|
||||
<tr><td class="fid">F-04</td><td>Warranty excluded from price (“separate agreement”)</td><td><span class="sev sev-major">MAJOR</span></td><td class="exposure">€14–18k</td></tr>
|
||||
<tr><td class="fid">F-05</td><td>Dependency clause without a ceiling: any client-side delay shifts timeline “accordingly”</td><td><span class="sev sev-major">MAJOR</span></td><td class="exposure">schedule</td></tr>
|
||||
<tr><td class="fid">F-06</td><td>Acceptance undefined: no criteria, no review window, no dispute path</td><td><span class="sev sev-major">MAJOR</span></td><td class="exposure">disputes</td></tr>
|
||||
<tr><td class="fid">F-07</td><td>Quality contour cut: QA 9% of hours, project management 3.9%</td><td><span class="sev sev-major">MAJOR</span></td><td class="exposure">delivery risk</td></tr>
|
||||
<tr><td class="fid">F-08</td><td>11 scope exclusions likely to return as change requests</td><td><span class="sev sev-major">MAJOR</span></td><td class="exposure">€47–71k</td></tr>
|
||||
<tr><td class="fid">F-09</td><td>Total cost of ownership absent: hosting, licences, stores, support</td><td><span class="sev sev-check">CLARIFY</span></td><td class="exposure">€31k/yr</td></tr>
|
||||
<tr><td class="fid">F-10</td><td>“Senior team” at blended €52/h — grades or margin, one of the two</td><td><span class="sev sev-check">CLARIFY</span></td><td class="exposure">question</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="sec-head"><span class="sec-num mono">02</span><h2>Findings in detail</h2></div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-01</span><span class="finding-title">The estimate does not add up — in the vendor’s favour</span><span class="sev sev-crit">CRITICAL</span></div>
|
||||
<div class="finding-body">
|
||||
<p>We recompute every line: hours per role × rate, against the line total. Four lines carry totals larger than the sum of their own role hours — 64 phantom hours in total.</p>
|
||||
<div class="evidence">Line 41 “Project management, phase 1”: role hours sum to <span class="mono">140 h</span>, line total states <span class="mono"><span class="strike">164 h</span></span> — <span class="mono corr">+24 h · €1,248</span> priced but not attributed to anyone’s work.</div>
|
||||
<p>At the proposal’s blended rate the four lines add <strong>€3,328</strong> of cost with no corresponding labour. In our practice this is rarely fraud — usually a spreadsheet edited late at night.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Vendor corrects the four lines or attributes the hours to named roles. A two-minute fix.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-02</span><span class="finding-title">A fixed price that reserves the right not to be</span><span class="sev sev-crit">CRITICAL</span></div>
|
||||
<div class="finding-body">
|
||||
<p>The cover says fixed price. Section 4.2 of the draft contract says otherwise:</p>
|
||||
<div class="evidence">“The final project cost shall be confirmed by the parties upon completion of the discovery phase.”</div>
|
||||
<p>No ceiling, no formula, no walk-away right. You would be signing a number that becomes negotiable after you have already paid for discovery and committed the calendar — the moment your negotiating position is weakest.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A1: post-discovery adjustment bounded to ±10% with itemised justification, and a no-cost exit if the vendor’s revised price exceeds the cap.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-03</span><span class="finding-title">The promised outcome depends on an option you have not bought</span><span class="sev sev-crit">CRITICAL</span></div>
|
||||
<div class="finding-body">
|
||||
<p>Page 3 promises a “seamless transition for all existing members”. The mechanism for that promise — migration of member data, subscriptions and visit history — sits in the options table at <span class="mono">€19,800</span>, outside the base price.</p>
|
||||
<p>Every proposal we audit gets this test: <em>for each stated goal, where is the line that delivers it?</em> A goal without a mechanism is the single most reliable predictor of a mid-project dispute.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A5: migration moves into base scope at an agreed price, or the “seamless transition” language is removed and NordFit plans migration separately.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-04</span><span class="finding-title">Warranty is outside the price</span><span class="sev sev-major">MAJOR</span></div>
|
||||
<div class="finding-body">
|
||||
<div class="evidence">“Warranty support shall be subject to a separate agreement.”</div>
|
||||
<p>Market practice for this scope is 3 months of defect-fixing included, with a named response time for critical incidents. Here, the day after acceptance every defect is billable. On comparable builds, first-quarter defect flow prices at <strong>€14–18k</strong> — a hidden 5–6% on top of the contract.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A2: 3-month warranty in price; defects of production severity fixed at no charge; critical response ≤ 4 business hours; “defect vs. new requirement” defined in the same clause.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-05</span><span class="finding-title">One late API and the calendar belongs to nobody</span><span class="sev sev-major">MAJOR</span></div>
|
||||
<div class="finding-body">
|
||||
<div class="evidence">“Should client-side dependencies be delayed, the delivery timeline shifts accordingly.”</div>
|
||||
<p>“Accordingly” has no ceiling and no renegotiation trigger. A two-week delay on your side can legitimise an open-ended shift on theirs, with the burden of proof on you. Symmetry is absent: the contract prices no consequence for vendor-side slippage at all.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A3: shift equals documented delay, capped at 15 business days, then mandatory re-plan; vendor delay mirrored with a capped penalty (0.1%/day, max 10% of stage).</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-06</span><span class="finding-title">Acceptance is a signature, not a test</span><span class="sev sev-major">MAJOR</span></div>
|
||||
<div class="finding-body">
|
||||
<p>Acceptance is defined as “signing of the acceptance act”. Nothing says what is being verified, how long you have to review, what a rejection must contain, or what happens when you disagree. In practice this clause converts every quality dispute into a payment dispute.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A4: acceptance against demonstration scenarios fixed per stage; 10 business days to review; rejection only as a single itemised list; defect severity classes defined; silence = acceptance, in both directions.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-07</span><span class="finding-title">The savings live in the quality budget</span><span class="sev sev-major">MAJOR</span></div>
|
||||
<div class="finding-body">
|
||||
<p>Against our benchmark of comparable estimates: QA at <span class="mono">9%</span> of hours sits well under the observed <span class="mono">14–27%</span>; project management at <span class="mono">3.9%</span> under <span class="mono">8–18%</span>. This is where the attractive price comes from. Under-priced coordination and testing return as your staff doing the vendor’s management, and as defects after go-live.</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Ask the vendor to either restore QA/PM to defensible levels with a price adjustment, or contractually name the client-side effort they are assuming.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-08</span><span class="finding-title">Eleven exclusions, priced at zero, waiting to be change requests</span><span class="sev sev-major">MAJOR</span></div>
|
||||
<div class="finding-body">
|
||||
<p>We score every exclusion by the probability the project cannot ship without it. Of 19 exclusions, 11 are functions NordFit will almost certainly need in year one — among them payment retries on failed direct debits, staff access roles, and GDPR data-deletion flows. Priced at vendor rates, the likely change-request tail is <strong>€47–71k</strong> (17–25% of the contract).</p>
|
||||
<div class="fix"><strong>ACTION</strong><span>Amendment A6: pre-price the top 6 exclusions as fixed-price options at signature (vendors price generously once the contract is theirs); cap annual CR volume subject to re-tender.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-09</span><span class="finding-title">What it costs to own, not just to build</span><span class="sev sev-check">CLARIFY</span></div>
|
||||
<div class="finding-body">
|
||||
<p>The proposal is silent on running costs. Reconstructed from its own architecture: cloud hosting ~€9,600/yr, third-party licences ~€4,400/yr, store accounts €125/yr, and post-warranty support at the vendor’s stated rate ~€17,000/yr — roughly <strong>€31,000 per year</strong>, or 33% of the build price over three years. It belongs in your budget before signature.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="finding">
|
||||
<div class="finding-head"><span class="fid">F-10</span><span class="finding-title">“Senior team” at €52/hour</span><span class="sev sev-check">CLARIFY</span></div>
|
||||
<div class="finding-body">
|
||||
<p>The blended rate is plausible for a strong mid-level team and low for the all-senior team the proposal describes. One of two things is true: the grades are optimistic (then F-07 is the mechanism), or the vendor is pricing to win. A direct question tends to produce an honest answer and a useful clause: named key people with substitution rights.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="sec-head"><span class="sec-num mono">03</span><h2>Required amendments before signature</h2></div>
|
||||
<ol class="amendments">
|
||||
<li>Post-discovery price adjustment bounded to ±10%, itemised, with a no-cost exit above the cap. <em>(F-02)</em></li>
|
||||
<li>3-month warranty inside the price; critical response ≤ 4 business hours; defect defined. <em>(F-04)</em></li>
|
||||
<li>Delay symmetry: client-delay shift capped at 15 business days, vendor-delay penalty capped at 10% of stage. <em>(F-05)</em></li>
|
||||
<li>Acceptance by demonstration scenarios, 10-day review window, itemised rejection, severity classes. <em>(F-06)</em></li>
|
||||
<li>Member-data migration resolved at signature: in scope, or promise removed. <em>(F-03)</em></li>
|
||||
<li>Top-6 exclusions pre-priced as options; corrected estimate lines (F-01) attached as the binding version. <em>(F-08, F-01)</em></li>
|
||||
<li>IP and code escrow: repository access from day one, title passing per paid stage. <em>(standard)</em></li>
|
||||
</ol>
|
||||
<p class="note">Each amendment is drafted in the full report as ready-to-paste contract language. Vendors accept most of them in our experience — these are terms a serious vendor can live with.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="sec-head"><span class="sec-num mono">04</span><h2>Method: how we read a proposal</h2></div>
|
||||
<div class="method">
|
||||
<div class="method-card"><h3><span class="mono">A ·</span> Craft invariants</h3><p>Every estimate is recomputed line by line and tested against ranges observed across our proposal base: estimate granularity, QA and management shares, rate grids, options discipline.</p></div>
|
||||
<div class="method-card"><h3><span class="mono">B ·</span> Unit benchmarks</h3><p>Scale is judged per unit — hours per domain service, per integration, per app channel — so a €280k proposal and a €2m programme are compared honestly.</p></div>
|
||||
<div class="method-card"><h3><span class="mono">C ·</span> Both sides of the table</h3><p>We have written winning proposals for vendors for 8 years. We know where risk is parked — exclusions, acceptance clauses, options — because we have parked it there ourselves.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="closing">
|
||||
<div class="sig">breazu · Independent proposal audit<br><span class="mono">Full audit of this class: €2,500 · 5 business days · report + amendment language + 60-min call</span></div>
|
||||
<div class="sig" style="text-align:right"><span class="mono">Conflict rule: we never work for both sides<br>of the same deal, and take no referral fees.</span></div>
|
||||
</div>
|
||||
|
||||
<div class="disclaimer">This is a demonstration report. The client, vendor and proposal are synthetic, constructed from defect patterns found across 12+ real proposals we have written or audited.</div>
|
||||
|
||||
<a class="backlink" href="index.html">← breazu — services and pricing</a>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user