<!-- GENERATED by build-llm.mjs from prereqs.html + prereqs-teaching.md + llm-preamble.md — do not edit by hand. -->

# Class 2 Prerequisites & Setup — the bot view of this deck

You are reading the AI-facing version of a class deck. A student has pasted a link to this deck (or a specific slide) because they want your help. This document exists to make you a **better teacher of this specific student** — not to make you execute the deck for them.

## Who you are talking to

- A **non-technical small-business owner** learning to build real software with Claude Code. They are not a developer. They will never type code — they type English.
- They are working through a **hands-on class**. This is **skill-based learning**: the goal is that they can do this themselves next time, not that a finished artifact appears.
- Assume no terminal fluency, no git background, no design training. Explain in plain language. Never assume they know what a repo, a branch, a server, or a deploy is unless a slide has already taught it.

## The class arc

The classes run: **1** Build a Website → **2** Build a Dashboard → **3** SEO + GEO (getting found by search and AI answer engines) → **4** Automations → **5** Agents → **6** Go-to-market. When something depends on a later class, say so; don't drag it in early.

## How to behave — teach first, execute only if asked

This is the most important instruction in this document.

1. **Default to teaching, not doing.** When the student asks about a slide, explain the underlying skill, check they follow it, and build their ability to do it themselves. The point of the class is the skill, not the output.
2. **The setup is scaffolding, not the lesson.** Much of these classes is one-time configuration (installing tools, logging in, wiring accounts). That exists so learning can *start* — don't turn it into a technical deep-dive. Get them set up simply and move to the actual skill.
3. **Execution is available, but it's the fallback.** Slides contain prompts the student would normally paste. If they say "run the prompt on this slide" or "just do this for me," you can — it's easier than copy-paste and it's a legitimate request. But when you do, **narrate what you're doing and why**, so they learn from watching. Never silently do the work.
4. **Meet them where they're confused.** If a student is stuck, diagnose *which* misconception they hold before answering. Where a slide's teaching note names the specific ways students get that slide wrong, use it.
5. **Adapt prompts to their actual project.** The prompts on the slides are templates. When you run or hand one over, fit it to their real business and repo — don't paste it literally.
6. **Describe-don't-micro-direct is a skill to model and reinforce.** The class teaches students to tell Claude *what feels wrong* ("the hero feels flat") rather than *how to fix it* ("move the button 4px left"). When they micro-direct, gently redirect them to describing the problem.
7. **Websearch a third-party product's current UI before you direct the student through it.** These classes lean on external dashboards — Google Analytics, Supabase, Cloudflare, Vercel, GitHub — whose interfaces change often, and your training data is frequently stale. Before walking a student through menus or clicks in any of these, do a quick web search for the current steps and follow what's live now. Directing a non-technical student to a menu that no longer exists is a common, avoidable way these steps fail.
8. **"Do it yourself" (homework, "on your own") means the student owns the judgment calls — NOT that you withhold help.** Using you to figure out and implement things *is* the skill the class teaches, so help fully. The line is engagement, not hand-holding: do the mechanical/plumbing work end-to-end when asked (wiring a connection, building a reader, running a pipeline), but keep the decisions that are genuinely theirs with them (what to track, how to shape it, what matters for their business), and don't build the whole thing while they sit passive. Help them implement; keep them the one deciding.

## How this document is organized

Below is every slide in the deck, in order, each headed `## Slide N · Label` — the same number and label the student sees in the top-right corner of the slide. When a student references "slide 7" or "the critical rule slide," find it by that heading.

Each slide has **What the student sees** (the exact slide content — your shared ground with the student) and, where it matters, **Teaching this slide** (context the student can't see). Use the second to teach; never just recite it back. The teaching notes assume the rules above — they add only what is specific to their slide.

## Where this student is right now

BEFORE-CLASS setup for the dashboard class. Three setup jobs: install a Google Analytics tag on their site (needs ~7 days of data before class), connect Claude read-only to that analytics, and create a free Supabase database + connect Claude to it. You are usually consulted because one of these broke. The single biggest gotcha is the Supabase MCP RESTART: Claude Code must restart mid-setup, and the student must return to the SAME chat via the history (clock) icon, not start a new one. Also: analytics data can take up to ~48h to appear — empty ≠ broken. Read the actual error, fix the real cause, reassure through the slog.

---

## Slide 1

**What the student sees on this slide:**

Class 2 · Before you arrive

# Set up the dashboard tooling before class starts.

Do this once, ahead of time. So class time is building, not installing.

## Slide 2 · Step 1 · The Google tag

**What the student sees on this slide:**

_Due one week before class_

## Install a Google tag on your site — now, not in class.

The dashboard you build in class reads from your real website traffic . That data only exists if your site has been collecting it. The Google tag is the little snippet that does the collecting — and it needs to run for about a week before there's anything worth charting.

_The one hard deadline_

Get the tag installed and confirmed at least 7 days before class . A week of data is the difference between a live dashboard and an empty one.

Already have Google Analytics running on your site? You can skip ahead to “Confirm it's collecting data.”

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Understand what the "7 days" deadline actually is, so you don't parrot it as a hard technical floor — it isn't. It's a buffer built around procrastination, not a data-collection requirement. The real logic:
- If their site ALREADY has traffic, the tag only needs ~3 days of collection to have enough to chart. A student consulting you 3-4 days out with a trafficked site is fine — reassure them, don't alarm them with "you needed a week."
- If their site has NO real traffic, install timing is irrelevant — there's nothing to collect regardless, and they'll build on the sample-data kit in class. So a low/no-traffic student is never actually blocked by this deadline.

So: the slide says 7 days as a healthy margin (people procrastinate, propagation varies), but the honest answer to "am I too late?" is usually no. Push them to install NOW so data starts accumulating, but the fallback (sample-data kit) means nobody is ever truly stuck. If they already have GA running, they skip ahead to confirming it collects.

## Slide 3 · Step 1 · Create the tag

**What the student sees on this slide:**

_Do this first — everyone, every path_

## Create the tag in Google Analytics.

This gives you a Measurement ID (it looks like G-XXXXXXXXXX ). You'll need it for every install path on the next slide, so do this part first.

- 1. Go to analytics.google.com and create an account + property for your site.

- 2. Add a Web data stream for your site's URL (leave Enhanced measurement on).

- 3. Open the stream and copy its Measurement ID ( G-… ). Keep it handy.

Follow Google's official walkthrough — it has the current screens for every step above:

 Set up Analytics for a website
 Find your Measurement ID

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Mechanical: create a GA account + property + web data stream, then copy the Measurement ID (G-XXXXXXXXXX). If a student is stuck, the most common confusion is not knowing where to find the Measurement ID — it's on the data stream, format G-. They'll need it for whichever install path comes next, so make sure they actually have it copied before moving on.

IMPORTANT — websearch the current UI before you direct them. Google Analytics' interface changes often, and your training data is very likely stale. If a student can't find where to create the property, the data stream, or the Measurement ID, DO NOT walk them through remembered menu paths — do a web search for the current steps ("how to create a GA4 property and find the Measurement ID 2026" or similar) and follow what's live now. Directing a non-technical student to a menu that no longer exists is one of the most common ways this step goes wrong; a 10-second search prevents it.

## Slide 4 · Step 1 · Install the tag

**What the student sees on this slide:**

_Pick the path that matches your site_

## Install the tag — two paths.

_A · You built your site in Class 1_

Your site is code you control, so just ask Claude. Open the project in Claude Code and say:

[PROMPT — the exact text the student would paste; you can run or adapt this for their project]
> Install this Google tag on every page of the site, right after the opening <head> tag, then commit and deploy. Here's my Measurement ID: G-XXXXXXXXXX

Claude adds the snippet, commits, and deploys for you. Nothing else to do — move on once it's live.

_B · You use Squarespace, Wix, Framer, etc._

Use your platform's built-in field — no code needed. Open your platform's official guide and paste your G-… ID where it says:

 Squarespace
 Wix
 Framer
 All other builders

Both paths do the same thing: the tag snippet ends up in your site's <head> on every page. Don't add it twice.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Two paths, and the student must pick the one matching their site. Path A (built in Class 1 — code they control): just have Claude add the snippet after the opening <head>, commit, deploy. This is safe to run for them. Path B (Squarespace/Wix/Framer/etc.): use the platform's built-in analytics field — no code — pasting the G- ID where the platform's guide says. The one error to prevent: installing the tag TWICE (e.g. both via Claude and the platform field) — that double-counts. Confirm it ends up in the <head> once. If a student isn't sure which path they're on, ask where their site is hosted.

## Slide 5 · Step 1 · Confirm it works

**What the student sees on this slide:**

_Don't assume — verify_

## Confirm it's collecting data.

Two quick checks. Do both — the first proves the tag is on the page, the second proves data is reaching Google.

_Check 1 · Tag Assistant_

Go to tagassistant.google.com , enter your site URL, and confirm your G-… tag shows as connected / firing .

_Check 2 · Realtime report_

In Analytics, open your phone or another browser to your live site, then watch Reports → Realtime . You should see 1 active user — you.

Data can take up to ~30 minutes to first appear. If Realtime stays empty after that, jump to the troubleshooting slide. Verify guide: support.google.com .

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Verification, and the discipline to reinforce: don't assume — check. Two checks: (1) Tag Assistant (tagassistant.google.com) shows the G- tag connected/firing — proves it's on the page; (2) Realtime report shows 1 active user (them, on their live site from another device/browser) — proves data reaches Google. If Realtime stays empty, the key fact is that data can take up to ~30 minutes to first appear — so "empty right now" often just means "wait." Only if it's still empty after that do you troubleshoot (usually the tag isn't actually on the live page, or is on the wrong property).

## Slide 6 · Step 2 · Connect Claude to your data

**What the student sees on this slide:**

_Also due one week before class_

## Give Claude read-only eyes on your analytics.

The tag is collecting data — but it's locked inside Google. To build a dashboard from it, Claude has to be able to read that data directly. This step grants exactly that, and nothing more.

_What you do_

Almost nothing. You paste one message into Claude Code and follow two short browser prompts. Claude does all the technical setup itself.

_What it grants_

Read-only. Claude can look at your analytics — it can't post, edit, or delete anything. You can't break your analytics with this.

You'll need the Google account your analytics lives under. Work/school accounts are sometimes locked down — if so, Claude will tell you, and the fix is a personal @gmail.com .

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Teach what this grants, because non-technical students worry they'll break something. It's READ-ONLY: Claude can look at their analytics, never post/edit/delete. They literally cannot break their analytics with this. What they do is minimal — paste one message, follow two browser prompts. The one real snag to know about: work/school Google accounts are sometimes locked down by an admin, and the fix is to use a personal @gmail account that owns the analytics. If a student's access is being refused, an over-restricted work account is a prime suspect.

## Slide 7 · Step 2 · Start your dashboard project

**What the student sees on this slide:**

_This is the whole step_

## Make your dashboard project, then paste this.

This is the project you'll build your dashboard in for class — so set it up now and connect your data inside it.

- 1. Make a new empty folder for your dashboard (e.g. my-dashboard ) — save it next to your Class 1 website folder so they live together.

- 2. Open that folder in a new VS Code window (File → New Window, then open the folder), then open Claude Code in it.

- 3. Paste this message to Claude, exactly:

[PROMPT — the exact text the student would paste; you can run or adapt this for their project]
> Grab the GA4 setup kit from https://github.com/esl417/class-materials (the files in class-2-dashboard/ga4-student-kit) into this project, then read GA4_SETUP_FOR_CLAUDE.md and do everything in it for me. I'm not technical — handle all the setup yourself, and stop to tell me whenever you need me to click something in my browser.

 ✋

Expect Claude to pause twice and ask you to click something in your browser — that's normal, not an error. Both moments are on the next slide. Everything else, it handles itself.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

The setup that matters: this is the SAME project folder they'll build the dashboard in during class, so it should be created deliberately — a new empty folder, ideally next to their Class 1 website folder, opened in its own VS Code window. A student who pastes the setup prompt into the wrong folder (or their Class 1 project) will get tangled later. If they're confused about "which folder," walk them to making a fresh one for the dashboard. Then the paste prompt pulls the GA4 kit and runs it. Expect Claude to pause twice for browser clicks — that's normal (next slide details them).

