Steel Bank Course - A comprehensive toolkit for managing Jupyter notebook-based courses with interactive widgets, leaderboards, and gamification
Project description
SBC - Steel Bank Course
A comprehensive Python toolkit for managing Jupyter notebook-based courses with interactive widgets, persistent state, leaderboards, and gamification.
Features
For Students
- Interactive Widgets - Quizzes, flashcards, trivia games, code puzzles, and reflections
- State Persistence - Automatically resume activities where you left off
- Gamification - Streaks, points, and leaderboard competition
- PDF Export - Export notebooks to PDF with source attachment
For Instructors
- YAML-based Content - Define quizzes, flashcards, and challenges in simple YAML
- Assignment Distribution - Strip solutions and generate student versions
- Score Tracking - Discord-based leaderboards with multiple metrics
- Course Templates - Quickly scaffold new course structures
Installation
pip install sbcourse
# For Discord bot functionality
pip install sbcourse[bot]
Quick Start
In Jupyter Notebooks
# Load the extension
%load_ext sbc
# Run a quiz
%quiz week-01
# Play trivia
%trivia calculus -n 5
# Study flashcards
%flashcards derivatives
# Write a reflection
%%reflection week-01
What did you learn about derivatives this week?
# Export to PDF (with .ipynb attached)
%pdf
Command Line
# Create a new course
sbc new my-course
# Generate student assignment (strips solutions)
sbc assign assignment-01 --push
# Show configuration
sbc cfg show
# Run Discord leaderboard bot
sbc bot run
Magic Commands
| Command | Description |
|---|---|
%quiz <name> |
Load and display an interactive quiz |
%trivia [topic] [-n NUM] |
Start a trivia game |
%flashcards <deck> |
Load flashcard deck for study |
%leaderboard [--weekly] [--fair] |
Display course leaderboard |
%%reflection <name> |
Create reflection prompt (cell body is prompt) |
%pdf [filename] |
Export notebook to PDF |
%index [--rebuild] |
Build semantic search index |
%%search [-n NUM] |
Search course notebooks |
%assign <notebook> |
Generate student version |
%update <files> |
Commit and push files |
Content Formats
Quiz Format (YAML)
title: Week 1 Quiz
questions:
- question: What is the derivative of x^2?
options:
- "x"
- "2x"
- "x^2"
answer: 1
explanation: Power rule - bring down the exponent and subtract 1
Flashcard Format (YAML)
title: Calculus Fundamentals
cards:
- front: What is the derivative of sin(x)?
back: cos(x)
- front: What is the integral of 1/x?
back: ln|x| + C
Leaderboard Setup
1. Configure Students
from sbc.leaderboard import configure
configure(
api_url="https://your-bot.fly.dev",
api_secret="your-secret",
student_id="jsmith",
display_name="Jane Smith",
cohort="F25-06623"
)
2. Run Discord Bot
export DISCORD_TOKEN="your-bot-token"
export API_SECRET="your-api-secret"
sbc bot run --port 5000
3. Discord Commands
/leaderboard [metric] [cohort]- Display standings/mystats- View your personal statistics/cohorts- List all cohorts
Project Structure
sbc/
├── src/sbc/
│ ├── widgets/ # Interactive Jupyter widgets
│ │ ├── quiz.py # Multiple choice quizzes
│ │ ├── trivia.py # Timed trivia games
│ │ ├── flashcards.py # Spaced repetition cards
│ │ ├── reflection.py # Free-form responses
│ │ └── puzzles.py # Code challenges
│ ├── persistence/ # State management
│ ├── leaderboard/ # Score tracking
│ │ ├── client.py # Notebook client
│ │ └── server/ # Discord bot + API
│ ├── magic.py # IPython magic commands
│ ├── pdf.py # PDF export
│ ├── search.py # Semantic search
│ ├── cli.py # Command-line interface
│ └── config.py # Configuration system
└── pyproject.toml
Configuration
SBC uses a hierarchical configuration system:
- Default values (built-in)
~/.sbc.toml- User-level config.sbc.toml- Project-level configSBC_*environment variables
Generate a template:
sbc cfg init
Assignment Generation
Mark solution code in notebooks:
# Code cells
### BEGIN SOLUTION
answer = 42
### END SOLUTION
<!-- Markdown cells -->
<!-- BEGIN SOLUTION -->
The answer is 42.
<!-- END SOLUTION -->
Generate student version:
sbc assign assignment-01 --push
PDF Export Options
%pdf # Default: attach .ipynb, add header
%pdf report.pdf # Custom filename
%pdf --no-attach # Don't attach source notebook
%pdf --no-header # Skip timestamp header
%pdf --no-save # Don't auto-save before export
%pdf -v # Verbose output
Semantic Search
Search across all course notebooks using ChromaDB for semantic similarity.
# Build the search index (one time)
%index
# Force rebuild the index
%index --rebuild
# Search for related content
%%search -n 5
What is a Gaussian process?
The search returns links to relevant notebook cells (markdown and code) ranked by semantic similarity to your query.
Development
# Install with dev dependencies
pip install -e ".[dev]"
# or with uv
uv pip install -e ".[dev]"
# Run tests
pytest
# Lint code
ruff check src/
License
MIT License - see LICENSE file for details.
Author
John Kitchin (jkitchin@andrew.cmu.edu)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sbcourse-0.1.4.tar.gz.
File metadata
- Download URL: sbcourse-0.1.4.tar.gz
- Upload date:
- Size: 37.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d570d2ab921bb7d5855a2d52148b7a94bf18e128a088814a84200a018331f10
|
|
| MD5 |
0a4c030883f9a8f14ab7918f82049b63
|
|
| BLAKE2b-256 |
77f782086832c843246ed3924b686232f1ad3135d314a9962493e11027fad22d
|
File details
Details for the file sbcourse-0.1.4-py3-none-any.whl.
File metadata
- Download URL: sbcourse-0.1.4-py3-none-any.whl
- Upload date:
- Size: 48.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
815b5ffd045144ed021b2b948e751d8a2f63ee96243c28732c926495ae746208
|
|
| MD5 |
e1cc22fb1793c531b07ccdeb3ea2bf07
|
|
| BLAKE2b-256 |
c4e459267765a4b75eaba156f4c8e94662ee252f0444d0d87b573895ae192114
|