docs: rebuild README, ROADMAP, CONTRIBUTING, banner as blueprint manual
Aligns the repo's docs with the new website aesthetic (cream + blueprint, print-manual tone) without breaking site/build.js, which parses README + ROADMAP + glossary into site/data.js. assets/banner.svg Replaces the dark gradient + coral coral banner with a cream + blueprint reference-manual banner: VT323 wordmark, dotted-paper background, FIG_000 caption, isometric stack diagram of the 20-phase curriculum, ASCII rule band along the bottom edge. README.md (-640 lines) Drops the marketing intro: hype quote, "Why This Course?" comparison table, "AI-Native Learning" prose, "Built-in Skills" table, "Every Lesson Ships Something" four-card row, the colorful 20-phase pill nav, decorative emojis throughout headings, the per-lesson Type shield image ( → plain "Build" / "Learn"), and the per-lesson Lang emoji flags (🐍 🟦 🦀 🟣 ⚛️ → plain "Python, TypeScript, Rust" — both forms are parser-equivalent in build.js). Adds a manual-style preface, terse "How each lesson is built" structural doc, monochrome blueprint-themed shields.io badges (license, lessons, phases, stars, web), and a contents anchor. Phase 0 heading switches from the shield-image form to the plain ### Phase 0: Setup & Tooling `12 lessons` form (build.js supports both). Phase 1-19 <details> headers drop their decorative emoji prefix (🟣 🔵 🟢 🟠 …) — build.js's <summary> regex makes the prefix optional. Verified: node site/build.js diff before/after shows identical phase count (20), lesson count (416), glossary terms (83), and identical PHASES content modulo Phase 0's description (emoji + asterisks dropped on purpose). All 416 lesson rows preserved with correct types/langs. ROADMAP.md Lighter touch: keeps the ✅ 🚧 ⬚ status glyphs (parser-critical), adds a one-line note that build.js parses these glyphs and they must not change shape, slight cleanup of the legend separator. CONTRIBUTING.md Adds a load-bearing section for new contributors: explains that README and ROADMAP feed site/build.js, lists the parser-critical patterns (phase header forms, lesson table column shape, status glyphs), and gives the validation command (run node site/build.js, git diff site/data.js should be timestamp-only). Replaces the "Thank you for wanting to make AI education better for everyone" opener with a more direct intro and adds a Style section that matches the manual's voice. site/data.js Auto-regenerated by node site/build.js. Only field that changes is PHASES[0].desc (Phase 0 description, which we intentionally rewrote to drop the emoji + italics).
This commit is contained in:
+30
-2
@@ -1,6 +1,26 @@
|
||||
# Contributing to AI Engineering from Scratch
|
||||
# Contributing
|
||||
|
||||
Thank you for wanting to make AI education better for everyone.
|
||||
Lessons, translations, fixes, outputs — all welcome. One contribution per pull
|
||||
request keeps reviews fast and lets contributor counts and credit work
|
||||
correctly.
|
||||
|
||||
## Important: the README and ROADMAP feed the website
|
||||
|
||||
`site/build.js` parses `README.md`, `ROADMAP.md`, and `glossary/terms.md` to
|
||||
generate `site/data.js`. Two patterns must stay intact in any pull request that
|
||||
touches those files:
|
||||
|
||||
- Phase headers in either `### Phase N: Name \`X lessons\`` form or
|
||||
`<details><summary><b>Phase N — Name</b> ... <code>X lessons</code> ... <em>Description</em></summary>` form.
|
||||
- Lesson tables with the column shape `| # | Lesson | Type | Lang |` (or
|
||||
`| # | Project | Combines | Lang |` for capstone tables). The `Lang` column
|
||||
accepts plain text (`Python, TypeScript`) or the legacy emoji flags
|
||||
(`🐍 🟦 🦀 🟣 ⚛️`); both are parser-equivalent.
|
||||
- ROADMAP status glyphs (`✅`, `🚧`, `⬚`) on phase headers and lesson rows.
|
||||
Do not replace them with text — the parser keys off the exact characters.
|
||||
|
||||
Run `node site/build.js` after editing those files; `git diff site/data.js`
|
||||
should show only the timestamp change if your edit was structural-safe.
|
||||
|
||||
## Ways to Contribute
|
||||
|
||||
@@ -133,3 +153,11 @@ More exercises and projects are always welcome, especially ones that connect mul
|
||||
## Code of Conduct
|
||||
|
||||
See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Be kind, be helpful, be constructive.
|
||||
|
||||
## Style
|
||||
|
||||
- Direct prose. Cut filler. Match the manual's tone, not marketing copy.
|
||||
- No decorative emojis in headings. Lang column emoji flags are the one
|
||||
exception and only because the parser maps them.
|
||||
- Code runs as-is with the dependencies listed in the lesson.
|
||||
- Build from scratch first, framework second.
|
||||
|
||||
+5
-3
@@ -1,10 +1,12 @@
|
||||
# Roadmap
|
||||
|
||||
Progress tracking for every phase and lesson.
|
||||
Status tracker for every phase and lesson. The status glyphs in this file feed
|
||||
the website (`site/build.js` parses them into `site/data.js`); do not change
|
||||
their shape.
|
||||
|
||||
**Total estimated time: ~304 hours (at your own pace)**
|
||||
Total estimated time: ~304 hours, at your own pace.
|
||||
|
||||
**Legend:** ✅ Complete | 🚧 In Progress | ⬚ Planned
|
||||
**Legend:** ✅ Complete · 🚧 In Progress · ⬚ Planned
|
||||
|
||||
## Phase 0: Setup & Tooling — ✅ (~14 hours)
|
||||
|
||||
|
||||
+91
-119
@@ -1,132 +1,104 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="340" viewBox="0 0 1200 340">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="360" viewBox="0 0 1200 360" role="img" aria-label="AI Engineering from Scratch — reference manual banner">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#191A23;stop-opacity:1" />
|
||||
<stop offset="40%" style="stop-color:#1E1F2A;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#191A23;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="coral" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#D97757;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#E08B6D;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="coralFade" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#D97757;stop-opacity:0.15" />
|
||||
<stop offset="100%" style="stop-color:#D97757;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="nodeGlow" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#D97757;stop-opacity:0.6" />
|
||||
<stop offset="100%" style="stop-color:#D97757;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<filter id="glow">
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<filter id="softGlow">
|
||||
<feGaussianBlur stdDeviation="8" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<pattern id="paper" x="0" y="0" width="16" height="16" patternUnits="userSpaceOnUse">
|
||||
<circle cx="0" cy="0" r="1" fill="#1a1a1a" fill-opacity="0.08"/>
|
||||
</pattern>
|
||||
<pattern id="paperRule" x="0" y="0" width="100" height="6" patternUnits="userSpaceOnUse">
|
||||
<rect width="4" height="3" fill="#3553ff"/>
|
||||
<rect x="8" y="3" width="6" height="3" fill="#3553ff" fill-opacity="0.35"/>
|
||||
</pattern>
|
||||
<style>
|
||||
.face { fill: rgba(53, 83, 255, 0.06); }
|
||||
.face-strong { fill: rgba(53, 83, 255, 0.18); }
|
||||
.stroke-bp { stroke: #3553ff; fill: none; stroke-linejoin: miter; stroke-linecap: square; }
|
||||
.mono { font-family: 'JetBrains Mono', ui-monospace, Consolas, monospace; }
|
||||
.display { font-family: 'VT323', ui-monospace, monospace; font-weight: 400; }
|
||||
.serif { font-family: 'Source Serif 4', Georgia, serif; }
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="340" fill="url(#bg)"/>
|
||||
<rect width="1200" height="360" fill="#fafaf5"/>
|
||||
<rect width="1200" height="360" fill="url(#paper)"/>
|
||||
|
||||
<rect x="0" y="0" width="1200" height="340" fill="url(#coralFade)" opacity="0.3"/>
|
||||
|
||||
<g opacity="0.12">
|
||||
<line x1="0" y1="68" x2="1200" y2="68" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="0" y1="136" x2="1200" y2="136" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="0" y1="204" x2="1200" y2="204" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="0" y1="272" x2="1200" y2="272" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="240" y1="0" x2="240" y2="340" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="480" y1="0" x2="480" y2="340" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="720" y1="0" x2="720" y2="340" stroke="#32333F" stroke-width="0.5"/>
|
||||
<line x1="960" y1="0" x2="960" y2="340" stroke="#32333F" stroke-width="0.5"/>
|
||||
<g class="mono" font-size="11" letter-spacing="2.4" fill="#3553ff">
|
||||
<text x="48" y="44">FIG_000 — REFERENCE MANUAL V1.0</text>
|
||||
</g>
|
||||
<g class="mono" font-size="11" letter-spacing="2.4" fill="#7a7a78" text-anchor="end">
|
||||
<text x="1152" y="44">© 2026 · OPEN SOURCE · MIT LICENSE</text>
|
||||
</g>
|
||||
|
||||
<g opacity="0.25" filter="url(#softGlow)">
|
||||
<line x1="60" y1="220" x2="140" y2="180" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="140" y1="180" x2="200" y2="200" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="200" y1="200" x2="260" y2="160" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="260" y1="160" x2="340" y2="190" stroke="#D97757" stroke-width="1.2"/>
|
||||
<circle cx="60" cy="220" r="3.5" fill="#D97757"/>
|
||||
<circle cx="140" cy="180" r="4.5" fill="#D97757"/>
|
||||
<circle cx="200" cy="200" r="3" fill="#E08B6D"/>
|
||||
<circle cx="260" cy="160" r="5" fill="#D97757"/>
|
||||
<circle cx="340" cy="190" r="3.5" fill="#E08B6D"/>
|
||||
<g transform="translate(48, 96)">
|
||||
<text class="display" x="0" y="80" font-size="96" letter-spacing="2" fill="#3553ff">AI ENGINEERING</text>
|
||||
<text class="display" x="0" y="172" font-size="96" letter-spacing="2" fill="#1a1a1a">FROM SCRATCH.</text>
|
||||
</g>
|
||||
|
||||
<g opacity="0.25" filter="url(#softGlow)">
|
||||
<line x1="860" y1="190" x2="920" y2="155" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="920" y1="155" x2="980" y2="175" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="980" y1="175" x2="1050" y2="145" stroke="#D97757" stroke-width="1.2"/>
|
||||
<line x1="1050" y1="145" x2="1130" y2="170" stroke="#D97757" stroke-width="1.2"/>
|
||||
<circle cx="860" cy="190" r="4" fill="#E08B6D"/>
|
||||
<circle cx="920" cy="155" r="3.5" fill="#D97757"/>
|
||||
<circle cx="980" cy="175" r="5" fill="#D97757"/>
|
||||
<circle cx="1050" cy="145" r="3" fill="#E08B6D"/>
|
||||
<circle cx="1130" cy="170" r="4" fill="#D97757"/>
|
||||
<g class="serif" font-size="16" fill="#1a1a1a">
|
||||
<text x="48" y="296">A reference manual for people who want to design and build AI systems from first principles.</text>
|
||||
</g>
|
||||
<g class="mono" font-size="11" letter-spacing="2" fill="#7a7a78">
|
||||
<text x="48" y="320">20 PHASES · 280+ LESSONS · PYTHON · TYPESCRIPT · RUST · JULIA</text>
|
||||
</g>
|
||||
|
||||
<g opacity="0.15">
|
||||
<line x1="140" y1="180" x2="920" y2="155" stroke="#D97757" stroke-width="0.5" stroke-dasharray="4,8"/>
|
||||
<line x1="260" y1="160" x2="1050" y2="145" stroke="#D97757" stroke-width="0.5" stroke-dasharray="4,8"/>
|
||||
<g transform="translate(820, 100)">
|
||||
<g class="mono" font-size="9" letter-spacing="2" fill="#3553ff">
|
||||
<text x="0" y="-8">FIG_000.A — CURRICULUM STACK</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(56, 168)">
|
||||
<polygon class="face-strong" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">AGENTS · SWARMS · PRODUCTION</text>
|
||||
</g>
|
||||
<g transform="translate(48, 142)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">LLMS · TRANSFORMERS · MULTIMODAL</text>
|
||||
</g>
|
||||
<g transform="translate(40, 116)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">VISION · SPEECH · NLP</text>
|
||||
</g>
|
||||
<g transform="translate(32, 90)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">DEEP LEARNING · RL</text>
|
||||
</g>
|
||||
<g transform="translate(24, 64)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">ML FUNDAMENTALS</text>
|
||||
</g>
|
||||
<g transform="translate(16, 38)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">MATH FOUNDATIONS</text>
|
||||
</g>
|
||||
<g transform="translate(8, 12)">
|
||||
<polygon class="face" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<polygon class="stroke-bp" stroke-width="1.4" points="0,0 160,-46 280,-22 120,24"/>
|
||||
<text class="mono" x="20" y="14" font-size="9" letter-spacing="1.6" fill="#3553ff">SETUP & TOOLING</text>
|
||||
</g>
|
||||
|
||||
<g class="stroke-bp" stroke-width="0.8" stroke-dasharray="3 3">
|
||||
<line x1="312" y1="-12" x2="372" y2="-12"/>
|
||||
<line x1="304" y1="14" x2="372" y2="14"/>
|
||||
<line x1="296" y1="40" x2="372" y2="40"/>
|
||||
<line x1="288" y1="66" x2="372" y2="66"/>
|
||||
<line x1="280" y1="92" x2="372" y2="92"/>
|
||||
<line x1="272" y1="118" x2="372" y2="118"/>
|
||||
<line x1="264" y1="144" x2="372" y2="144"/>
|
||||
</g>
|
||||
<g class="mono" font-size="9" letter-spacing="2" fill="#7a7a78">
|
||||
<text x="382" y="-9">PHASE 00</text>
|
||||
<text x="382" y="17">PHASE 01</text>
|
||||
<text x="382" y="43">PHASE 02 · 03 · 09</text>
|
||||
<text x="382" y="69">PHASE 04 · 05 · 06</text>
|
||||
<text x="382" y="95">PHASE 07 · 08 · 12</text>
|
||||
<text x="382" y="121">PHASE 10 · 11 · 13</text>
|
||||
<text x="382" y="147">PHASE 14–19</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g opacity="0.3">
|
||||
<circle cx="90" cy="40" r="1.5" fill="#D97757"/>
|
||||
<circle cx="250" cy="55" r="1" fill="#E08B6D"/>
|
||||
<circle cx="420" cy="35" r="1.5" fill="#D97757"/>
|
||||
<circle cx="580" cy="50" r="1" fill="#E08B6D"/>
|
||||
<circle cx="780" cy="38" r="1.5" fill="#D97757"/>
|
||||
<circle cx="950" cy="55" r="1" fill="#E08B6D"/>
|
||||
<circle cx="1100" cy="42" r="1.5" fill="#D97757"/>
|
||||
<circle cx="170" cy="305" r="1" fill="#E08B6D"/>
|
||||
<circle cx="450" cy="315" r="1.5" fill="#D97757"/>
|
||||
<circle cx="750" cy="308" r="1" fill="#E08B6D"/>
|
||||
<circle cx="1020" cy="320" r="1.5" fill="#D97757"/>
|
||||
</g>
|
||||
|
||||
<text x="600" y="95" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="52" font-weight="800" fill="#E8E6E3" text-anchor="middle" letter-spacing="-1.5">
|
||||
AI Engineering
|
||||
</text>
|
||||
<text x="600" y="138" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="28" font-weight="300" fill="#908F8B" text-anchor="middle" letter-spacing="8">
|
||||
FROM SCRATCH
|
||||
</text>
|
||||
|
||||
<rect x="400" y="152" width="400" height="2.5" rx="1.25" fill="url(#coral)" opacity="0.7"/>
|
||||
|
||||
<text x="600" y="190" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="15" fill="#908F8B" text-anchor="middle" letter-spacing="1">
|
||||
Learn it. Build it. Ship it for others.
|
||||
</text>
|
||||
|
||||
<g>
|
||||
<text x="600" y="228" font-family="'SF Mono', 'Fira Code', 'Cascadia Code', monospace" font-size="13" fill="#555460" text-anchor="middle" letter-spacing="0.5">
|
||||
260+ lessons · 20 phases · 60 complete · Math to Agent Swarms
|
||||
</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(365, 252)">
|
||||
<rect x="0" y="0" width="82" height="28" rx="14" fill="rgba(217,119,87,0.1)" stroke="#D97757" stroke-width="1"/>
|
||||
<text x="41" y="18" font-family="'SF Mono', 'Fira Code', monospace" font-size="11" fill="#D97757" text-anchor="middle">Python</text>
|
||||
|
||||
<rect x="96" y="0" width="106" height="28" rx="14" fill="rgba(217,119,87,0.06)" stroke="#908F8B" stroke-width="0.8"/>
|
||||
<text x="149" y="18" font-family="'SF Mono', 'Fira Code', monospace" font-size="11" fill="#908F8B" text-anchor="middle">TypeScript</text>
|
||||
|
||||
<rect x="216" y="0" width="68" height="28" rx="14" fill="rgba(217,119,87,0.06)" stroke="#908F8B" stroke-width="0.8"/>
|
||||
<text x="250" y="18" font-family="'SF Mono', 'Fira Code', monospace" font-size="11" fill="#908F8B" text-anchor="middle">Rust</text>
|
||||
|
||||
<rect x="298" y="0" width="68" height="28" rx="14" fill="rgba(217,119,87,0.06)" stroke="#908F8B" stroke-width="0.8"/>
|
||||
<text x="332" y="18" font-family="'SF Mono', 'Fira Code', monospace" font-size="11" fill="#908F8B" text-anchor="middle">Julia</text>
|
||||
</g>
|
||||
|
||||
<g opacity="0.08">
|
||||
<text x="600" y="330" font-family="system-ui, sans-serif" font-size="10" fill="#E8E6E3" text-anchor="middle" letter-spacing="2">
|
||||
OPEN SOURCE · MIT LICENSE · ROHITG00
|
||||
</text>
|
||||
</g>
|
||||
<rect x="0" y="354" width="1200" height="6" fill="url(#paperRule)"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 5.4 KiB |
+2
-2
@@ -1,12 +1,12 @@
|
||||
// Auto-generated by build.js — do not edit manually.
|
||||
// Last built: 2026-05-08T11:17:38.687Z
|
||||
// Last built: 2026-05-09T12:32:56.925Z
|
||||
|
||||
const PHASES = [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "Setup & Tooling",
|
||||
"status": "complete",
|
||||
"desc": "🛠️ *Get your environment ready for everything that follows.*",
|
||||
"desc": "Get your environment ready for everything that follows.",
|
||||
"lessons": [
|
||||
{
|
||||
"name": "Dev Environment",
|
||||
|
||||
Reference in New Issue
Block a user