Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

158 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BitPilot

Use Bitcoin for something useful. Learn what you need along the way.

BitPilot is a beginner-friendly onboarding app organized around practical outcomes: receiving a payment, sending money, securing savings, publishing independently, or contributing to an open-source project.

Instead of starting with a large curriculum, learners choose a concrete task and complete a short journey by:

  • sending payments
  • scanning QR codes
  • creating identities
  • completing simple tasks

The full Bitcoin, Lightning, Nostr, eCash, self-custody, privacy, sovereignty, and open-source mission library remains available as an optional exploration mode.

Built for:

  • workshops
  • hackathons
  • classrooms
  • communities
  • self-learning

Features

  • Mission-based onboarding
  • Learn → Quiz → Do flow
  • Real Lightning & Nostr interactions
  • Facilitator dashboard
  • Beginner-friendly UX
  • SQLite-powered backend
  • Rust + React stack

Stack

Backend

  • Rust
  • Axum
  • SQLx
  • SQLite

Frontend

  • React
  • TypeScript
  • Vite

Running Locally

Backend

cd backend
cargo run

Runs on:

http://localhost:8080

Frontend

cd frontend
npm install
npm run dev

Runs on:

http://localhost:5173

Project Structure

bitpilot/
├── backend/     Rust API server
├── frontend/    React frontend
└── README.md

Current Status

BitPilot currently uses:

  • simulated rewards
  • optional LNbits integration
  • SQLite local storage

No real funds are required to use the app.


Running a weekly challenge

A challenge is a themed public leaderboard over a mission subset and a time window. The easiest way to create one is the app itself: open the landing page, scroll to "Community challenges", and hit "Run a weekly challenge". The form offers the theme presets below, shows the share link, and displays the facilitator token once.

Prefer scripting it? The same endpoint takes a single request (creation is open, like session creation; rate limiting controls abuse):

curl -s -X POST https://<your-backend>/api/challenges \
  -H 'content-type: application/json' \
  -d '{
    "title": "Lightning week",
    "blurb": "Receive and send your first Lightning payment.",
    "missions": [21, 22, 23, 24],
    "starts_at": 1760000000,
    "ends_at": 1760604800
  }'

The response contains the challenge id (share https://<your-app>/?challenge=<id> as the public page; it shows the missions, a join button while live, and the read-only leaderboard) and a facilitator_token for the live facilitator dashboard of the backing session. Completions count only between starts_at and ends_at (unix seconds).

Theme ideas that map cleanly onto the catalogue:

Theme Missions
Understand a transaction [6, 7, 19]
First Lightning payment [21, 22, 23, 24]
Publish your first note [13, 14, 26]
Seed phrase bootcamp [11, 12, 41]

Vision

BitPilot aims to make Bitcoin onboarding:

  • simple
  • interactive
  • practical
  • beginner-friendly

especially for communities that are new to Bitcoin and Lightning.


License

MIT License.

About

Hands-on Bitcoin onboarding with Lightning, Nostr & eCash. No experience needed.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages