A comprehensive web-based class schedule viewer and data management system for California Community Colleges.
Check out the live demo: https://jmcpheron.github.io/ccc-schedule/
CCC Schedule provides a modern, accessible interface for browsing community college course schedules with powerful search and filtering capabilities. The project includes both a responsive web application and Python utilities for data processing and validation.
- π Advanced Search: Real-time search across course titles, descriptions, and course numbers
- π― Smart Filtering: Filter by term, college, subject, units, days, time, and more
- π± Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
- βΏ WCAG 2.1 AA Compliant: Full accessibility with keyboard navigation and screen reader support
- π Dark Mode: Automatic theme detection with manual toggle and persistence
- π Multiple Views: Card view and table view for different browsing preferences
- π Pagination: Efficient browsing of large course catalogs
- π¨ Customizable: Easy to brand for your college's identity
- β Data Validation: Ensure schedule data integrity
- π Format Conversion: Convert between different data formats
- π CLI Tools: Command-line utilities for data management
- π§ͺ Comprehensive Testing: Full test suite with pytest
- Frontend: Single-page application using HTML5, Bootstrap 5, and jQuery
- Data Format: Unified JSON schema for all schedule data
- Backend: No server required - works with static files
- Python Tools: Data processing utilities with modern type hints
- Deployment: Can be hosted anywhere (GitHub Pages, S3, CDN, etc.)
- For the web app: Any modern web browser
- For development: Python 3.9+ and UV
# On macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip
pip install uv- Clone the repository (or fork it for your own college)
- Add your JSON data files to the
data/directory - Customize the branding in
index.html - Deploy to any static web host
# Clone the repository
git clone https://github.com/jmcpheron/ccc-schedule.git
cd ccc-schedule
# Or if you've forked it:
# git clone https://github.com/YOUR-USERNAME/ccc-schedule.git
# cd ccc-schedule
# Install Python dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Check code quality
uv run ruff check .
uv run mypy .
# Run locally
python3 -m http.server 8000
# Then open http://localhost:8000 in your browserThe project uses a unified JSON schema that combines all schedule information:
{
"schedule": {
"metadata": {
"version": "1.0.0",
"terms": [...],
"colleges": [...]
},
"subjects": [...],
"instructors": [...],
"courses": [
{
"course_key": "CS-101",
"title": "Introduction to Computer Science",
"sections": [...]
}
]
}
}See data/schema.json for a complete example.
The project includes powerful command-line tools for data management:
# Validate schedule data
uv run python -m src.cli schedule-validate data/schedule.json
# Show schedule information
uv run python -m src.cli schedule-info data/schedule.json
# Filter schedule data
uv run python -m src.cli schedule-filter data/schedule.json \
--subject CS \
--open-only \
--output filtered.json
# Legacy commands (for backward compatibility)
uv run python -m src.cli validate data/courses.json
uv run python -m src.cli filter data/courses.json --min-units 3This project uses UV for modern Python dependency management:
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov
# Run specific test file
uv run pytest tests/test_basics.py# Format code
uv run ruff format .
# Lint code
uv run ruff check .
# Type checking
uv run mypy .# Add a dependency
uv add requests
# Add a dev dependency
uv add --dev pytest-watch
# Update dependencies
uv lock --upgradeccc-schedule/
βββ src/ # Python source code
β βββ __init__.py # Package exports
β βββ models.py # Data models (dataclasses)
β βββ data_utils.py # Data processing utilities
β βββ cli.py # Command-line interface
βββ tests/ # Python test suite
β βββ conftest.py # Pytest configuration
β βββ test_models.py # Model tests
β βββ test_data_utils.py # Utility tests
β βββ test_schedule_utils.py # Schedule processing tests
βββ data/ # JSON data files
β βββ schema.json # Example unified schema
β βββ example.json # Legacy example data
βββ docs/ # Documentation
β βββ API.md # Python API documentation
β βββ DEPLOYMENT.md # Deployment guide
βββ css/ # Stylesheets
β βββ schedule.css # Custom styles
βββ js/ # JavaScript files
β βββ schedule.js # Main application logic
βββ assets/ # Static assets (logos, etc.)
βββ index.html # Main web application
βββ pyproject.toml # Python project configuration
βββ uv.lock # Locked dependencies
βββ CONTRIBUTING.md # Contributing guidelines
βββ CLAUDE.md # Claude Code instructions
βββ README.md # This file
The Python components use pytest with:
- Fixtures for shared test utilities
- Parametrized tests for multiple scenarios
- Async support with pytest-asyncio
- Coverage reporting with pytest-cov
- API Documentation - Python API reference and examples
- Deployment Guide - How to deploy for your college
- Local Development Guide - Set up test branches and run locally with your data
- Contributing Guidelines - How to contribute to the project
We welcome contributions! Please see our Contributing Guidelines for details on:
- Development setup
- Code style guidelines
- Testing requirements
- Pull request process
MIT