Skip to main content

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:

  1. Default values (built-in)
  2. ~/.sbc.toml - User-level config
  3. .sbc.toml - Project-level config
  4. SBC_* 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)

Metadata

Release files for sbcourse 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sbcourse 0.1.7
File Size Uploaded Provenance
sbcourse-0.1.7.tar.gz 37.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sbcourse 0.1.7
File Interpreter ABI Platform
sbcourse-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 86.0 kB

Release files / sbcourse-0.1.7.tar.gz

Download URL sbcourse-0.1.7.tar.gz
Size 37.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4e3969674159efddf3b3b4ee56257ebe70f9a8f6111b8feb1c82b696e692ece2
BLAKE2b-256 checksum
How to use checksums
3217333e162b5c6e43b0468556fd8c6cfb40a50deabb2b2ffb0cd32cf291683e
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / sbcourse-0.1.7-py3-none-any.whl

Download URL sbcourse-0.1.7-py3-none-any.whl
Size 48.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7bbd5746557f74de66c148c2387baaf7bc629950b18ee594afc91f6f77c56a0d
BLAKE2b-256 checksum
How to use checksums
7589459794086008fe08e62e9cc47cb7cd51690a8922f985fb2a3446b5f640a5
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for sbcourse 0.1.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page