mirror of
https://github.com/nexu-io/open-design.git
synced 2026-07-03 12:27:55 +08:00
309 lines
17 KiB
HTML
309 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Module 01 · Getting Started · Open Design</title>
|
|
<style>/* course-module :: webfonts (only families actually used) */
|
|
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,400;1,9..144,500&family=Source+Sans+3:wght@400;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
|
|
</style>
|
|
<style>/* course-module :: academic textbook. cream paper, Fraunces serif, single forest-teal accent.
|
|
* Polished pass: trimmed unused slop CSS (gradient tokens, animation library, card/chrome leftovers),
|
|
* raised label contrast, footer aligned to the 80px slide grid, disciplined entrance stagger. */
|
|
:root{
|
|
--bg:#fbfaf6;
|
|
--bg-soft:#f4f1e8;
|
|
--surface:#fffefb;
|
|
--surface-2:#f5f2e9;
|
|
--border:rgba(60,45,20,.14);
|
|
--border-strong:rgba(60,45,20,.32);
|
|
--text-1:#2a2418;
|
|
--text-2:#564d3c;
|
|
--text-3:#76694f;
|
|
--accent:#2d7d6e;
|
|
--radius:8px;
|
|
--font-sans:'Source Sans 3',-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;
|
|
--font-serif:'Fraunces',Georgia,serif;
|
|
--font-mono:'JetBrains Mono',SFMono-Regular,Menlo,monospace;
|
|
--ease:cubic-bezier(.16,1,.3,1);
|
|
}
|
|
*,*::before,*::after{box-sizing:border-box}
|
|
html,body{margin:0;padding:0;background:var(--bg);color:var(--text-1);
|
|
font-family:var(--font-sans);font-weight:400;line-height:1.6;
|
|
-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
|
|
img,svg{max-width:100%;display:block}
|
|
a{color:var(--accent);text-decoration:none}
|
|
a:hover{text-decoration:underline}
|
|
code,kbd,pre,samp{font-family:var(--font-mono)}
|
|
|
|
/* ---------------- deck (static preview: slides stacked, one viewport each) ---------------- */
|
|
.deck{width:100vw}
|
|
.slide{position:relative;width:100vw;height:100vh;overflow:hidden;background:var(--bg);
|
|
padding:64px 80px;display:grid;grid-template-columns:260px 1fr;gap:56px;align-content:start;
|
|
border-bottom:1px solid var(--border);page-break-after:always}
|
|
.slide.full{display:flex;flex-direction:column;justify-content:center;padding-bottom:96px}
|
|
|
|
/* ---------------- typography ---------------- */
|
|
.kicker{color:var(--accent);font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;margin:0}
|
|
.h1{font-family:var(--font-serif);font-size:clamp(48px,7.4vh,66px);line-height:1.04;font-weight:500;
|
|
font-variation-settings:'opsz' 100;letter-spacing:-.018em;margin:0;color:var(--text-1)}
|
|
.h2{font-family:var(--font-serif);font-size:clamp(38px,6.3vh,46px);line-height:1.08;font-weight:500;
|
|
font-variation-settings:'opsz' 80;letter-spacing:-.014em;margin:0 0 14px;color:var(--text-1)}
|
|
.h1 em,.h2 em{font-style:italic;font-weight:500;color:var(--accent)}
|
|
h4{font-size:20px;line-height:1.3;font-weight:600;margin:0 0 8px;color:var(--text-1)}
|
|
.lede{font-size:20px;line-height:1.65;color:var(--text-2);font-weight:400;max-width:62ch;margin:0}
|
|
.lede b,.dim b{color:var(--text-1)}
|
|
.dim{color:var(--text-2);margin:0}
|
|
|
|
/* ---------------- layout primitives ---------------- */
|
|
.stack>*+*{margin-top:14px}
|
|
.row{display:flex;gap:24px;align-items:center}
|
|
.grid{display:grid;gap:24px}
|
|
.g2{grid-template-columns:repeat(2,1fr)}
|
|
.mt-s{margin-top:8px}.mt-m{margin-top:18px}.mt-l{margin-top:32px}
|
|
|
|
/* ---------------- sidebar (module chrome) ---------------- */
|
|
.sidebar{border-right:1px solid var(--border-strong);padding-right:32px;position:relative}
|
|
.sidebar .brand{font-family:var(--font-serif);font-size:21px;font-weight:600;font-variation-settings:'opsz' 40;color:var(--text-1)}
|
|
.sidebar h5{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:var(--text-3);margin:34px 0 10px}
|
|
.obj-list{list-style:none;padding:0;margin:0;font-size:13.5px;color:var(--text-2);line-height:1.5;counter-reset:obj}
|
|
.obj-list li{padding:9px 0 9px 26px;position:relative;border-bottom:1px solid var(--border);counter-increment:obj}
|
|
.obj-list li::before{content:counter(obj,decimal-leading-zero);position:absolute;left:0;top:10px;
|
|
font-family:var(--font-mono);font-size:11px;color:var(--text-3)}
|
|
.obj-list li.done{color:var(--text-3)}
|
|
.obj-list li.done::before{color:var(--accent)}
|
|
.obj-list li.current{color:var(--text-1);font-weight:700}
|
|
.obj-list li.current::before{color:var(--accent);font-weight:700}
|
|
.obj-list li.current::after{content:"";position:absolute;left:-32px;top:8px;bottom:8px;width:3px;background:var(--accent)}
|
|
.main{min-width:0}
|
|
|
|
/* ---------------- course components ---------------- */
|
|
.callout{border-left:3px solid var(--accent);background:var(--surface-2);padding:20px 24px;margin-top:24px;max-width:65ch}
|
|
.callout b{color:var(--accent)}
|
|
.concept-box{border-top:1px solid var(--border-strong);padding:18px 4px 6px}
|
|
.concept-box h4{margin-top:0;margin-bottom:6px}
|
|
.concept-box .dim{font-size:15px;line-height:1.55;margin:0 0 10px}
|
|
.exercise{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);padding:24px 28px;max-width:70ch}
|
|
.exercise::before{content:"Exercise";display:block;font-size:12px;font-weight:700;letter-spacing:.14em;
|
|
color:var(--accent);margin-bottom:10px;text-transform:uppercase}
|
|
.code{background:#26211a;color:#f0ece1;border-radius:var(--radius);padding:20px 24px;
|
|
font-family:var(--font-mono);font-size:14px;line-height:1.7;overflow:auto;max-width:70ch}
|
|
.code .cmt{color:#928871;font-style:italic}
|
|
.code .kw{color:#e3b577}
|
|
.code .str{color:#8ec6b2}
|
|
.mcq{border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;margin-bottom:10px;
|
|
display:flex;gap:14px;align-items:flex-start;max-width:72ch}
|
|
.mcq .letter{flex:none;width:28px;height:28px;border-radius:50%;border:1.5px solid var(--border-strong);
|
|
display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;color:var(--text-2);
|
|
font-family:var(--font-mono)}
|
|
.mcq.correct{border-color:var(--accent);background:rgba(45,125,110,.06)}
|
|
.mcq.correct .letter{border-color:var(--accent);background:var(--accent);color:#fbfaf6}
|
|
.pill-academic{display:inline-block;padding:5px 12px;border-radius:3px;border:1px solid var(--border-strong);
|
|
font-size:12px;color:var(--text-2);font-family:var(--font-mono)}
|
|
.pill-academic b{color:var(--text-1);font-weight:600}
|
|
|
|
/* ---------------- footer chrome ---------------- */
|
|
.deck-footer{position:absolute;left:80px;right:80px;bottom:40px;display:flex;align-items:baseline;
|
|
justify-content:space-between;font-family:var(--font-mono);font-size:12px;letter-spacing:.02em;color:var(--text-3)}
|
|
.slide-number::before{content:attr(data-current)}
|
|
.slide-number::after{content:" / " attr(data-total)}
|
|
|
|
/* ---------------- full-slide variants ---------------- */
|
|
.slide.full .h1{max-width:20ch;margin-bottom:0}
|
|
.slide.full .lede{margin-top:20px}
|
|
.slide.full .grid.g2{gap:0 40px}
|
|
.slide.full .callout{margin-top:20px}
|
|
|
|
/* ---------------- entrance motion (transform+opacity only, ease-out, staggered) ---------------- */
|
|
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
|
|
.sidebar,.main>*,.slide.full>*{animation:rise .55s var(--ease) both}
|
|
.main>*:nth-child(2),.slide.full>*:nth-child(2){animation-delay:.06s}
|
|
.main>*:nth-child(3),.slide.full>*:nth-child(3){animation-delay:.12s}
|
|
.main>*:nth-child(4),.slide.full>*:nth-child(4){animation-delay:.18s}
|
|
.main>*:nth-child(n+5),.slide.full>*:nth-child(n+5){animation-delay:.24s}
|
|
@media (prefers-reduced-motion:reduce){
|
|
.sidebar,.main>*,.slide.full>*{animation:none}
|
|
}
|
|
|
|
/* ---------------- print ---------------- */
|
|
@media print{
|
|
.slide{border-bottom:none}
|
|
}
|
|
</style></head>
|
|
<body class="tpl-course-module">
|
|
<div class="deck">
|
|
|
|
<!-- 1. Cover -->
|
|
<section class="slide full" data-title="Cover">
|
|
<p class="kicker">OPEN DESIGN · MODULE 01</p>
|
|
<h1 class="h1 mt-s">Open Design: from idea<br>to artifact, <em>on your own machine</em>.</h1>
|
|
<p class="lede mt-l" style="max-width:62ch">In this module you'll set up Open Design — the open-source, local, agent-driven design platform — and go from a one-sentence idea to prototypes, web pages, slides, and HTML video, without your data ever leaving your machine.</p>
|
|
<div class="row mt-l" style="gap:16px">
|
|
<span class="pill-academic">~ 45 min hands-on</span>
|
|
<span class="pill-academic">prereq · a coding agent CLI</span>
|
|
<span class="pill-academic">license · Apache-2.0</span>
|
|
</div>
|
|
<div class="deck-footer"><span>github.com/nexu-io/open-design</span><span class="slide-number" data-current="1" data-total="7"></span></div>
|
|
</section>
|
|
|
|
<!-- 2. Objectives -->
|
|
<section class="slide" data-title="Objectives">
|
|
<aside class="sidebar">
|
|
<div class="brand">Open Design · M01</div>
|
|
<h5>Learning objectives</h5>
|
|
<ul class="obj-list">
|
|
<li class="current">Why Open Design</li>
|
|
<li>Connect an agent</li>
|
|
<li>Generate an artifact</li>
|
|
<li>Ship or film it</li>
|
|
<li>Let memory compound</li>
|
|
</ul>
|
|
<h5>Module progress</h5>
|
|
<p class="dim" style="font-size:13px">Page 2 of 7 · ~5 min in</p>
|
|
</aside>
|
|
<div class="main">
|
|
<p class="kicker">OBJECTIVES</p>
|
|
<h2 class="h2 mt-s">By the end, you will be able to…</h2>
|
|
<div class="stack mt-l">
|
|
<div class="concept-box"><h4>① Explain why Open Design exists.</h4><p class="dim">In April 2026, Claude Design proved an LLM can truly design — but closed-source, paid, cloud-only. Open Design sets that capability free.</p></div>
|
|
<div class="concept-box"><h4>② Connect a coding agent you already have.</h4><p class="dim">Claude Code, Codex, and Cursor are auto-detected from your PATH — 21 coding agents, zero config.</p></div>
|
|
<div class="concept-box"><h4>③ Generate your first real artifact.</h4><p class="dim">The agent reads full context and produces real runnable files, previewed and edited in a sandbox.</p></div>
|
|
<div class="concept-box"><h4>④ Ship it to engineering, or film it.</h4><p class="dim">Hand off the files, or turn them into a marketing video with HyperFrames.</p></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 3. Concept -->
|
|
<section class="slide" data-title="Concept">
|
|
<aside class="sidebar">
|
|
<div class="brand">Open Design · M01</div>
|
|
<h5>Learning objectives</h5>
|
|
<ul class="obj-list">
|
|
<li class="done">Why Open Design</li>
|
|
<li class="current">Connect an agent</li>
|
|
<li>Generate an artifact</li>
|
|
<li>Ship or film it</li>
|
|
<li>Let memory compound</li>
|
|
</ul>
|
|
<h5>Key terms</h5>
|
|
<p class="dim" style="font-size:13px">coding agent · artifact · design system · BYOK</p>
|
|
</aside>
|
|
<div class="main">
|
|
<p class="kicker">CORE CONCEPT</p>
|
|
<h2 class="h2 mt-s">Two parts, always.</h2>
|
|
<p class="lede mt-m">Open Design has exactly two moving parts: the <b>agents</b> already on your machine, and the <b>workflow</b> that wires them into design — full context in, real runnable files out.</p>
|
|
<div class="callout">
|
|
<b>Rule of thumb.</b> Don't rebuild agents — plug them in. Claude Code, Codex, and Cursor on your machine are already powerful; Open Design wires them into a complete design workflow.
|
|
</div>
|
|
<div class="grid g2 mt-l">
|
|
<div class="concept-box"><h4>Your agent</h4><p class="dim">Any of 21 coding agents, auto-detected from PATH — full terminal power, zero config.</p><p class="pill-academic">e.g. <b>claude · codex · cursor</b></p></div>
|
|
<div class="concept-box"><h4>The workflow</h4><p class="dim">Design systems, memory, and a sandboxed preview turn agent output into design artifacts.</p><p class="pill-academic">e.g. <b>idea → artifact</b></p></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 4. Example -->
|
|
<section class="slide" data-title="Example">
|
|
<aside class="sidebar">
|
|
<div class="brand">Open Design · M01</div>
|
|
<h5>Learning objectives</h5>
|
|
<ul class="obj-list">
|
|
<li class="done">Why Open Design</li>
|
|
<li class="done">Connect an agent</li>
|
|
<li class="current">Generate an artifact</li>
|
|
<li>Ship or film it</li>
|
|
<li>Let memory compound</li>
|
|
</ul>
|
|
<h5>Try it yourself</h5>
|
|
<p class="dim" style="font-size:13px">Run the commands on the right, then describe a goal in one sentence in the web UI.</p>
|
|
</aside>
|
|
<div class="main">
|
|
<p class="kicker">WORKED EXAMPLE</p>
|
|
<h2 class="h2 mt-s">First run, 4 commands.</h2>
|
|
<div class="code mt-m"><pre style="margin:0"><span class="cmt"># Open Design runs locally — BYOK, no sign-up</span>
|
|
git <span class="kw">clone</span> <span class="str">https://github.com/nexu-io/open-design</span>
|
|
<span class="kw">cd</span> open-design
|
|
pnpm <span class="kw">install</span>
|
|
pnpm tools-dev <span class="cmt"># starts the daemon + web UI</span></pre></div>
|
|
<div class="callout">
|
|
<b>What just happened.</b> The daemon detected the coding agents on your PATH, the web UI opened locally, and everything from here on is stored on your own machine — under <b>.od/</b>, never in the cloud.
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 5. Exercise -->
|
|
<section class="slide" data-title="Exercise">
|
|
<aside class="sidebar">
|
|
<div class="brand">Open Design · M01</div>
|
|
<h5>Learning objectives</h5>
|
|
<ul class="obj-list">
|
|
<li class="done">Why Open Design</li>
|
|
<li class="done">Connect an agent</li>
|
|
<li class="done">Generate an artifact</li>
|
|
<li class="current">Ship or film it</li>
|
|
<li>Let memory compound</li>
|
|
</ul>
|
|
<h5>Time</h5>
|
|
<p class="dim" style="font-size:13px">~10 minutes · solo</p>
|
|
</aside>
|
|
<div class="main">
|
|
<p class="kicker">EXERCISE 1.1</p>
|
|
<h2 class="h2 mt-s">Generate <em>your first artifact</em>.</h2>
|
|
<p class="lede mt-m">From one sentence to a real, runnable file — in five steps, no design tools required.</p>
|
|
<div class="exercise mt-l">
|
|
<p style="margin:0;font-size:18px;color:var(--text-1)"><b>Your task</b></p>
|
|
<ol style="color:var(--text-2);line-height:1.8;margin:10px 0 0">
|
|
<li>Pick a starting point — describe your goal in one sentence, or start from a template or plugin.</li>
|
|
<li>Set the visual direction — palette, type, and spacing flow into generation automatically.</li>
|
|
<li>Generate — the agent produces real runnable files, previewed and edited in a sandbox.</li>
|
|
<li>Bonus: turn the result into a marketing short with HyperFrames (HTML → MP4).</li>
|
|
</ol>
|
|
</div>
|
|
<p class="dim mt-m" style="font-size:14px">Stuck? Remember: every choice you make becomes context for the next run — memory compounds.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 6. Check understanding -->
|
|
<section class="slide" data-title="Check">
|
|
<aside class="sidebar">
|
|
<div class="brand">Open Design · M01</div>
|
|
<h5>Learning objectives</h5>
|
|
<ul class="obj-list">
|
|
<li class="done">Why Open Design</li>
|
|
<li class="done">Connect an agent</li>
|
|
<li class="done">Generate an artifact</li>
|
|
<li class="done">Ship or film it</li>
|
|
<li class="current">Let memory compound</li>
|
|
</ul>
|
|
<h5>Self-assess</h5>
|
|
<p class="dim" style="font-size:13px">You should get 3/3.</p>
|
|
</aside>
|
|
<div class="main">
|
|
<p class="kicker">CHECK YOUR UNDERSTANDING</p>
|
|
<h2 class="h2 mt-s">Which statement about Open Design is true?</h2>
|
|
<div class="mt-l">
|
|
<div class="mcq"><div class="letter">A</div><div><b>It is locked to a single model from a single vendor</b><p class="dim" style="font-size:13px;margin:4px 0 0">No — full-stack BYOK: Anthropic, OpenAI, Azure, Google, plus 14 media providers.</p></div></div>
|
|
<div class="mcq correct"><div class="letter">B</div><div><b>It plugs into the coding agents already on your machine</b><p class="dim" style="font-size:13px;margin:4px 0 0"><b style="color:var(--accent)">✓ Correct.</b> 21 coding agents auto-detected from PATH — zero config.</p></div></div>
|
|
<div class="mcq"><div class="letter">C</div><div><b>You need a paid cloud account and a sign-up to start</b><p class="dim" style="font-size:13px;margin:4px 0 0">No — Apache-2.0, runs locally, BYOK, no sign-up required.</p></div></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 7. Summary -->
|
|
<section class="slide full" data-title="Summary">
|
|
<p class="kicker">SUMMARY · MODULE 01</p>
|
|
<h1 class="h1 mt-s">Frontier AI design, back on <em>your</em> desk.</h1>
|
|
<div class="grid g2 mt-l">
|
|
<div class="concept-box"><h4>✓ Explain why Open Design</h4><p class="dim">Open-source, local, agent-driven — Apache-2.0, BYOK, no sign-up.</p></div>
|
|
<div class="concept-box"><h4>✓ Connect your agents</h4><p class="dim">21 coding agents, auto-detected from PATH, zero config.</p></div>
|
|
<div class="concept-box"><h4>✓ Generate real artifacts</h4><p class="dim">Prototypes, slides, posters, dashboards — runnable files, not mockups.</p></div>
|
|
<div class="concept-box"><h4>✓ Let memory compound</h4><p class="dim">Every choice becomes context for the next run.</p></div>
|
|
</div>
|
|
<div class="callout mt-l">
|
|
<b>Up next.</b> Open · Local · Agent-native — download Open Design (macOS / Windows) and join 60K+ stars & 300+ contributors: github.com/nexu-io/open-design · discord.gg/mHAjSMV6gz · x.com/nexudotio
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</body></html>
|