This is the complete guide for running a Claude Code workshop. Read it once top to bottom before your event, then use the checklists to track progress.
Collect registration data (name, email, job title, AI experience, computer type). Then run the research prompt in prompts/attendee-research/research-prompt.md through Claude in batches of 7-10 people.
For each person you get back:
- Full name, likely job title and company
- LinkedIn URL (if found)
- Confidence level: HIGH / MEDIUM / LOW
- One-sentence intro angle
Organize results using prompts/attendee-research/profiles-full.md. Add two sections at the end:
- Flags to Action - email typos, missing info, anything to follow up before the event
- Room Expertise Map - group attendees by skill tier so you can see the shape of your audience
Run a second pass on LOW confidence results with slightly different search terms.
Rules (learned the hard way):
- 3-4 people per pod. Not 5-6 - too many causes idle members.
- Each pod needs one experienced leader (PM, senior dev, community leader).
- Each pod needs at least one person with a Claude subscription.
- Mix experience levels - put learners with mentors, not with other learners.
- Balance computer types (Mac/Windows) when possible.
- Write a rationale for each pod grouping so you remember why.
Do not create pod repos until attendance is confirmed. We made 6 pods, only 4 showed up. Two repos had to be archived. Create repos just-in-time the morning of, or at most the night before, based on confirmed RSVPs.
Automated option: Use the team-repo CLI to provision everything in one command:
npx team-repo init workshop.jsonThis creates the hub repo, all team repos with CLAUDE.md/README/notes.md, and links them together. See the team-repo README for the config format.
Manual option: Create a GitHub org (or use an existing one). You need:
- Hub repo (e.g.,
my-workshop) - read-only reference for all attendees. Copy fromtemplates/hub/. - One repo per pod (e.g.,
workshop-pod-a) - writable workspace per team. Copy fromtemplates/pod/. - (Optional) Attendee research repo - profiles and research data, facilitator-only.
Find-and-replace these placeholders in all template files:
| Placeholder | Replace with |
|---|---|
{{EVENT_NAME}} |
Your workshop name |
{{EVENT_DATE}} |
Date of the event |
{{EVENT_TIME}} |
Start and end time |
{{EVENT_LOCATION}} |
Venue name and address |
{{ORG_NAME}} |
GitHub org name |
{{HUB_REPO}} |
Hub repo name |
{{POD_NAME}} |
Pod A, Pod B, etc. |
{{POD_LETTER}} |
a, b, c, etc. |
{{POD_REPO}} |
Pod repo name |
{{POD_SIZE}} |
Number of team members |
{{POD_MEMBERS}} |
Full member list with roles |
{{POD_LEADER}} |
Pod leader name |
{{POD_RATIONALE}} |
Why this grouping works |
{{FACILITATOR_1}} |
First facilitator name and bio |
{{FACILITATOR_2}} |
Second facilitator name and bio |
{{DISCORD_INVITE}} |
Discord invite link |
Access tokens:
Create fine-grained PATs (GitHub Settings > Developer Settings > Personal Access Tokens > Fine-grained tokens):
- One token per pod repo
- Scope:
contents:writeonly - Do NOT use org-level OAuth tokens (
gho_prefix) - these give access to everything
Distribute tokens via Discord pins or printed cards. Never commit tokens to repos.
Each pod's CLAUDE.md includes the one-command setup:
git remote set-url origin https://YOUR_TOKEN@github.com/{{ORG_NAME}}/{{POD_REPO}}.git
- Create server with channels: #general, #pod-a through #pod-n, #facilitators
- Pin in each pod channel: Claude API key (
sk-ant-...), GitHub PAT token, quick-start link - Pin in #general: hub repo link, setup guide link, Discord invite for sharing
Option A - Use gsap-deck to generate from JSON (recommended):
npx gsap-deck scaffold -o my-intro.json # creates starter config
# edit my-intro.json with your event content
npx gsap-deck build my-intro.json --theme midnight --openSee gsap-deck for all 8 slide types and 5 themes. Example configs in examples/.
Option B - Edit the pre-built HTML files directly:
Copy from presentations/:
workshop-intro.html- 6 slides: title, the problem, the solution, stats, how it works, closingcollab-guide.html- 10+ slides: roles, handoffs, rate limits, viewing apps locally, midpoint check-in, NotebookLM
Open in browser, navigate with arrow keys.
See checklists/day-of.md for the full checklist. Key items:
- Test clone + push with each PAT token
- Verify Claude Code install works on both Mac and Windows
- Open browser tabs for each pod's GitHub repo
- Have terminal ready to clone and run any pod's app locally
- Presentation HTML files open and tested
- WiFi password visible in the room
- Run the workshop intro presentation
- Point everyone to: hub repo, Discord, SETUP.md
- Walk through setup checkpoints (each step has a "raise your hand" moment)
- Confirm everyone has Claude access and Claude Code running
- Introduce pod leaders by name
Pod kickoff guide (templates/guides/pod-kickoff.md) walks them through:
- Go around the table - what wastes your time at work?
- Pick one problem using filters (can AI help? buildable in 4 hours? shared pain?)
- Define it: one sentence for the problem, the solution, and how you'll demo it
- Lock the idea: fill notes.md, update README, tell Claude Code, assign roles, set 30-min checkpoint
If a pod is stuck after 15 minutes, walk over with the stalled-pod prompt from prompts/facilitator/stalled-pod.md.
Your monitoring cadence:
Every 20 minutes, check all repos:
for pod in a b c d; do
echo "=== Pod $pod ==="
gh api repos/ORG/pod-$pod/commits --jq '.[0:3] | .[] | "\(.commit.author.date[0:16]) | \(.commit.message | split("\n")[0])"'
doneFlag any pod with no commits in 30+ minutes. Walk to their table with a custom prompt based on what they're building.
Share proactively during the build:
- Rate limit workaround (see
prompts/facilitator/rate-limit-workaround.md): switch to claude.ai, mock up frontend, paste code back into Claude Code - Blind spot audit (see
prompts/facilitator/blind-spot-audit.md): "audit for demo-breaking bugs, rank HIGH/MEDIUM/LOW, fix HIGH only" - Viewing the app locally: tell them to say "open this in my browser so I can see it" to Claude Code
Pull and run apps locally so you can see what each pod is building:
# Static HTML (Pod A, C style)
git clone https://github.com/ORG/pod-a.git /tmp/pod-a && open /tmp/pod-a/index.html
# Vite/React (Pod B style)
git clone https://github.com/ORG/pod-b.git /tmp/pod-b && cd /tmp/pod-b && npm install && npm run dev -- --port 3001
# Next.js (Pod D style)
git clone https://github.com/ORG/pod-d.git /tmp/pod-d && cd /tmp/pod-d && npm install --legacy-peer-deps && npm run devEnable GitHub Pages for static HTML apps:
gh api repos/ORG/pod-a/pages --method POST --input - <<< '{"source":{"branch":"main","path":"/"}}'One person per pod, two minutes max.
Cover:
- What you built so far (one sentence)
- What was easy (what Claude nailed)
- What blocked you (rate limits, wrong output, unclear prompts)
- What's next (one specific thing)
After each pod speaks:
- Anyone with the same blocker raises hand
- Anyone who solved it shares how
- Move on - don't get stuck in one pod's problem
See prompts/facilitator/midpoint-checkin.md for the prep prompt pods can use.
Share the final push prompt from prompts/facilitator/final-push.md in all channels.
Your tasks:
- Enable GitHub Pages for all static HTML apps
- Pull latest from all repos, verify each app runs
- Update hub README "What Each Pod Built" section
- Prepare to open each repo on the big screen
Each pod gets 3 minutes:
- The problem (30 sec)
- The solution (30 sec)
- Live demo (60-90 sec)
- What's next (20 sec)
- What surprised you (20 sec)
NotebookLM option for pods that want polish:
- Go to notebooklm.google.com
- Add source - paste repo URL or copy notes.md content
- Generate Audio Overview - two AI hosts discuss their project
- Screen record while audio plays = instant explainer video
If a demo breaks: show a screenshot, show the output, describe it. The audience evaluates the problem solved, not the live demo skills.
See checklists/post-event.md. Key items:
- Update hub README with final project names, descriptions, live links
- Commit presentation files to hub repo
- Rotate/revoke all PAT tokens immediately
- Share repo links and live app URLs with attendees
- Archive pod repos (or leave open for continued work)
- Collect feedback via Discord or form
| Metric | Value |
|---|---|
| Total attendees | 15 |
| Pods | 4 (3-4 people each) |
| Session length | 5 hours (1 PM - 6 PM) |
| Apps shipped | 4 (all working, 2 deployed live) |
| Repos managed | 5 (1 hub + 4 pods) |
| Commits across all pods | 40+ |
| Time from idea to working app | 2-3 hours |
| Most ambitious build | Next.js + Supabase + Node agent API |
| Simplest build | Single HTML file, zero dependencies |