-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
231 lines (220 loc) · 14.2 KB
/
Copy pathindex.html
File metadata and controls
231 lines (220 loc) · 14.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Opportunity Technical Alignment Brief</title>
<meta name="description" content="Reusable technical alignment brief template for opportunity and project proof work.">
<style>
:root{
--brand-primary:#2f155e;
--brand-secondary:#d02e53;
--brand-accent:#00a6a6;
--brand-support:#0875be;
--ink:#172033;
--muted:#5f6675;
--paper:#ffffff;
--wash:#f7f8fb;
--line:#dde3ec;
--shadow:0 18px 42px rgba(23,32,51,.12);
--radius:8px;
--mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
--sans:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--wash);color:var(--ink);font-family:var(--sans);line-height:1.55}
a{color:var(--brand-support);font-weight:800}
.skip{position:absolute;left:-999px;top:auto;width:1px;height:1px;overflow:hidden}.skip:focus{left:16px;top:16px;width:auto;height:auto;background:var(--paper);padding:10px 12px;border:2px solid var(--brand-secondary);z-index:20}
.hero{background:var(--brand-primary);color:#fff;position:relative;overflow:hidden}.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:14px;background:linear-gradient(90deg,var(--brand-secondary),var(--brand-accent),var(--brand-support))}.hero-inner{max-width:1240px;margin:0 auto;padding:72px 22px 84px}.eyebrow{font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;font-weight:950;margin:0 0 14px}.hero h1{font-size:clamp(2.8rem,7vw,6.6rem);line-height:.96;margin:0 0 22px;max-width:1040px;overflow-wrap:anywhere}.hero p{font-size:clamp(1.05rem,2vw,1.35rem);max-width:860px;margin:0;color:rgba(255,255,255,.9);overflow-wrap:anywhere}
.toolbar{position:sticky;top:0;z-index:10;display:flex;gap:10px;align-items:center;flex-wrap:wrap;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);padding:10px clamp(16px,4vw,54px)}.toolbar a,.toolbar button{border:1px solid var(--line);background:var(--paper);color:var(--ink);padding:9px 12px;text-decoration:none;font-weight:850;font-size:.84rem}.toolbar a:hover,.toolbar button:hover{border-color:var(--brand-support);color:var(--brand-support)}
main{max-width:1280px;margin:0 auto;padding:26px 18px 72px}.section{margin:24px 0}.section-title{font-size:clamp(2rem,4.5vw,4.6rem);line-height:1;margin:0 0 16px;color:var(--brand-primary);overflow-wrap:anywhere}.section-kicker{color:var(--brand-secondary);font-size:.76rem;text-transform:uppercase;letter-spacing:.16em;font-weight:950;margin:0 0 8px}.section-subtitle{color:var(--muted);max-width:880px;font-size:1.08rem;margin:0 0 22px;overflow-wrap:anywhere}
.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:18px}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-6{grid-column:span 6}.span-4{grid-column:span 4}.card{background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow);padding:24px;position:relative;border-radius:var(--radius)}.card::after{content:"";position:absolute;left:0;right:0;bottom:0;height:7px;background:var(--brand-primary);border-radius:0 0 var(--radius) var(--radius)}.card.secondary::after{background:var(--brand-secondary)}.card.accent::after{background:var(--brand-accent)}.card.support::after{background:var(--brand-support)}.card.plain::after{display:none}.card h2,.card h3{line-height:1.08;margin:0 0 12px;color:var(--brand-primary)}.card h2{font-size:clamp(1.55rem,3vw,2.55rem)}.card h3{font-size:clamp(1.25rem,2vw,1.85rem)}.card p{color:var(--muted)}
.copybox{position:relative;border:1px solid var(--line);background:#fafbfe;padding:18px 116px 18px 18px;margin:14px 0;border-radius:var(--radius)}.copy-target{white-space:pre-wrap}.copy-btn{position:absolute;right:14px;top:14px;background:var(--brand-secondary);color:#fff;border:0;padding:9px 12px;font-weight:900;cursor:pointer}.copy-btn:hover{filter:brightness(.94)}
.swatches{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.swatch{min-height:104px;padding:12px;color:#fff;font-weight:950;display:flex;align-items:end;border-radius:var(--radius)}.swatch:nth-child(1){background:var(--brand-primary)}.swatch:nth-child(2){background:var(--brand-secondary)}.swatch:nth-child(3){background:var(--brand-accent)}.swatch:nth-child(4){background:var(--brand-support)}
.flow{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.node{background:var(--paper);border:1px solid var(--line);padding:18px;min-height:132px;position:relative;border-radius:var(--radius)}.node strong{display:block;color:var(--brand-primary);font-size:1.12rem;margin-bottom:8px}.node::after{content:"->";position:absolute;right:-17px;top:42%;font-weight:950;color:var(--brand-secondary)}.node:last-child::after{display:none}
table{width:100%;max-width:100%;table-layout:fixed;border-collapse:collapse;background:var(--paper);border:1px solid var(--line);margin:14px 0}th,td{text-align:left;vertical-align:top;padding:13px;border-bottom:1px solid var(--line);overflow-wrap:anywhere}th{background:#f1f4f8;color:var(--brand-primary);font-size:.78rem;text-transform:uppercase;letter-spacing:.08em}td:first-child{font-weight:850}.copy-target,.node span,.card p,.tight li{overflow-wrap:anywhere}ul,ol{padding-left:1.25rem}.tight li{margin:.22rem 0}.footer{border-top:1px solid var(--line);padding-top:18px;margin-top:40px;color:var(--muted)}
@media(max-width:900px){.span-8,.span-6,.span-4{grid-column:span 12}.flow{grid-template-columns:1fr}.node::after{display:none}.swatches{grid-template-columns:1fr 1fr}}
@media(max-width:620px){main{padding:18px 14px 54px}.hero-inner{padding:52px 18px 68px}.copybox{padding:16px}.copy-btn{position:static;margin-top:10px}.toolbar{display:block}.toolbar a,.toolbar button{display:inline-block;margin:4px 2px}.swatches{grid-template-columns:1fr}table{display:block;overflow-x:auto}}
</style>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<header class="hero">
<div class="hero-inner">
<p class="eyebrow">{CLIENT_OR_PROJECT_NAME} / technical alignment proof</p>
<h1>{OPPORTUNITY_OR_PROJECT_OUTCOME}</h1>
<p>{ONE_PARAGRAPH_VALUE_PROPOSITION}</p>
</div>
</header>
<nav class="toolbar" aria-label="Page navigation">
<a href="#share">Share</a>
<a href="#brand">Brand</a>
<a href="#use-case">Use Case</a>
<a href="#stack">Tech Stack</a>
<a href="#architecture">Architecture</a>
<a href="#proof">Proof</a>
<a href="#delivery">Delivery</a>
<a href="#pilot">Pilot</a>
</nav>
<main id="main">
<section id="share" class="section" aria-label="Share message">
<div class="grid">
<article class="card plain span-8">
<p class="section-kicker">Share message</p>
<h2>Copy/paste summary</h2>
<div class="copybox">
<button class="copy-btn" type="button">Copy</button>
<div class="copy-target">Sharing a technical alignment brief prepared by {YOUR_NAME_OR_COMPANY} for {CLIENT_OR_PROJECT_NAME}.
Rendered brief:
{RENDERED_BRIEF_URL}
Source proof:
{SOURCE_REPO_URL}
This brief frames an estimated implementation path for {CORE_OUTCOME}: {INPUT_MODEL}, {SERVICE_OR_AUTOMATION_LAYER}, {WORKER_OR_RUNTIME}, {VALIDATION_MODEL}, {REVIEW_MODEL}, and a practical pilot path. The repo contains public-safe proof files only.</div>
</div>
</article>
<aside class="card accent span-4">
<p class="section-kicker">Start here</p>
<h3>Fast path</h3>
<ol class="tight">
<li>Confirm the target use case.</li>
<li>Map the likely tech stack.</li>
<li>Show proof files.</li>
<li>Define the pilot path.</li>
</ol>
</aside>
</div>
</section>
<section id="brand" class="section" aria-label="Brand colors">
<p class="section-kicker">Brand system</p>
<h2 class="section-title">Four color tokens drive the visual system.</h2>
<div class="grid">
<article class="card plain span-8">
<div class="swatches" aria-label="Brand color swatches">
<div class="swatch">Primary</div>
<div class="swatch">Secondary</div>
<div class="swatch">Accent</div>
<div class="swatch">Support</div>
</div>
</article>
<aside class="card support span-4">
<h3>Change once</h3>
<p>Edit `--brand-primary`, `--brand-secondary`, `--brand-accent`, and `--brand-support` in the CSS root. The page updates globally.</p>
</aside>
</div>
</section>
<section id="use-case" class="section" aria-label="Target use case">
<p class="section-kicker">Target use case</p>
<h2 class="section-title">{USER_ACTION} should produce {REVIEW_READY_OUTPUT}.</h2>
<div class="grid">
<article class="card secondary span-6">
<h2>Input contract</h2>
<ul class="tight">
<li>{INPUT_1}</li>
<li>{INPUT_2}</li>
<li>{INPUT_3}</li>
<li>{INPUT_4}</li>
</ul>
</article>
<article class="card accent span-6">
<h2>Output package</h2>
<ul class="tight">
<li>{OUTPUT_1}</li>
<li>{OUTPUT_2}</li>
<li>{OUTPUT_3}</li>
<li>{OUTPUT_4}</li>
</ul>
</article>
</div>
</section>
<section id="stack" class="section" aria-label="Tech stack">
<p class="section-kicker">Tech stack shaping</p>
<h2 class="section-title">Make the stack explicit without overclaiming.</h2>
<table>
<thead><tr><th>Layer</th><th>Candidate stack</th><th>Why</th></tr></thead>
<tbody>
<tr><td>Frontend</td><td>{FRONTEND}</td><td>{FRONTEND_REASON}</td></tr>
<tr><td>API/backend</td><td>{API_BACKEND}</td><td>{API_BACKEND_REASON}</td></tr>
<tr><td>Cloud/platform</td><td>{CLOUD_PLATFORM}</td><td>{CLOUD_REASON}</td></tr>
<tr><td>Data</td><td>{DATA_LAYER}</td><td>{DATA_REASON}</td></tr>
<tr><td>Worker/runtime</td><td>{WORKER_RUNTIME}</td><td>{WORKER_REASON}</td></tr>
<tr><td>Observability</td><td>{OBSERVABILITY}</td><td>{OBSERVABILITY_REASON}</td></tr>
<tr><td>Security/governance</td><td>{SECURITY}</td><td>{SECURITY_REASON}</td></tr>
</tbody>
</table>
</section>
<section id="architecture" class="section" aria-label="Architecture">
<p class="section-kicker">Architecture map</p>
<h2 class="section-title">Separate intake, orchestration, runtime, artifacts, and review.</h2>
<div class="flow">
<div class="node"><strong>{UI}</strong><span>{UI_DESCRIPTION}</span></div>
<div class="node"><strong>{API}</strong><span>{API_DESCRIPTION}</span></div>
<div class="node"><strong>{QUEUE_OR_WORKFLOW}</strong><span>{QUEUE_DESCRIPTION}</span></div>
<div class="node"><strong>{WORKER}</strong><span>{WORKER_DESCRIPTION}</span></div>
<div class="node"><strong>{ARTIFACTS_REVIEW}</strong><span>{ARTIFACT_DESCRIPTION}</span></div>
</div>
</section>
<section id="proof" class="section" aria-label="Proof files">
<p class="section-kicker">Proof files</p>
<h2 class="section-title">Make the claim inspectable.</h2>
<table>
<thead><tr><th>Proof file</th><th>What it demonstrates</th><th>Shareability</th></tr></thead>
<tbody>
<tr><td>{PROOF_FILE_1}</td><td>{PROOF_POINT_1}</td><td>{PUBLIC_SAFE_OR_PRIVATE}</td></tr>
<tr><td>{PROOF_FILE_2}</td><td>{PROOF_POINT_2}</td><td>{PUBLIC_SAFE_OR_PRIVATE}</td></tr>
<tr><td>{PROOF_FILE_3}</td><td>{PROOF_POINT_3}</td><td>{PUBLIC_SAFE_OR_PRIVATE}</td></tr>
</tbody>
</table>
</section>
<section id="delivery" class="section" aria-label="Delivery readiness">
<p class="section-kicker">Delivery readiness</p>
<h2 class="section-title">Show how the work becomes safe to ship.</h2>
<div class="grid">
<article class="card secondary span-4"><h3>Quality gates</h3><ul class="tight"><li>Static checks.</li><li>Unit tests.</li><li>Integration smoke tests.</li><li>Regression tests from review findings.</li></ul></article>
<article class="card accent span-4"><h3>Observability</h3><ul class="tight"><li>Request/job ID.</li><li>Input and rule versions.</li><li>Runtime and retry counts.</li><li>Warning/failure categories.</li></ul></article>
<article class="card support span-4"><h3>AI governance</h3><ul class="tight"><li>No proprietary data in public AI tools.</li><li>No unsupported claims.</li><li>Human review for code and technical decisions.</li><li>Keep assumptions visible.</li></ul></article>
</div>
</section>
<section id="pilot" class="section" aria-label="Pilot plan">
<p class="section-kicker">Pilot path</p>
<h2 class="section-title">Keep the first release narrow and measurable.</h2>
<table>
<thead><tr><th>Phase</th><th>Activities</th><th>Deliverable</th></tr></thead>
<tbody>
<tr><td>Days 1-2</td><td>{CONFIRM_SCOPE_AND_SAMPLES}</td><td>{SCOPE_CONTRACT}</td></tr>
<tr><td>Days 3-6</td><td>{BUILD_PROOF_PATH}</td><td>{WORKING_PROTOTYPE}</td></tr>
<tr><td>Days 7-9</td><td>{RUN_REVIEW_AND_REGRESSION}</td><td>{DEFECT_LOG_AND_TESTS}</td></tr>
<tr><td>Days 10-14</td><td>{STABILIZE_AND_DEMO}</td><td>{PILOT_REVIEW}</td></tr>
</tbody>
</table>
</section>
<footer class="footer">
<p><strong>{YOUR_NAME_OR_COMPANY}</strong> / reusable opportunity technical alignment template.</p>
<p>This page should contain only public-safe or client-approved content. Remove private names, raw conversation records, nonpublic correspondence, meeting links, credentials, and proprietary source data before sharing.</p>
</footer>
</main>
<script>
(function(){
const buttons = Array.from(document.querySelectorAll('.copy-btn'));
buttons.forEach((button) => {
button.addEventListener('click', async () => {
const target = button.closest('.copybox')?.querySelector('.copy-target');
if(!target) return;
try{
await navigator.clipboard.writeText(target.innerText.trim());
const prior = button.textContent;
button.textContent = 'Copied';
setTimeout(() => button.textContent = prior, 1000);
}catch(error){
const range = document.createRange();
range.selectNodeContents(target);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
});
});
})();
</script>
</body>
</html>