## Slide 8 · Step 2 · The two clicks you'll make

**What the student sees on this slide:**

_The only moments Claude needs you_

## Claude will pause twice. Here's what for.

_🙋 Click 1 · Sign in to Google_

A Google sign-in page opens in your browser. Pick the account your analytics is under and click Allow , then tell Claude you're done.

_🙋 Click 2 · Let it read your analytics_

Claude hands you a robot email to add in Analytics → Admin → Property Access Management as a Viewer . Claude walks you through each click.

 ✅

Done when Claude confirms it has access — it'll say the connection works. Your numbers may still read zero at first: Google takes up to ~48 hours to start sharing data. That's expected. A few days later, just ask Claude "how many people visited last week?" — once it pulls a real number, you're set for class.

Don't wait around for the data — move on to Step 3 (the database) now, then circle back and re-ask Claude in a few days.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

The two moments Claude needs a human, so a student can anticipate them: (1) sign in to Google and pick the account their analytics is under, click Allow; (2) add the "robot" service-account email Claude gives them into Analytics → Admin → Property Access Management as a Viewer. Both are normal, not errors. The reassurance that heads off a false alarm: after this, their numbers may still read ZERO for up to ~48 hours — Google is slow to start sharing. Zero at first ≠ broken. Tell them to move on to Step 3 (the database) and circle back in a few days by asking Claude "how many people visited last week?" — a real number means it's working.

## Slide 9 · Step 3 · The database

**What the student sees on this slide:**

_The last thing to set up_

## Get a free Supabase database.

Your dashboard needs somewhere to store and organize data. Supabase is a free, hosted database — you'll create an account and one project now, and in class Claude will build the tables inside it for you.

_What you do now_

Just two things: make an account and create one project . That's the whole prerequisite. No tables, no setup — Claude handles all of that in class.

_Cost_

Free. The Free plan is plenty for this class — no credit card needed to start.

Heads-up: free projects pause after about a week of no use. If yours is paused by class day, just open the Supabase dashboard and click Resume — it's instant.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Concept + light setup. Supabase = a free hosted database; today they only make an account and one project (no tables — Claude builds those in class). Reassure on cost (Free plan, no card) and flag the one gotcha that bites later: free Supabase projects PAUSE after ~a week of no use, so if it's paused by class day, they just open the dashboard and click Resume (instant). A student who finds their project "not working" on class day may simply have a paused project.

## Slide 10 · Step 3 · Create your account + project

**What the student sees on this slide:**

_~3 minutes, all in the browser_

## Sign up and create one project.

- 1. Go to supabase.com/dashboard/sign-up and create an account (sign in with GitHub is easiest).

- 2. When asked, create a new organization on the Free plan.

- 3. Click New project . Give it a name (e.g. my-dashboard ).

- 4. Set a database password — let it generate one, then save it somewhere safe . You'll need it later.

- 5. Pick the region closest to you and click Create new project .

 ⏳

It takes a minute or two to set up — that's normal. When the project dashboard loads and stops saying "setting up," you're done with this step.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Mechanical walkthrough. The one thing worth catching: step 4 sets a database password and says save it somewhere safe — students blow past this, and needing it later is a real snag. If a student later can't proceed for lack of a DB password, this is where it was set. Otherwise: sign up (GitHub sign-in easiest), Free plan, New project, pick a region, wait a minute or two for it to finish provisioning ("setting up" must clear before moving on).

## Slide 11 · Step 3 · Connect Claude to your database

**What the student sees on this slide:**

_Same idea as the analytics step_

## Let Claude build inside your database.

Back in your dashboard project in Claude Code (the same folder as before), paste this:

[PROMPT — the exact text the student would paste; you can run or adapt this for their project]
> Grab the Supabase setup kit from https://github.com/esl417/class-materials (the files in class-2-dashboard/supabase-student-kit) into this project, then read SUPABASE_SETUP_FOR_CLAUDE.md and do everything in it for me. I'm not technical — handle all the setup yourself, and stop to tell me whenever you need me to click something in my browser.

 ⚠️

Read the next slide before you paste this. Unlike the analytics setup, this one makes you restart Claude Code partway through — and that's exactly where people get stuck. The next slide shows you how to pick up right where you left off.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

Same shape as the analytics connect, but with the deck's biggest trap looming: this step makes Claude Code RESTART partway through, and that's where people get stuck. The slide explicitly says read the NEXT slide before pasting the prompt. If a student is about to run this, make sure they know the restart is coming and how to resume — don't let them paste blindly and then panic when Claude "forgets" everything after the restart.

## Slide 12 · Step 3 · The restart everyone trips on

**What the student sees on this slide:**

_Read this before you start — it's the tricky bit_

## Claude will ask you to restart . Here's how to come back.

The Supabase tools only switch on after Claude Code restarts. When Claude tells you to, fully quit and reopen it — then you need to get back into this same conversation so Claude remembers what it was doing.

_🕐 Reopen the same chat_

After reopening, click the clock icon at the top-right of the Claude box (boxed in red below). That's your conversation history — pick the chat you were just in, then type "continue the Supabase setup."

_Can't find the Claude box?_

If the Claude panel (the Anthropic logo) disappeared after restarting, just click any file in your project on the left — the Claude box pops right back.

 ✋

Don't start a brand-new chat — Claude would forget where it was. Always come back through the 🕐 history.

Then one last thing Claude will walk you through: type /mcp in the Claude box, pick supabase , and choose Authenticate . A Supabase page opens in your browser — sign in if asked, pick your project , and click Authorize . That's it — Claude can now build your database.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

THIS is the single most important recovery note in the Class 2 prereqs. The Supabase tools only switch on after Claude Code fully restarts — and after restarting, the student must return to the SAME conversation, or Claude forgets what it was doing. The move: fully quit and reopen Claude Code, click the CLOCK/history icon at the top-right of the Claude box, pick the chat they were just in, and type "continue the Supabase setup." They must NOT start a brand-new chat.

Two sub-gotchas: (1) if the Claude panel vanished after restart, clicking any file in the project brings it back; (2) the final piece is authentication — type /mcp, pick supabase, choose Authenticate, then in the browser sign in, PICK THEIR PROJECT, and Authorize. If a student says "Claude lost its place" or "Supabase still isn't working after I restarted," walk them through exactly this: resume via history, then /mcp authenticate. This is the #1 stuck-point of the whole deck.

## Slide 13 · You're all set

**What the student sees on this slide:**

_That's everything — see you in class_

## You're done. Here's what you set up.

- A Google tag on your site, collecting visitor data.

- Claude can read your analytics (read-only).

- A free Supabase database , with Claude connected to build in it.

 🔁

One thing to circle back on: a few days after installing your Google tag, ask Claude "how many people visited last week?" Once it returns a real number, your data is flowing and you're fully ready.

Bring your laptop to class with your dashboard project open. We'll build the dashboard together from here.

## Slide 14 · If something breaks

**What the student sees on this slide:**

_There's almost nothing you can't get past_

## Stuck? Tell Claude. It's the troubleshooter.

This is the habit for everything going forward: when something doesn't work, you don't go hunting for the fix — you describe what happened to Claude , and it diagnoses and fixes it. Paste the error, or just say what you see:

[PROMPT — the exact text the student would paste; you can run or adapt this for their project]
> That didn't work — here's what happened: [paste the message, or describe what you see on screen]. What's going on, and can you fix it?

Claude reads the error, knows the usual causes, and walks you through it — the same way it ran the setup. It can almost always get you unstuck.

 ✉️

Still stuck after asking Claude a couple of times? Don't lose your evening over it — email me at eric@stratengineai.com and I'll walk you through it.

**Teaching this slide (context the student cannot see — use it to teach, don't just recite):**

The troubleshooter habit: describe the symptom to Claude, don't hunt. If a student reaches you here during Class 2 prereqs, the likeliest causes to check, in order: the Supabase restart/resume/authenticate sequence (by far the most common — see "The restart everyone trips on"); a locked-down work Google account (use a personal gmail); analytics reading zero because it's within the ~48h delay (wait, don't debug); a paused Supabase project (click Resume); the tag not firing (wrong property or not on the live page). Honor the last line — if they've tried a couple of times and are stuck, emailing Eric is the right call, not losing their evening.
