A Flask-based learning platform where students can view modules, watch tutorials, submit GitHub solutions, receive AI feedback, and get instructor reviews.
- Learning Modules: Organized curriculum with video tutorials and coding challenges
- GitHub Integration: Students submit solutions via GitHub repository URLs
- AI Feedback: Automated code review using Claude AI
- Instructor Review: Human feedback and pass/fail grading
- Role-based Access: Student, Instructor, and Admin roles
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activatepip install -r requirements.txtCreate a .env file:
FLASK_SECRET_KEY=your-secret-key
ANTHROPIC_API_KEY=your-api-key # For AI feedbackpython seed_data.pyThis creates:
- Sample learning module and challenges
- Admin, instructor, and student accounts
python app.pyThe app will be available at http://localhost:5002
After running seed_data.py:
| Role | Password | |
|---|---|---|
| Admin | admin@codedojo.com | admin123 |
| Instructor | instructor@codedojo.com | instructor123 |
| Student | alice@example.com | student123 |
| Student | bob@example.com | student123 |
To populate the platform with sample submissions:
python demo_submissions.pyThis creates:
- Alice's submission using the API Key authentication solution
- Bob's submission using the HTTP Basic Auth solution
- AI feedback for both submissions
- Instructor review for Bob's submission (marked as passed)
code-dojo/
├── app.py # Flask application entry point
├── config.py # Configuration settings
├── requirements.txt # Python dependencies
├── seed_data.py # Database initialization
├── demo_submissions.py # Create sample submissions
├── models/
│ ├── user.py # User model
│ ├── module.py # LearningModule model
│ ├── goal.py # LearningGoal model
│ ├── submission.py # Submission model
│ ├── ai_feedback.py # AIFeedback model
│ └── instructor_feedback.py # InstructorFeedback model
├── routes/
│ ├── auth.py # Authentication routes
│ ├── modules.py # Curriculum routes
│ ├── submissions.py # Submission routes
│ └── admin.py # Admin/instructor routes
├── services/
│ ├── github.py # GitHub API integration
│ └── ai_feedback.py # Claude API integration
├── middleware/
│ └── auth.py # Authentication decorators
├── templates/ # Jinja2 templates
└── static/ # CSS and JavaScript
The default curriculum teaches API Authentication using the Snippet Manager starter repo:
- Starter Repository: https://github.com/nsuberi/snippet-manager-starter
- Challenge: Add authentication to protect write operations
- Two Solutions Available:
with-api-authbranch: API Key authenticationwith-basic-authbranch: HTTP Basic Auth
- Sign up / Log in
- Browse learning modules
- Watch tutorial video
- Read challenge description
- Fork starter repo and implement solution
- Submit GitHub repo URL and branch
- Receive AI feedback
- Request instructor review
- Get pass/fail result with comments
- Log in as instructor
- View submissions awaiting review
- See code diff and AI feedback
- Add comments and pass/fail decision
- Submit review
- Log in as admin
- View all students and submissions
- Access instructor review functionality
- Monitor platform activity
- Backend: Flask, SQLAlchemy
- Database: SQLite
- Auth: Flask-Login, Werkzeug password hashing
- AI: Anthropic Claude API
- Frontend: Jinja2 templates, vanilla CSS/JS
MIT License - feel free to use this for learning and experimentation.