No Bullshit AINo Bullshit AIno-bullshit-aiCannabis Courseby Distru00 XP
Plain English

Why this course has three versions of every page

Because the owner and the person wiring up the software are usually two different people, and there are a lot of people in between.Because operators and engineers need the same facts in different words, and most readers sit somewhere between the two.Because separate docs for operators and engineers always drift. One MDX file, three renderings, shared skeleton.

Most AI content is written for one of two rooms. Either it's a sales deck full of words like "transformative", or it's a developer blog that assumes you know what a token is. Cannabis operators fall in the gap. You have real problems (Metrc discrepancies, invoice matching, a menu that's wrong on three platforms) and you'd use AI tomorrow if someone told you plainly how.

So every page here reads at three levels. Level 1 is plain English: what to do, what to type, what to expect back. Level 3 is the same page for the person who will wire it up: real commands, config, the gotchas. Level 2 is the bridge between them, carrying both vocabularies in one sentence while the story stays the same.

Most AI content is written for one audience. Sales decks for owners, developer blogs for engineers. Cannabis operators fall in the gap, and so does anyone who has to translate between the two. This site is written once and rendered three ways: the skeleton (headings, exercises, giveaways) is shared, and the technical vocabulary is swapped in and out by level. You are on level 2, where both vocabularies appear together. It is the level to read with a colleague from the other side.

The site is a static Astro build. Every lesson is one MDX file whose title, summary and body are authored as a shared skeleton with level-gated parts: <Level from to> blocks, <Term> glossary phrases with three renderings each, and <Swap>/<Lv> for inline text. All three renderings are in the HTML; a data-level attribute on <html> (persisted in localStorage, applied inline before first paint) decides which one CSS shows. No hydration, no reload, no per-level routes to keep in sync.

Content rules live in docs/CONTENT_CONTRACT.md. Agent instructions live in AGENTS.md. Schema enforcement is Zod via Astro content collections; a bad frontmatter field fails npm run build with a path and a reason. npm run lint:content catches banned words, missing exercises and unknown glossary keys.

The three stopsThe three stopslevels

  1. 1 · Plain English. No jargon at all.
  2. 2 · Bridge. Both vocabularies side by side.
  3. 3 · Technical. Full jargon; assumes you can read JSON and run a terminal.

Move between them with the dial in the top bar. It stays put while you scroll. Your choice is remembered, and any link works at any level: add ?level=3 to send someone straight to the bridge.Move between them with the dial in the top bar. It stays put while you scroll. Your choice is remembered, and any link works at any level: add ?level=3 to send someone straight to the bridge.Dial in the top bar (sticky). Hotkeys: ⌘/Ctrl+⇧+←/→ steps, ⌘/Ctrl+. jumps to the other end. ?level=n forces a level and persists it. Search engines index level 1; blocks from level 3 carry data-nosnippet.

Buddy, the course guide: a cannabis bud wearing a headset, holding a book and giving a thumbs up

Buddy, the course guide, can work out which of the five suits you from five quick questions. He can also answer questions about any lesson, at whatever level you are reading.Buddy, the course guide, can work out which of the five suits you from five quick questions. He can also answer questions about any lesson, at whatever level you are reading.Buddy: placement check (five questions, scored in the browser) and a lesson Q&A that takes the reader's level with every question.Take the checkTake the check./levelcheck

Who made thisWho made thismaintainers

Distru builds software for cannabis manufacturers and distributors. We talk to operators all day and watch the same problems come up. This course is the stuff we'd tell a friend over coffee. It is not a pitch: the lessons work with whatever software you already run, and we say so when a problem needs no AI at all. There is one demo link in the sidebar if you want to see what we build, and that is the whole of the sales pitch.Distru builds software for cannabis manufacturers and distributors. We talk to operators all day and watch the same problems come up. This course is the stuff we'd tell a friend over coffee. It is not a pitch: the lessons work with whatever software you already run, and we say so when a problem needs no AI at all. There is one demo link in the sidebar if you want to see what we build, and that is the whole of the sales pitch.Distru engineering and GTM. Contributions welcome: node scripts/new-lesson.mjs to scaffold, npm run check:all to validate.

What “No Bullshit” means hereWhat “No Bullshit” means hereprinciples