build.contrapaul.com

17 October 2026, Shenzhen

Not a “prompt talk”

How I actually build learning websites with AI

Follow along build.contrapaul.com

You said

[top three words]

Most of us picture a chat window. That is the smallest version of this.

Who I am

Design teacher. Not a developer.

800+
changes to one education site since April
12
live sites
30+
classroom tools

Part one

Things I’ve made

Montage: 3 to 5 seconds each of four or five sites, looping, under 10 MB (media/montage.mp4)

01

[Resource 1]

[The problem it solves]

[How long it took]

Looping screen recording of the resource in use, plus a QR code to it

02

[Resource 2]

[The problem it solves]

[How long it took]

Looping screen recording of the resource in use, plus a QR code to it

03

[Resource 3]

[The problem it solves]

[How long it took]

Looping screen recording of the resource in use, plus a QR code to it

Part two

Not prompts. Structure.

What the AI is allowed to do, and where the work lives.

On the left you are the hands. On the right you are the editor.

Chatbot

  1. YouAsk
  2. AIAnswers
  3. YouCopy and paste into a file
  4. YouTest it
  5. YouPaste the error back
  6. YouRepeat

Agent in a harness

  1. YouDescribe the goal
  2. AIReads your project
  3. AIWrites the files
  4. AIRuns the page and looks at it
  5. AIFixes what is broken
  6. AISaves a change you can undo

Agentic

It works in a loop until the job is done.

A tool is anything it can use besides talking: files, code, a browser, the web. Tool use turns an answer into an action.

Plan
Use a tool
Check the result
Decide what’s next
until
done

Reasoning and thinking

It plans before it types.

Read the thinking when something goes wrong. It shows you what it misunderstood.

Thinking
The brief says the clicker sends Page Down. So Page Down must step frames exactly like the arrow keys. F5 normally reloads the page. Mid-talk, that would be a disaster. Map F5 to full screen and stop the reload.
Done. Page Down, the arrows and Space all step frames; F5 goes full screen.

AI agnostic

Any agentic model, in any harness.

Claude Code OpenAI Codex GitHub Copilot agent mode Cursor Gemini CLI

Tools change every few months. The habits don’t. In mainland China, most of these need a VPN.

Permanence is the point

A chat disappears. A repo remembers.

A chat has a memory limit, a context window. A repo keeps every file and every saved change.

“Remember last week when we fixed the scoreboard?”
f2f16e8A break after round 5, in the house lookSep 24
c9af771Add a handoff documentSep 23
2a88d90Mandarin and pinyin for every phraseSep 21
51aca5bBuild the trivia site: gate, deck, five round themes, live scoreboardSep 21

Real commits from my trivia night repo.

On your device, or in the cloud.

My laptop

A local session sees my files and opens a live preview.

The repoTHE MEETING POINT

The cloud

A cloud session starts from a browser or my phone, works on a copy, and sends it back.

Part three

You’re looking at the example.

This site did not exist on 15 October. Here is every step, with the real files.

1

The plan

I wrote what I wanted, in plain English, and asked for a plan. Not code.

PLAN.md, the brief, quoted word for word
> I'll start with cloud.contrapaul.com and a question. Following that I'll switch tabs and jump to build.contrapaul.com, which will be a new website that is both a presentation and a guide.
> I want to have a multi-tab page ... with the ability to use keyboard shortcuts (arrows) to move between each full screen page element as if they are slides, but the tabs can also be scrolled through conventionally.
> The style/inspiration is slick motion graphics, with the feel of being sliding through/scrolling through a video showcase.
2

The build

First session: the tabs, the frames, the keys. It ran the page, looked at it, and fixed its own mistakes before showing me.

Sped-up screen recording of the first build session (media/first-build.mp4)
3

Then it’s mine

Some changes I typed myself. Some I described. This is where most of the time goes, and it’s the fun part.

Two or three real before-and-after pairs from building this site
4

Commits

Every change that works is saved with a note: a commit. My undo button and my diary.

  1. 2103c0fThe talk, the guide and the projectsOct 15
  2. b393647Frames, clicker keys, router and motionOct 15
  3. aa9ff50Glossary: 52 terms, hover cards, deep linksOct 15
  4. e8caf45Fonts, QR encoder and the slop posterOct 15
  5. f9a3d9bStart build.contrapaul.com: plan, rules, handoffOct 15
