Skip to content

Curriculum: 91 of 106 missions end at a quiz #76

Description

@Jolah1

BitPilot's pitch is "learn Bitcoin by doing". Right now, 91 of 106 missions end at a multiple-choice quiz and a button that says "You got it". No artifact, no API call, nothing the learner made.

Where the gap is

Every mission has a do step, but kind: 'knowledge' means the button just credits you. Counting the missions with a real hands-on step:

Flight path Hands-on Total
Money Basics 0 8
Bitcoin 0 12
Privacy 0 12
Full Independence 1 15
eCash 2 10
Lightning 2 12
Self-custody 2 15
Open Source 3 6
Nostr 5 16
Total 15 106

The three paths at the top matter most. Money Basics and Bitcoin are the two Beginner paths — they are the first thing every learner touches, and right now the first eight missions of the product are read, answer, click, repeat. Privacy is twelve consecutive missions of the same.

What "hands-on" means here

It does not have to be an API call. A step counts if the learner produces something they didn't have before. The existing kinds show the range:

  • seed-words — generate a BIP39 mnemonic in the browser, then get quizzed on word Bump rand from 0.8.6 to 0.9.4 in /backend #7
  • derive-address — derive a real BIP84 address from that mnemonic
  • onchain-signet — broadcast a real transaction, backend verifies it against a block explorer
  • github-pr — backend asks GitHub whether your PR is really merged and really yours
  • paste-value — a reflection input: "paste the docs sentence you'd fix"

A conversion drill, a classification exercise, or a calculation checked against live chain data all qualify. The bar is: the learner does something, and we check it.

How to add one

frontend/src/lib/types.ts documents the four steps at the DoKind union:

  1. Add the kind to DoKind in frontend/src/lib/types.ts
  2. Add the handler branch in LearnerView's handleDo() (frontend/src/views/LearnerView.tsx)
  3. Add the verifier branch in verify_proof() (backend/src/routes/missions.rs)
  4. Add any new ledger table in a migration

The backend DoKind enum lives in backend/src/models/mission.rs and is the source of truth for which mission gets which kind. A new variant there is a compile error in verify_proof() until you handle it — that's deliberate.

Many good steps need no new kind at all: if the learner types an answer you can check, paste-value may already fit, and a purely client-side drill can reuse the existing plumbing.

Per-path issues

Pick one and go. Each has concrete proposals, but they're starting points, not a spec — a better idea for a mission is welcome, and you don't need to do a whole path. One mission is a perfectly good PR.

Content changes are also welcome without code: if a lesson is wrong, unclear, or out of date, open an issue or a PR against frontend/src/lib/types.ts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    curriculumMission content: lessons, quizzes, hands-on stepshelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions