A collaborative grade reporting system built with Streamlit and modular Python architecture, designed to scale from 4 to 8+ features.
Phase: Migrating from notebook to modular architecture
Branch: feat/dev-environment-refactor
- Authentication & RBAC (Autumn Erwin) - Role-based access control
- Announcements System (Meetika Kanumukula) - Teacher/admin announcements
- Parent Engagement Tools (Keith) - Parent-teacher communication
- After-Hours Question System (Jaikishan) - Timezone-aware Q&A
- AI Progress Reports (Autumn Erwin) - LangChain + Google Gemini powered student reports
- Feature 6 (TBD)
- Feature 7 (TBD)
- Low Grade Alerts & Improvement Guidance - Automatic alerts for low grades with personalized guidance
See QUICKSTART.md for a 5-minute setup guide.
# Clone and navigate to project
cd GradeReporter
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txt# Copy environment template
cp .env.example .env
# Edit .env and add your Google API key for AI features
# GOOGLE_API_KEY=your-api-key-here
# Get your free API key at: https://makersuite.google.com/app/apikey
# Create test database with sample data
python scripts/create_test_db.pyTest Credentials: All use password password
- Admin:
[email protected] - Teacher:
[email protected] - Student:
[email protected] - Parent:
[email protected]
# Run smoke tests
python scripts/smoke_test.pystreamlit run app.pyAccess at: http://localhost:8501
# Run unit tests
pytest tests/
# Run with coverage
pytest tests/ --cov=srcGradeReporter/
βββ app.py # Main Streamlit entry point
βββ config/ # Configuration management
β βββ settings.py # Centralized settings
β βββ database.py # Database connections
βββ src/
β βββ core/ # Shared functionality
β β βββ auth.py # Authentication
β β βββ rbac.py # Role-based access
β β βββ session.py # Session management
β β βββ decorators.py # Auth decorators
β βββ features/ # Feature modules
β β βββ authentication/
β β βββ announcements/
β β βββ parent_engagement/
β β βββ after_hours/
β β βββ ai_progress_reports/
β β βββ low_grade_alerts_guidance/
β β βββ feature_6-7/ # Future features
β βββ models/ # Data models
β βββ utils/ # Utilities
β βββ ui/ # Streamlit UI
β βββ components/ # Reusable components
β βββ pages/ # Page components
βββ scripts/ # Database & utility scripts
βββ tests/ # Test suite
βββ data/ # Database files (gitignored)
βββ notebooks/ # Original notebook (reference)
Each feature follows a clean separation:
- Repository Layer (
repository.py) - Database access only - Service Layer (
service.py) - Business logic - UI Layer (
ui.py) - Streamlit presentation
src/features/feature_name/
βββ __init__.py
βββ repository.py # Data access
βββ service.py # Business logic
βββ ui.py # Streamlit UI
# Create feature branch
git checkout -b feat/feature-name
# Make changes and commit
git add .
git commit -m "feat: description of changes"
# Push and create PR
git push -u origin feat/feature-name- β Always work on feature branches
- β Create PRs for all changes
- β Require code review before merge
- β Never push directly to
main
# 1. Create feature module
mkdir -p src/features/feature_name
touch src/features/feature_name/{__init__.py,service.py,repository.py,ui.py}
# 2. Enable feature in .env
echo "FEATURE_NEW_FEATURE=True" >> .env
# 3. Add navigation in src/ui/components/navigation.py
# 4. Implement repository β service β UI layers
# 5. Write tests
touch tests/test_feature_name.pypytest tests/
pytest tests/ --cov=src # With coverage# Format code
black src/
# Lint
flake8 src/
# Type check
mypy src/- QUICKSTART.md - 5-minute setup guide
- TESTING.md - Comprehensive testing guide
- MIGRATION_GUIDE.md - Detailed migration instructions
- Feature Documentation - See individual feature README files (coming soon)
- API Documentation - Generated from docstrings
- Frontend: Streamlit
- Database: SQLite + SQLAlchemy
- Authentication: bcrypt
- AI/LLM: LangChain + Google Gemini 2.5 Flash
- Testing: pytest
- Code Quality: black, flake8, mypy
Run from project root:
cd GradeReporter
streamlit run app.pyEnsure databases are in data/ directory:
ls -la data/rm -rf .streamlit/See MIGRATION_GUIDE.md for detailed migration progress and instructions.
- Autumn Erwin - Authentication & RBAC
- Meetika Kanumukula - Announcements System
- Keith - Parent Engagement Tools
- Jaikishan - After-Hours Question System
[Add license information]
Note: Original notebook preserved in notebooks/GradeReporter_Demo_1.ipynb for reference.