5

Push to GitHub

Pushing copies the commits up to GitHub. Now the project lives online, not just on my laptop.

Terminal
$ git push
To https://github.com/contrapaul/build.git
 * [new branch]      HEAD -> main
branch 'main' set up to track 'origin/main'.
6

Live on Cloudflare

A static site is just files. Connect the repo once, and every push goes live in about a minute. On my own domain, it works in China.

  1. Workers & Pages, Create, Pages, Connect to Git
  2. Pick the repo
  3. Leave the build settings blank
  4. Deploy
  5. Add the subdomain: build.contrapaul.com

Part four

What matters more than prompts.

Habit: be specific

Name it. Describe it. Say what done looks like.

Make the video bigger and nicer.VAGUE
The video should load first in a player that fills ~90+% of either horizontal or vertical dimensions, depending on video size. Once it ends I’d like it to dissolve/fade... and have the question load in, filling much of the screen but leaving breathing room.SPECIFIC: MY TRIVIA PROJECT

Habit: write the rules down

Class rules, for the agent.

Every rule says why. Same mistake twice, and it becomes a rule.

trivia/CLAUDE.md, a rules file
Nothing is fetched from another host, ever. Fonts are in public/fonts. No CDN, no Google Fonts. Those are unreachable in China and a blocking request to a dead host stops the page in front of a room full of people.

Do not add questions. TBD in the data means Paul has not settled it.

Legible from the back of the room. Every screen is judged at a distance. Bigger is better. Nothing depends on hover.

A rule I hold myself to: no AI art

An AI poster, warning you about AI.

  1. Slogans that come in threes
  2. “In today’s fast-paced world”
  3. An em dash, in the advice on how to spot AI writing
  4. A QR code that goes nowhere, on a poster about fake sources

Students notice.Students know.Students judge.

An AI-generated infographic titled Can You Spot AI Slop?, with a robot mascot, a surprised student, eight numbered warning signs and a QR code. Shown as an example of AI slop. AI-generated: shown as an example

The other side

Tell students what AI made, and why.

When they see how it was used, and what it made possible, they buy in. We ask students for AI disclosure. We should model it.

A real tool of mine with its AI disclosure line visible, or the "how it was made" section of edu.contrapaul.com/ai/about

Habit: write it down, and make the agent keep it

Brief first. Plan next. Handoff always.

The agent forgets everything between sessions. The handoff file is its memory, like a cover note for a substitute.

  • Status at a glance
  • Ground rules
  • Gotchas that have already bitten
  • Open items
  • Working with Paul
build/CLAUDE.md, the rule that keeps it current
After every change that works, add a dated entry to the top of the log in HANDOFF.md: what was asked, what was built, what was decided and why, and what is still unverified. Update the status section if it changed. Do this before saying you are finished.

Habit: reuse what works

“We already have one of those.”

35
curriculum pages share one curriculum.js
10
activities share one drag-and-sort. The tenth took one sentence: “like the one in A3.3”
31
of this site’s glossary terms came from my student coding guide

A story

Fixing it live, in class.

One line in large type: the line students said, or the change you made. Or one image or short clip.

Quick tips

  • Start with something you needNot something impressive. Need makes you specific.
  • One change at a timeCheck it yourself.
  • When it works, commitUndo is free. Use it.
  • Ask “what is this called?”And “explain what you just did.”
  • No student data, everNo accounts, no names.
  • Read the thinkingWhen it goes wrong, that’s where the clue is.

Your turn

Questions, or play.

Start: your first site build.contrapaul.com/#/start
Projects: play with mine build.contrapaul.com/#/projects

If there is time

One more thing.

One small change to this site, live. Commit, push, and reload in about a minute.

Start here

Your first site, live.

A one-page website at your own address, built with an AI coding agent. About an hour the first time. Scroll, or use the arrow keys.

01

