diff --git a/README.md b/README.md index 860cd5f..29fa707 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Drop your pitch deck, market research, business plan, competitor notes and call > Every company, customer, metric and transcript used as an example in this repo is invented. Nothing here is drawn from any real client engagement. -[**New to working with AI**](docs/ai-basics.md) · [**What the words mean**](docs/what-things-are.md) · [**The method**](docs/method.md) · [**Build the knowledge base**](docs/knowledge-base.md) · [**Prompt library**](prompts/INDEX.md) · [**For coaches**](docs/for-coaches.md) · [**For programmes**](docs/for-portfolios.md) · [**Quickstart**](QUICKSTART.md) +[**New to working with AI**](docs/ai-basics.md) · [**What the words mean**](docs/what-things-are.md) · [**The infographics**](docs/infographics.md) · [**The method**](docs/method.md) · [**Build the knowledge base**](docs/knowledge-base.md) · [**Prompt library**](prompts/INDEX.md) · [**For coaches**](docs/for-coaches.md) · [**For programmes**](docs/for-portfolios.md) · [**Quickstart**](QUICKSTART.md) [![Read it as a site](https://img.shields.io/badge/read%20it%20as%20a%20site-fritzhand.github.io%2Fstartup--stack-0b5a86?style=flat-square)](https://fritzhand.github.io/startup-stack/) ![No code required](https://img.shields.io/badge/code%20required-none-0E6B63?style=flat-square) @@ -63,11 +63,11 @@ There is a second reader, and the repo now serves them too: the **programme** ru | [`stack/`](stack/) | **The templates.** Ten numbered sections — company, customer, market, product, GTM, operations, money, capital, brand, pulse — one markdown file each, with front matter. [`stack/INDEX.md`](stack/INDEX.md) is the router an AI reads first, and [`stack/CONTEXT.md`](stack/CONTEXT.md) is the one-pager it reads next. This *becomes* your knowledge base; you fill it in, you do not copy it out. | | [`prompts/`](prompts/INDEX.md) | **The prompt library.** 19 prompts: bootstrap, gap scan, competitive intelligence, unit economics, the list of 100, the pitch deck, fundraise readiness, the weekly recap, meeting-to-actions, and the adversarial review that tells you what an investor will attack. Each opens with a `Requires:` line and stops if what it needs is missing. Most want a filled-in stack; [`00`](prompts/00-bootstrap-the-stack.md), [`14`](prompts/14-meeting-to-actions.md) and [`15`](prompts/15-scrape-a-site.md) run against an empty one, which is how a stack starts to fill. The last three belong to `portfolio/` and never touch a founder's stack. | | [`worksheets/`](worksheets/) | **The repeatable artifacts.** Fill-in files you produce over and over: startup-prep, customer interview, competitor profile, two-week experiment, SOP entry, trade/order sheet, advisor scope letter, one-pager, list of 100, weekly recap. | -| [`docs/`](docs/) | **The method, in thirteen pages.** New to any of this: [AI basics](docs/ai-basics.md) and [what the words mean](docs/what-things-are.md) — the terminal, an editor, Git, GitHub, connectors, model tiers — each in plain language with a diagram. The method: [why it works](docs/method.md), [building the knowledge base](docs/knowledge-base.md), [the front-matter schema](docs/front-matter.md), [getting your material in](docs/getting-material-in.md) source by source, and [website to inbox](docs/scraping.md). Running it: [the weekly recap](docs/weekly-recap.md), [for coaches](docs/for-coaches.md), [the safety rules](docs/safety.md) for giving an AI access to your files, and [on a schedule](docs/automation.md) — recipes for Microsoft 365, Google Workspace, Zoom, Slack, and none of them. Two are for programmes only: [for programmes](docs/for-portfolios.md) and [the exchange folder](docs/exchange.md). | +| [`docs/`](docs/) | **The method, in eighteen pages.** New to any of this: [AI basics](docs/ai-basics.md) and [what the words mean](docs/what-things-are.md) — the terminal, an editor, Git, GitHub, connectors, model tiers — each in plain language with a diagram. The method: [why it works](docs/method.md), [building the knowledge base](docs/knowledge-base.md), [the front-matter schema](docs/front-matter.md), [getting your material in](docs/getting-material-in.md) source by source, and [website to inbox](docs/scraping.md). Running it: [the weekly recap](docs/weekly-recap.md), [for coaches](docs/for-coaches.md), [the safety rules](docs/safety.md) for giving an AI access to your files, and [on a schedule](docs/automation.md) — recipes for Microsoft 365, Google Workspace, Zoom, Slack, and none of them. Two are for programmes only: [for programmes](docs/for-portfolios.md) and [the exchange folder](docs/exchange.md). And [the infographics](docs/infographics.md) — thirty pictures across four pages, covering [what AI is](docs/infographics-ai.md), [the tools](docs/infographics-tools.md), [the method](docs/infographics-method.md) and [running a portfolio](docs/infographics-portfolio.md); take them for a workshop. | | [`portfolio/`](portfolio/) | **Optional — for a programme, not a founder.** The templates an incubator, accelerator or studio uses to run this across many companies: a router, a 1-to-5 maturity rubric per function, the cross-company theme scan, and a company folder to copy. Delete it if you are a founder. See [docs/for-portfolios.md](docs/for-portfolios.md). | | [`_inbox/`](_inbox/) | Where raw material lands before it is processed. Git-ignored by default. | | [`tools/`](tools/) | **Optional.** One script that turns a website into citable markdown in `_inbox/`. You never need it — it saves an hour of copy-and-paste. See [docs/scraping.md](docs/scraping.md). | -| [`web/`](web/) | **This project's own site**, generated from the markdown in this repo. Not part of your stack — delete it when you fork. | +| [`web/`](web/) | **This project's own site**, generated from the markdown in this repo, plus [`web/infographics/`](web/infographics) — the thirty images the infographics pages show. Not part of your stack — delete it when you fork, but take the infographics first if you want them. | ## Quickstart diff --git a/docs/infographics-ai.md b/docs/infographics-ai.md new file mode 100644 index 0000000..8ff1cf7 --- /dev/null +++ b/docs/infographics-ai.md @@ -0,0 +1,59 @@ +# Infographics — what AI is + +Eight pictures covering the foundations: what a language model actually is, how one gets built, what people mean by weights, why the models keep improving, and what changes when the same model is put in a different place. Nothing here is specific to this repository. Take any of it for a workshop. + +Click an image to open it at full size. + +--- + +## What this thing actually is + +The plain description, with no metaphor that misleads. A model predicts the next piece of text, repeatedly. Everything useful about it and everything dangerous about it follow from that one sentence. + +![A plain description of a large language model: it predicts the next piece of text, one piece at a time. What follows from that — fluency, format, patience — and what also follows: it produces the plausible continuation rather than the true one.](../web/infographics/what-this-thing-actually-is.webp) + +## How a model gets made + +Four stages — gather, pre-train, fine-tune, align — and the reason a new version arrives faster than the cost of the first one would suggest. + +![The four stages of building a language model, from an enormous cleaned corpus through pre-training, fine-tuning on good conversations, and alignment against human preference.](../web/infographics/how-a-model-gets-made.webp) + +## What weights actually mean + +The part of a model that *is* the model: a very large list of numbers, none of them written by a person, none of them readable afterwards. This is also where open weights and closed weights get explained, which is the choice that matters if you work under a confidentiality obligation. + +![Weights explained as the numbers on the connections in a network, adjusted trillions of times during training. Open weights versus closed weights, and why the trade is capability against control.](../web/infographics/what-weights-actually-means.webp) + +## The loops that make models improve + +Four feedback cycles — human preference, AI feedback, verifiable rewards, synthetic data — and an honest note on where each one stops working. + +![Four self-improvement loops in model training, and the limits of each: no compiler exists for 'is this good strategic advice'.](../web/infographics/the-loops-that-make-models-improve.webp) + +## The same model in four different places + +Website, desktop app with connectors, editor, API. The model is identical in all four. What differs is what it can see and what it is allowed to do — and that difference is most of the reason two people get different results from the same question. + +![One model shown across four surfaces — web chat, desktop app with connectors, an IDE, and the API — with what each one can see and what it may do.](../web/infographics/the-same-model-four-places.webp) + +## What agentic actually means + +The difference between asking for text and delegating a task, and the inner loop — plan, act, observe, check — that makes the second one possible. + +![Assistant versus agent, and the plan-act-observe-check loop at the centre of agentic work, with the three things it requires: tools, visibility of results, and a stopping condition.](../web/infographics/what-agentic-actually-means.webp) + +## Which model should I use + +Three tiers, a separate dial for thinking effort, and the rule of thumb that saves the most money: start in the middle and move for a reason. + +![Model tiers from small and fast to largest, the separate effort dial, and the context window explained as the desk the model works at.](../web/infographics/which-model-should-i-use.webp) + +## Where your words actually go + +What happens between pressing enter and getting an answer, and why it explains the three things that puzzle people most: rising cost in long threads, forgetting the start of a conversation, and why an index is a cost decision rather than a tidiness preference. + +![The path from a typed question through context assembly, tokenisation, the model, and streamed output — and why a long conversation gets slower and dearer with every turn.](../web/infographics/where-your-words-actually-go.webp) + +--- + +Next: [the tools](infographics-tools.md) — terminal, Git, Node, databases and the rest of the words. diff --git a/docs/infographics-method.md b/docs/infographics-method.md new file mode 100644 index 0000000..61e7be7 --- /dev/null +++ b/docs/infographics-method.md @@ -0,0 +1,79 @@ +# Infographics — the method + +Nine pictures of what this repository actually describes. Together they are the whole method: how scattered files become a knowledge base, how it stays honest, how material keeps arriving, and what you do with it every week. + +Click an image to open it at full size. + +--- + +## The Startup Stack method + +The whole thing on one page. Raw material on the left, ten sections in the middle, the work that comes out on the right, and the three loops that keep it alive. + +![Scattered company files becoming a ten-section knowledge base, and the work that comes out of it — with the three loops: build, enrich, pulse.](../web/infographics/the-startup-stack-method.webp) + +The written version is [the method](method.md). + +## How the AI answers without reading everything + +Why an index makes a knowledge base cheaper as it grows rather than dearer. This is the single idea that most people miss, and it is the reason the whole thing is structured the way it is. + +![A question routed through the rules file and a one-line-per-file index to two sections, against the alternative of re-reading everything on every question.](../web/infographics/how-ai-answers-without-reading-everything.webp) + +## The ten sections + +The fixed spine every stack shares, the dependencies between them, and the part that is genuinely yours to decide. + +![The ten sections from company to pulse, with dependency arrows, and the distinction between the fixed numbering and the files you put inside each one.](../web/infographics/the-ten-sections.webp) + +The written version is [build the knowledge base](knowledge-base.md). + +## How every fact gets tagged + +The quality system that stops an AI inventing your numbers. Four tags, who is allowed to apply each, the one-way promotion only a human may perform, and the fifth tag that exists because judgement is not a checkable claim. + +![The four fact tags with who may apply each, the human-only promotion arrow, and the assessment tag held separately.](../web/infographics/how-every-fact-gets-tagged.webp) + +## Front matter, line by line + +Eleven fields annotated with the one thing that breaks when each is wrong. Thirty seconds to write; the difference between a router and a pile. + +![A real front-matter block with leader lines out to what each field does and what breaks without it.](../web/infographics/front-matter-line-by-line.webp) + +The written version is [the front matter schema](front-matter.md). + +## Getting your material in + +Three routes from wherever your company lives today into one folder, and the list of what stays out whichever route you take. + +![Export by hand, connectors and website scraping, all converging on one inbox folder, with the material that stays out of all three.](../web/infographics/getting-your-material-in.webp) + +The written version is [getting your material in](getting-material-in.md). + +## Putting the pull on a schedule + +Connecting a subscription to mail and drive without mirroring your inbox — the setup, the weekly cycle, the daily-or-weekly question, and the monthly audit that most people skip. + +![Connector setup, a weekly pull cycle landing in the inbox folder, the daily versus weekly trade, and the monthly audit.](../web/infographics/putting-the-pull-on-schedule.webp) + +The written version is [running it on a schedule](automation.md). + +## Private master, shared derived + +How one stack produces four different documents without leaking. Three sensitivity bands, four outputs, and one band that never leaves the machine at all. + +![A stack in three sensitivity bands feeding four different outputs, with the restricted band drawn outside the boundary entirely.](../web/infographics/private-master-shared-derived.webp) + +The written version is [the safety rules](safety.md). + +## The weekly recap + +Thirty minutes, six sections, and the only part of this system that compounds. Including the arrow that brings last week's unmet commitments back as this week's uncomfortable question. + +![The six sections of a weekly recap as a loop, with last week's commitments returning as this week's 'what did not move', and the carve for each audience.](../web/infographics/the-weekly-recap.webp) + +The written version is [the weekly recap](weekly-recap.md). + +--- + +Next: [running a portfolio](infographics-portfolio.md) — the layer for a programme rather than a single founder. diff --git a/docs/infographics-portfolio.md b/docs/infographics-portfolio.md new file mode 100644 index 0000000..7591ad8 --- /dev/null +++ b/docs/infographics-portfolio.md @@ -0,0 +1,35 @@ +# Infographics — running a portfolio + +Three pictures of the layer that sits above a single founder: what an incubator, accelerator, studio or university programme keeps for itself, and how it does that without holding anybody's master copy. + +Click an image to open it at full size. The written version is [for programmes](for-portfolios.md). + +--- + +## Running this across a portfolio + +The three-zone architecture. The founder's stack on the left under their control, the programme's record on the right built from what coaches already produce, and a deliberately thin shared folder between them. + +Including the constraint that defeats most attempts at this: you almost certainly hold no equity, so any system that depends on founder discipline is accurate for about three weeks. + +![Three zones — the founder's stack, a two-door shared folder, and the programme's record — with the note that neither side's master lives in the middle.](../web/infographics/running-this-across-a-portfolio.webp) + +## Every session becomes two files + +Why the factual record and the coach's read must never be the same document, and the test that decides which one a sentence belongs in: said out loud in the room, or thought and not said. + +![One coaching session forking into a factual record for the founder and an attributed read for the coach team, with the divider test between them.](../web/infographics/every-session-becomes-two-files.webp) + +The written version is [the exchange folder](exchange.md). + +## What stage are they really at + +Five maturity levels scored on evidence rather than on funding, revenue or headcount — and the one step a programme can actually cause. + +![Five levels from asserted to managed, with the jump from written to evidenced highlighted, and the list of things a level is not.](../web/infographics/what-stage-are-they-really-at.webp) + +The written version is [the maturity rubric](../portfolio/rubric.md). + +--- + +Back to [all the infographics](infographics.md). diff --git a/docs/infographics-tools.md b/docs/infographics-tools.md new file mode 100644 index 0000000..1e2ac0d --- /dev/null +++ b/docs/infographics-tools.md @@ -0,0 +1,73 @@ +# Infographics — the tools + +Ten pictures explaining the words you will hear and be expected to nod along to. Most of them are not things a founder building a knowledge base has to learn — they are things a founder has to stop being intimidated by. + +If you only look at one, look at the first. It shows which layer each of the others lives on, which is the part nobody explains. + +Click an image to open it at full size. The written version of most of this is [what things are](what-things-are.md). + +--- + +## How all of this fits together + +Five layers, from your own computer up to the AI, and which tool sits on which. Also the honest note about how few of them you actually need on day one. + +![Five layers — your computer, ways to talk to it, runtimes you install, services on the internet, and the AI — with arrows showing what talks to what.](../web/infographics/how-all-of-this-fits-together.webp) + +## What the terminal is + +The oldest way to tell a computer what to do, why AI tools still use it, and the only skill a founder actually needs here: being able to read a command before approving it. + +![A terminal window with three example commands and their plain-English translations, and the note that it has no undo — which is why Git matters.](../web/infographics/what-the-terminal-is.webp) + +## Editors, IDEs, and what agentic means + +The difference between a chat window you paste into and a tool that can see your folder, edit it, and run commands. Also what comes with that access. + +![A chat window against an agentic editor, with the four capabilities that separate them, and a row of named examples from least to most technical.](../web/infographics/editors-ide-and-what-agentic-means.webp) + +## What Git is + +The undo button for a folder. The highest-value five minutes on this entire site, and the only safety measure that makes a bad outcome recoverable rather than merely less likely. + +![Git as a series of save points over a folder, the three commands worth knowing — commit, diff, checkout — and the habit of committing before letting an AI touch anything.](../web/infographics/what-git-is.webp) + +## Git and GitHub are not the same thing + +One runs on your machine with no internet. The other is a website. People conflate them constantly, and it makes every explanation of both harder to follow. + +![Git on your computer against GitHub on the internet, with push and pull between them, and the three things people most often confuse.](../web/infographics/git-and-github-are-not-the-same.webp) + +## What Node is + +Why a tool tells you to install something before anything will run, and what npm, `package.json` and `node_modules` are. Plumbing, explained once so it stops being mysterious. + +![A JavaScript file, the Node runtime that executes it, and the result — plus the vocabulary that comes with it: npm, package.json, node_modules, and version numbers.](../web/infographics/what-node-is.webp) + +## What a database is, and whether you need one + +The line between a website and a product. Most things a founder builds first do not need a database, and knowing which side of the line you are on saves a great deal of money. + +![What a database does, when you do not need one, and the moment you do — the first time a stranger types something you have to keep.](../web/infographics/what-a-database-is.webp) + +## How a website actually goes live + +Seven stages from a folder on your laptop to a name people can type. Useful mostly because it shows that you never upload a website — you upload the source, and a machine builds it. + +![Seven stages from a local project through GitHub, a build environment, hosting and CDN, to a custom domain, with labelled arrows between each.](../web/infographics/how-a-website-actually-goes-live.webp) + +## What a connector is + +How an AI reaches your mail and your drive, why there is now a standard for it, and the three habits that keep it from becoming a liability. + +![Custom integrations against a single standard adapter, with the read-only, scope-it-narrow and save-it-as-a-file habits.](../web/infographics/what-a-connector-is.webp) + +## What markdown is + +The format this entire method is built on. Plain text that reads well as text and renders as a document, and outlives whatever tool made it. + +![The same passage as raw markdown and as rendered output, with five marks labelled between them.](../web/infographics/what-markdown-is.webp) + +--- + +Next: [the method](infographics-method.md) — this repository, drawn. diff --git a/docs/infographics.md b/docs/infographics.md new file mode 100644 index 0000000..d095f36 --- /dev/null +++ b/docs/infographics.md @@ -0,0 +1,24 @@ +# The infographics + +Thirty pictures covering what AI actually is, the tools you will hear named, the method this repository describes, and how a programme runs it across a portfolio. They are split across four pages so that none of them is a wall of images. + +Every one is a single image with a caption. Click any of them to open it at full size — they are drawn dense enough that a phone-width version would not be readable, so the page fits them to the column and the click gives you the detail. + +--- + +## The four pages + +| Page | What is on it | Count | +|---|---|---| +| [What AI is](infographics-ai.md) | Foundations. What a model is, how one gets made, what weights are, why they keep improving, what agentic means, and where your words go when you press enter. | 8 | +| [The tools](infographics-tools.md) | The words you will hear and have to nod along to. Terminal, editor, Git, GitHub, Node, databases, hosting, connectors, markdown — and how they relate. | 10 | +| [The method](infographics-method.md) | This repository, drawn. The three loops, the ten sections, the tags, front matter, the carve, the weekly recap. | 9 | +| [Running a portfolio](infographics-portfolio.md) | The layer for an incubator or accelerator. The three-zone architecture, the two-part session note, the maturity ladder. | 3 | + +--- + +## Using them elsewhere + +They are ordinary image files in [`web/infographics/`](../web/infographics). Take them for a workshop deck, a course, an onboarding pack or a slide — that is what they are for, and the licence on this repository permits it. + +Two things worth knowing before you put one in front of a room. They were generated, so read the small text on any you are about to present; a few carry the kind of mangled label that image generation produces, and the fix is to regenerate rather than to apologise for it live. And they describe this method, which is opinionated — if your programme does something differently, the picture will quietly argue with you in front of your own cohort. diff --git a/web/assets/site.css b/web/assets/site.css index 06e3ca1..210f77f 100644 --- a/web/assets/site.css +++ b/web/assets/site.css @@ -221,9 +221,11 @@ img, svg, video { max-width: 100%; height: auto; } } .sidebar-group { margin-bottom: 6px; } .sidebar-title { + display: flex; align-items: center; gap: 7px; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.09em; text-transform: uppercase; color: var(--text-faint); padding: 14px 10px 6px; } +.sidebar-title svg { width: 14px; height: 14px; flex: none; opacity: 0.8; } .sidebar a.nav-link { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: var(--radius-sm); @@ -392,6 +394,16 @@ pre:hover > .copy-btn, .codeblock:hover > .copy-btn, .copy-btn:focus-visible { o drawings is 15px in a 1200-wide viewBox, so at 880px it still paints at about 11px. 620px would have rendered it at under 8px. */ .figure.figure-wide > svg { max-width: none; min-width: 880px; } +/* A raster infographic behaves the other way round to an inlined SVG: it has a + fixed pixel size, so it fits the column and the click opens it at full + resolution. Scrolling a 2000px image sideways inside a 700px column would be + a worse way to read it than opening it. */ +.figure > .figure-zoom { display: block; } +.figure > .figure-zoom > img { + display: block; width: 100%; height: auto; + border-radius: var(--radius-sm); background: #fff; +} +.figure > .figure-zoom:hover { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: var(--radius-sm); } .figure-cap { margin-top: 12px; font-size: 0.8rem; line-height: 1.5; color: var(--text-faint); text-align: center; diff --git a/web/build.mjs b/web/build.mjs index 8e178d5..2abcdd8 100644 --- a/web/build.mjs +++ b/web/build.mjs @@ -114,6 +114,11 @@ const DOC_PAGES = [ { src: "docs/exchange.md", url: "exchange.html", nav: "Run a portfolio", short: "The exchange folder" }, { src: "portfolio/README.md", url: "portfolio.html", nav: "Run a portfolio", short: "The templates" }, { src: "portfolio/rubric.md", url: "rubric.html", nav: "Run a portfolio", short: "The maturity rubric" }, + { src: "docs/infographics.md", url: "infographics.html", nav: "Infographics", short: "All of them" }, + { src: "docs/infographics-ai.md", url: "infographics-ai.html", nav: "Infographics", short: "What AI is" }, + { src: "docs/infographics-tools.md", url: "infographics-tools.html", nav: "Infographics", short: "The tools" }, + { src: "docs/infographics-method.md", url: "infographics-method.html", nav: "Infographics", short: "The method, drawn" }, + { src: "docs/infographics-portfolio.md", url: "infographics-portfolio.html", nav: "Infographics", short: "Running a portfolio" }, ]; /* ---- prompts: the library, grouped the way prompts/INDEX.md groups them ---- */ @@ -197,6 +202,15 @@ function linkFor(href, ctx) { const page = PAGE_BY_SRC.get(rel); if (page) return `${ctx.root}${page}${hash}`; + /* the infographics are copied into the site, so they resolve to a real file + the browser can load — a blob URL would give an a web page, not an + image, and it would only fail once someone opened the published site */ + if (rel.startsWith("web/infographics/")) { + const f = rel.slice("web/infographics/".length); + DRAWN_INFOGRAPHICS.add(f); + return `${ctx.root}infographics/${f}`; + } + const isDir = statSync(abs).isDirectory(); return `${isDir ? TREE : BLOB}${rel}${isDir ? "" : hash}`; } @@ -264,6 +278,21 @@ function mdToHtml(src, ctx) { const dia = line.match(/^\s*$/i); if (dia) { out.push(diagram(dia[1], ctx)); i++; continue; } + /* an image alone on a line is a figure, not a paragraph with a picture in + it — the alt text doubles as the caption, so there is one thing to write + and no way to caption an image while leaving it unreadable to a screen + reader */ + const fig = line.trim().match(/^!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)$/); + if (fig) { + const [, alt, src] = fig; + const url = linkFor(src, ctx); + out.push(`
` + + `${esc(alt)}` + + (alt ? `
${inline(alt, ctx)}
` : "") + + `
`); + i++; continue; + } + if (!line.trim()) { i++; continue; } /* fenced code */ @@ -361,6 +390,11 @@ const DG_LIGHT = (() => { })(); const DIAGRAM_DIR = join(ASSETS, "diagrams"); +const INFOGRAPHIC_DIR = join(WEB, "infographics"); +/* every infographic a page draws, so the sweep at the end can name the ones no + page draws — an unreferenced 200 KB image ships to the site and is seen by + nobody, and the only moment anyone would notice is never */ +const DRAWN_INFOGRAPHICS = new Set(); function checkDiagramPalette(name, svg) { for (const [, token, literal] of svg.matchAll(/var\(--(dg-[a-z-]+),\s*(#[0-9a-fA-F]{3,8})\)/g)) { const want = DG_LIGHT[token]; @@ -396,15 +430,24 @@ const ICONS = { arrow: I(''), github: I(''), stack: I(''), + /* one per sidebar group, so the eye can find a section without reading it */ + compass: I(''), + book: I(''), + checklist: I(''), + wrench: I(''), + repeat: I(''), + people: I(''), + picture: I(''), }; const NAV = [ - { group: "Start here", items: [{ url: "index.html", title: "What this is" }] }, - { group: "The method", items: [] }, - { group: "Do the work", items: [] }, - { group: "Tools", items: [] }, - { group: "Running it", items: [] }, - { group: "Run a portfolio", items: [] }, + { group: "Start here", icon: "compass", items: [{ url: "index.html", title: "What this is" }] }, + { group: "The method", icon: "book", items: [] }, + { group: "Do the work", icon: "checklist", items: [] }, + { group: "Tools", icon: "wrench", items: [] }, + { group: "Running it", icon: "repeat", items: [] }, + { group: "Run a portfolio", icon: "people", items: [] }, + { group: "Infographics", icon: "picture", items: [] }, ]; const navPush = (group, url, title) => { const g = NAV.find((x) => x.group === group); @@ -417,8 +460,8 @@ function sidebar(root, active) { `${esc(title)}`; return ``; @@ -907,6 +950,10 @@ for (const dir of stackSections) { } cpSync(ASSETS, join(OUT, "assets"), { recursive: true, filter: (src) => !src.includes("diagrams") }); +cpSync(INFOGRAPHIC_DIR, join(OUT, "infographics"), { recursive: true }); +for (const f of readdirSync(INFOGRAPHIC_DIR).sort()) { + if (!DRAWN_INFOGRAPHICS.has(f)) fail(`web/infographics/${f}: no page shows it — add it to a docs/infographics-*.md page, or delete the file`); +} writeFileSync(join(OUT, "assets", "search-index.js"), `window.SEARCH_INDEX=${JSON.stringify(searchIndex)};`); /* The favicon IS the header mark: same stack glyph as ICONS.stack, on the same hero gradient, at the same proportion inside the same rounded square. The diff --git a/web/infographics/editors-ide-and-what-agentic-means.png b/web/infographics/editors-ide-and-what-agentic-means.png deleted file mode 100644 index 9ec5e1d..0000000 Binary files a/web/infographics/editors-ide-and-what-agentic-means.png and /dev/null differ diff --git a/web/infographics/editors-ide-and-what-agentic-means.webp b/web/infographics/editors-ide-and-what-agentic-means.webp new file mode 100644 index 0000000..95c6f7b Binary files /dev/null and b/web/infographics/editors-ide-and-what-agentic-means.webp differ diff --git a/web/infographics/every-session-becomes-two-files.png b/web/infographics/every-session-becomes-two-files.png deleted file mode 100644 index 1380105..0000000 Binary files a/web/infographics/every-session-becomes-two-files.png and /dev/null differ diff --git a/web/infographics/every-session-becomes-two-files.webp b/web/infographics/every-session-becomes-two-files.webp new file mode 100644 index 0000000..8f31ec1 Binary files /dev/null and b/web/infographics/every-session-becomes-two-files.webp differ diff --git a/web/infographics/front-matter-line-by-line.png b/web/infographics/front-matter-line-by-line.png deleted file mode 100644 index 959143a..0000000 Binary files a/web/infographics/front-matter-line-by-line.png and /dev/null differ diff --git a/web/infographics/front-matter-line-by-line.webp b/web/infographics/front-matter-line-by-line.webp new file mode 100644 index 0000000..10352d3 Binary files /dev/null and b/web/infographics/front-matter-line-by-line.webp differ diff --git a/web/infographics/getting-your-material-in.png b/web/infographics/getting-your-material-in.png deleted file mode 100644 index 39a1444..0000000 Binary files a/web/infographics/getting-your-material-in.png and /dev/null differ diff --git a/web/infographics/getting-your-material-in.webp b/web/infographics/getting-your-material-in.webp new file mode 100644 index 0000000..da7b825 Binary files /dev/null and b/web/infographics/getting-your-material-in.webp differ diff --git a/web/infographics/git-and-github-are-not-the-same.png b/web/infographics/git-and-github-are-not-the-same.png deleted file mode 100644 index 5552f6e..0000000 Binary files a/web/infographics/git-and-github-are-not-the-same.png and /dev/null differ diff --git a/web/infographics/git-and-github-are-not-the-same.webp b/web/infographics/git-and-github-are-not-the-same.webp new file mode 100644 index 0000000..a171a8b Binary files /dev/null and b/web/infographics/git-and-github-are-not-the-same.webp differ diff --git a/web/infographics/how-a-model-gets-made.png b/web/infographics/how-a-model-gets-made.png deleted file mode 100644 index a52f8bc..0000000 Binary files a/web/infographics/how-a-model-gets-made.png and /dev/null differ diff --git a/web/infographics/how-a-model-gets-made.webp b/web/infographics/how-a-model-gets-made.webp new file mode 100644 index 0000000..104a9c8 Binary files /dev/null and b/web/infographics/how-a-model-gets-made.webp differ diff --git a/web/infographics/how-a-website-actually-goes-live.png b/web/infographics/how-a-website-actually-goes-live.png deleted file mode 100644 index 69fc727..0000000 Binary files a/web/infographics/how-a-website-actually-goes-live.png and /dev/null differ diff --git a/web/infographics/how-a-website-actually-goes-live.webp b/web/infographics/how-a-website-actually-goes-live.webp new file mode 100644 index 0000000..7cc6d98 Binary files /dev/null and b/web/infographics/how-a-website-actually-goes-live.webp differ diff --git a/web/infographics/how-ai-answers-without-reading-everything.png b/web/infographics/how-ai-answers-without-reading-everything.png deleted file mode 100644 index ff37d54..0000000 Binary files a/web/infographics/how-ai-answers-without-reading-everything.png and /dev/null differ diff --git a/web/infographics/how-ai-answers-without-reading-everything.webp b/web/infographics/how-ai-answers-without-reading-everything.webp new file mode 100644 index 0000000..b038a2c Binary files /dev/null and b/web/infographics/how-ai-answers-without-reading-everything.webp differ diff --git a/web/infographics/how-all-of-this-fits-together.png b/web/infographics/how-all-of-this-fits-together.png deleted file mode 100644 index ae51954..0000000 Binary files a/web/infographics/how-all-of-this-fits-together.png and /dev/null differ diff --git a/web/infographics/how-all-of-this-fits-together.webp b/web/infographics/how-all-of-this-fits-together.webp new file mode 100644 index 0000000..223f74d Binary files /dev/null and b/web/infographics/how-all-of-this-fits-together.webp differ diff --git a/web/infographics/how-every-fact-gets-tagged.png b/web/infographics/how-every-fact-gets-tagged.png deleted file mode 100644 index 227e2a7..0000000 Binary files a/web/infographics/how-every-fact-gets-tagged.png and /dev/null differ diff --git a/web/infographics/how-every-fact-gets-tagged.webp b/web/infographics/how-every-fact-gets-tagged.webp new file mode 100644 index 0000000..85ad46a Binary files /dev/null and b/web/infographics/how-every-fact-gets-tagged.webp differ diff --git a/web/infographics/private-master-shared-derived.png b/web/infographics/private-master-shared-derived.png deleted file mode 100644 index 76dc0c0..0000000 Binary files a/web/infographics/private-master-shared-derived.png and /dev/null differ diff --git a/web/infographics/private-master-shared-derived.webp b/web/infographics/private-master-shared-derived.webp new file mode 100644 index 0000000..d1be60d Binary files /dev/null and b/web/infographics/private-master-shared-derived.webp differ diff --git a/web/infographics/putting-the-pull-on-schedule.png b/web/infographics/putting-the-pull-on-schedule.png deleted file mode 100644 index 631a299..0000000 Binary files a/web/infographics/putting-the-pull-on-schedule.png and /dev/null differ diff --git a/web/infographics/putting-the-pull-on-schedule.webp b/web/infographics/putting-the-pull-on-schedule.webp new file mode 100644 index 0000000..226fbfd Binary files /dev/null and b/web/infographics/putting-the-pull-on-schedule.webp differ diff --git a/web/infographics/running-this-across-a-portfolio.png b/web/infographics/running-this-across-a-portfolio.png deleted file mode 100644 index 3e99159..0000000 Binary files a/web/infographics/running-this-across-a-portfolio.png and /dev/null differ diff --git a/web/infographics/running-this-across-a-portfolio.webp b/web/infographics/running-this-across-a-portfolio.webp new file mode 100644 index 0000000..3f41d42 Binary files /dev/null and b/web/infographics/running-this-across-a-portfolio.webp differ diff --git a/web/infographics/the-loops-that-make-models-improve.png b/web/infographics/the-loops-that-make-models-improve.png deleted file mode 100644 index 2281b5d..0000000 Binary files a/web/infographics/the-loops-that-make-models-improve.png and /dev/null differ diff --git a/web/infographics/the-loops-that-make-models-improve.webp b/web/infographics/the-loops-that-make-models-improve.webp new file mode 100644 index 0000000..ac8014b Binary files /dev/null and b/web/infographics/the-loops-that-make-models-improve.webp differ diff --git a/web/infographics/the-same-model-four-places.png b/web/infographics/the-same-model-four-places.png deleted file mode 100644 index f4be634..0000000 Binary files a/web/infographics/the-same-model-four-places.png and /dev/null differ diff --git a/web/infographics/the-same-model-four-places.webp b/web/infographics/the-same-model-four-places.webp new file mode 100644 index 0000000..b70cf4e Binary files /dev/null and b/web/infographics/the-same-model-four-places.webp differ diff --git a/web/infographics/the-startup-stack-method.png b/web/infographics/the-startup-stack-method.png deleted file mode 100644 index 6b28b7b..0000000 Binary files a/web/infographics/the-startup-stack-method.png and /dev/null differ diff --git a/web/infographics/the-startup-stack-method.webp b/web/infographics/the-startup-stack-method.webp new file mode 100644 index 0000000..e47d46b Binary files /dev/null and b/web/infographics/the-startup-stack-method.webp differ diff --git a/web/infographics/the-ten-sections.png b/web/infographics/the-ten-sections.png deleted file mode 100644 index be48a83..0000000 Binary files a/web/infographics/the-ten-sections.png and /dev/null differ diff --git a/web/infographics/the-ten-sections.webp b/web/infographics/the-ten-sections.webp new file mode 100644 index 0000000..ee238fa Binary files /dev/null and b/web/infographics/the-ten-sections.webp differ diff --git a/web/infographics/the-weekly-recap.png b/web/infographics/the-weekly-recap.png deleted file mode 100644 index 1324f8c..0000000 Binary files a/web/infographics/the-weekly-recap.png and /dev/null differ diff --git a/web/infographics/the-weekly-recap.webp b/web/infographics/the-weekly-recap.webp new file mode 100644 index 0000000..1282619 Binary files /dev/null and b/web/infographics/the-weekly-recap.webp differ diff --git a/web/infographics/what-a-connector-is.png b/web/infographics/what-a-connector-is.png deleted file mode 100644 index f403d4a..0000000 Binary files a/web/infographics/what-a-connector-is.png and /dev/null differ diff --git a/web/infographics/what-a-connector-is.webp b/web/infographics/what-a-connector-is.webp new file mode 100644 index 0000000..b3274db Binary files /dev/null and b/web/infographics/what-a-connector-is.webp differ diff --git a/web/infographics/what-a-database-is.png b/web/infographics/what-a-database-is.png deleted file mode 100644 index a4fc9d7..0000000 Binary files a/web/infographics/what-a-database-is.png and /dev/null differ diff --git a/web/infographics/what-a-database-is.webp b/web/infographics/what-a-database-is.webp new file mode 100644 index 0000000..0f1a792 Binary files /dev/null and b/web/infographics/what-a-database-is.webp differ diff --git a/web/infographics/what-agentic-actually-means.png b/web/infographics/what-agentic-actually-means.png deleted file mode 100644 index 0da9867..0000000 Binary files a/web/infographics/what-agentic-actually-means.png and /dev/null differ diff --git a/web/infographics/what-agentic-actually-means.webp b/web/infographics/what-agentic-actually-means.webp new file mode 100644 index 0000000..20d381d Binary files /dev/null and b/web/infographics/what-agentic-actually-means.webp differ diff --git a/web/infographics/what-git-is.png b/web/infographics/what-git-is.png deleted file mode 100644 index d1a686d..0000000 Binary files a/web/infographics/what-git-is.png and /dev/null differ diff --git a/web/infographics/what-git-is.webp b/web/infographics/what-git-is.webp new file mode 100644 index 0000000..fac348f Binary files /dev/null and b/web/infographics/what-git-is.webp differ diff --git a/web/infographics/what-markdown-is.png b/web/infographics/what-markdown-is.png deleted file mode 100644 index 36176ec..0000000 Binary files a/web/infographics/what-markdown-is.png and /dev/null differ diff --git a/web/infographics/what-markdown-is.webp b/web/infographics/what-markdown-is.webp new file mode 100644 index 0000000..5441c86 Binary files /dev/null and b/web/infographics/what-markdown-is.webp differ diff --git a/web/infographics/what-node-is.png b/web/infographics/what-node-is.png deleted file mode 100644 index 93db748..0000000 Binary files a/web/infographics/what-node-is.png and /dev/null differ diff --git a/web/infographics/what-node-is.webp b/web/infographics/what-node-is.webp new file mode 100644 index 0000000..fe558e2 Binary files /dev/null and b/web/infographics/what-node-is.webp differ diff --git a/web/infographics/what-stage-are-they-really-at.png b/web/infographics/what-stage-are-they-really-at.png deleted file mode 100644 index eebe2e7..0000000 Binary files a/web/infographics/what-stage-are-they-really-at.png and /dev/null differ diff --git a/web/infographics/what-stage-are-they-really-at.webp b/web/infographics/what-stage-are-they-really-at.webp new file mode 100644 index 0000000..c27641e Binary files /dev/null and b/web/infographics/what-stage-are-they-really-at.webp differ diff --git a/web/infographics/what-the-terminal-is.png b/web/infographics/what-the-terminal-is.png deleted file mode 100644 index 74c2e1d..0000000 Binary files a/web/infographics/what-the-terminal-is.png and /dev/null differ diff --git a/web/infographics/what-the-terminal-is.webp b/web/infographics/what-the-terminal-is.webp new file mode 100644 index 0000000..fb22965 Binary files /dev/null and b/web/infographics/what-the-terminal-is.webp differ diff --git a/web/infographics/what-this-thing-actually-is.png b/web/infographics/what-this-thing-actually-is.png deleted file mode 100644 index 7670ae2..0000000 Binary files a/web/infographics/what-this-thing-actually-is.png and /dev/null differ diff --git a/web/infographics/what-this-thing-actually-is.webp b/web/infographics/what-this-thing-actually-is.webp new file mode 100644 index 0000000..ece7a35 Binary files /dev/null and b/web/infographics/what-this-thing-actually-is.webp differ diff --git a/web/infographics/what-weights-actually-means.png b/web/infographics/what-weights-actually-means.png deleted file mode 100644 index 96d6aeb..0000000 Binary files a/web/infographics/what-weights-actually-means.png and /dev/null differ diff --git a/web/infographics/what-weights-actually-means.webp b/web/infographics/what-weights-actually-means.webp new file mode 100644 index 0000000..eb6023a Binary files /dev/null and b/web/infographics/what-weights-actually-means.webp differ diff --git a/web/infographics/where-your-words-actually-go.png b/web/infographics/where-your-words-actually-go.png deleted file mode 100644 index f5dbb8f..0000000 Binary files a/web/infographics/where-your-words-actually-go.png and /dev/null differ diff --git a/web/infographics/where-your-words-actually-go.webp b/web/infographics/where-your-words-actually-go.webp new file mode 100644 index 0000000..fcda052 Binary files /dev/null and b/web/infographics/where-your-words-actually-go.webp differ diff --git a/web/infographics/which-model-should-i-use.png b/web/infographics/which-model-should-i-use.png deleted file mode 100644 index c2dc5c9..0000000 Binary files a/web/infographics/which-model-should-i-use.png and /dev/null differ diff --git a/web/infographics/which-model-should-i-use.webp b/web/infographics/which-model-should-i-use.webp new file mode 100644 index 0000000..cd3eb11 Binary files /dev/null and b/web/infographics/which-model-should-i-use.webp differ