What you need

  • A GitHub account. Free.
  • A Cloudflare account. Free.
  • An AI coding agent: Claude Code, OpenAI Codex, GitHub Copilot, Cursor or Gemini CLI. Most need a paid plan. Any agentic one will do.
  • Optional: your own domain, about the price of a coffee a year.
02

Pick something you need

Not something impressive. Need makes you specific.

  • A quiz for one unit, with an explanation for each wrong answer
  • A sorting activity: drag terms into groups
  • A countdown to an exam or event
  • A helper for writing report comments from your own phrases
03

Write a one-page brief

Before any code, answer four questions in plain language. That is your brief.

  • Who uses it?
  • Where? A projector, a phone, a school laptop. Say which screen.
  • What does done look like? “A student on a phone can finish it without scrolling sideways.”
  • What must it never do? “Ask for names.” “Load anything from another website.”

A template is at the end of this page.

04

Build it in the browser

The easiest first route: nothing to install.

  1. On GitHub, create a new, empty repo.
  2. Open a cloud session on it (for example, claude.ai/code).
  3. Paste your brief and ask: “Write a plan for this. Don’t write code yet.”
  4. Read the plan. Change what is wrong. Approve it.
  5. Ask it to build, and to add a CLAUDE.md and a HANDOFF.md using the templates below.
  6. Review what it made, then merge it into your main branch.

On your own computer instead? Install your agent, clone the repo, and follow the same steps in a local session, with a live preview.

05

Publish it

  1. In Cloudflare: Workers & Pages, Create, Pages, Connect to Git.
  2. Choose your repo.
  3. Leave the build settings blank. A static site needs none.
  4. Save and Deploy. You get an address within a minute.
  5. Optional: Custom domains, then add a subdomain of your own domain.

From now on, every push goes live by itself.

06

Make it yours

  • One change at a time. Check it yourself.
  • When it works, commit.
  • Don’t know what something is called? Ask. Then use that word.
  • Same mistake twice? Add a rule to your rules file.
  • Something wrong? Read the thinking to see what it misunderstood.
07

Before you share it

  • No student data: no names, no accounts, no tracking.
  • Add a license, so people know what they may reuse.
  • Add an AI disclosure line: what AI made, what you did.
  • No AI images. Use your own, your students’ (with credit), or none.
  • Open it on a phone.

Working from mainland China

  • Most AI coding tools need a VPN.
  • GitHub works, but can be slow.
  • Cloudflare Pages on your own domain loads normally. *.pages.dev and github.io addresses often don’t.
  • Keep everything in the project: no Google Fonts, no CDNs.
08

Starter files

Copy these into your repo. They work with any agent. Some agents look for AGENTS.md instead of CLAUDE.md: check which yours reads.

BRIEF.md
# Brief: [name]

## Who uses it
[Students in grade X / colleagues / me on a projector]

## Where
[Projector at 16:9 / phones / school laptops]

## What it does
[Two or three sentences]

## Done looks like
- [A student can ... without ...]
- [It loads in under ... on school wifi]

## Must never
- Ask for names or accounts
- Load anything from another website
HANDOFF.md
# Handoff

Newest entry at the top. The agent updates this after every working change.

## Status
[One paragraph: what works, what does not yet]

## Open items
- [ ]

## Gotchas that have already bitten

## Log
### [date]: [what changed]
CLAUDE.md (or AGENTS.md)
# Rules for this project

Read BRIEF.md and HANDOFF.md before changing anything.

- No student data. No names, no accounts, no tracking. Why: this is public.
- Nothing is loaded from another website. Fonts and scripts are saved in
  the project. Why: blocked sites stop the page loading.
- One change at a time, and say what you changed. Why: I need to check it.
- Ask before guessing. If the brief does not say, ask me.
- After every change that works, add a dated entry to the top of
  HANDOFF.md: what was asked, what was built, what was decided, and what
  is still unchecked. Do this before telling me you are finished.

Where next

See what it can become.

The Projects tab has everything from the talk. For students learning to code with AI, there is a bilingual guide at make.contrapaul.com/tools/codewithai.

Projects

Things I’ve made.

All built with an AI coding agent, for real classes. Open them, try them, borrow the ideas.

Glossary

Every word, defined once.

Hover any dotted word on the site for a short definition. Click it to come here.