"Know your degree requirements in 30 seconds. Be ready for your advisor meeting in 2 minutes."
CollegeScrap is a web application that scrapes Ole Miss catalog data, calculates exactly what you need to graduate, and generates a balanced semester-by-semester schedule you can bring to your advisor meeting.
- Instant Degree Analysis: Upload your major, minor, and classification to see all degree requirements in 30 seconds
- Smart Schedule Generation: Get balanced semester schedules that respect prerequisites and workload
- Prerequisite Chain Detection: Identify critical courses that unlock many others
- Workload Balancing: Avoid overloading yourself with too many heavy courses
- Export for Advisors: Download your schedule as a text file for advisor meetings
- Real-time Catalog Data: Scrapes Ole Miss catalog to ensure up-to-date information
- Python 3.8+ - Core backend language
- Flask - Web framework for REST API
- SQLAlchemy - Database ORM
- BeautifulSoup4 - Web scraping Ole Miss catalog
- SQLite - Lightweight database for storing course data
- React 18 - UI framework
- React Router - Client-side routing
- Axios - HTTP client for API calls
- CSS3 - Modern, responsive styling
college-scrap/
├── backend/ # Flask backend
│ ├── app/
│ │ ├── api/ # API routes
│ │ │ └── routes.py # Endpoint definitions
│ │ ├── models/ # Database models
│ │ │ └── database.py # SQLAlchemy models
│ │ ├── scrapers/ # Web scrapers
│ │ │ └── catalog_scraper.py
│ │ ├── utils/ # Utility functions
│ │ │ ├── degree_analyzer.py
│ │ │ └── scheduler.py
│ │ └── __init__.py # Flask app factory
│ ├── requirements.txt # Python dependencies
│ ├── run.py # Application entry point
│ └── .env.example # Environment variables template
│
├── frontend/ # React frontend
│ ├── public/ # Static files
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ │ ├── DegreeSelection.js
│ │ │ ├── RequirementsResults.js
│ │ │ ├── ScheduleBuilder.js
│ │ │ └── GeneratedSchedule.js
│ │ ├── services/ # API service
│ │ │ └── api.js
│ │ ├── styles/ # CSS files
│ │ ├── App.js # Main app component
│ │ └── index.js # Entry point
│ └── package.json # Node dependencies
│
└── README.md # This file
- Python 3.8 or higher
- Node.js 14 or higher
- npm or yarn
- Git
-
Clone the repository
git clone https://github.com/yourusername/college-scrap.git cd college-scrap -
Set up Python virtual environment
cd backend python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install Python dependencies
pip install -r requirements.txt
-
Set up environment variables
cp .env.example .env # Edit .env with your configuration -
Initialize the database
python -c "from app.models.database import init_db; init_db()" -
Populate database with sample data
python -m app.scrapers.catalog_scraper
-
Run the Flask server
python run.py
The backend will be running at
http://localhost:5000
-
Navigate to frontend directory
cd ../frontend -
Install Node dependencies
npm install # or yarn install -
Start the React development server
npm start # or yarn startThe frontend will be running at
http://localhost:3000
-
Select Your Degree (Step 1)
- Choose your major (e.g., Computer Science)
- Select degree type (B.S. or B.A.)
- Optionally add a minor
- Select your current classification
-
View Requirements (Step 2)
- See total credit breakdown
- Review all required courses
- Identify important prerequisite chains
-
Build Schedule (Step 3)
- Choose target semester
- Select credit load preference
- Mark completed courses
-
Get Balanced Schedule (Step 4)
- Review recommended courses
- Check workload warnings
- Download for advisor meeting
Health check endpoint
Get all available majors
Get all available minors
Get degree requirements analysis
{
"major_id": 1,
"minor_id": 2,
"classification": "Freshman"
}Generate a semester schedule
{
"major_id": 1,
"minor_id": 2,
"semester": "Fall 2025",
"credit_load": "standard",
"completed_courses": ["CSCI 111", "MATH 261"]
}Get details for a specific course
id: Primary keycode: Course code (e.g., "CSCI 111")name: Course namecredits: Credit hoursdescription: Course descriptionworkload: Light/Moderate/Heavycategory: Core/GenEd/Elective
id: Primary keyname: Major namedegree_type: B.S./B.A./etc.total_credits: Total credits requiredmajor_credits: Credits for major courses
id: Primary keyname: Minor namerequired_credits: Total credits required
id: Primary keycategory: GenEd categoryrequired_credits: Credits requireddescription: Description
Frontend (Vercel)
cd frontend
npm run build
vercel deployBackend (PythonAnywhere)
- Upload backend code to PythonAnywhere
- Set up virtual environment
- Configure WSGI file to point to
run.py - Set environment variables in web app settings
-
Launch EC2 instance (Ubuntu 22.04)
-
Install dependencies
sudo apt update sudo apt install python3-pip nginx nodejs npm
-
Set up backend
cd backend pip3 install -r requirements.txt gunicorn -w 4 -b 0.0.0.0:5000 run:app -
Build and serve frontend
cd frontend npm install npm run build sudo cp -r build/* /var/www/html/
-
Configure Nginx as reverse proxy
- Connect GitHub repo to Railway
- Add two services:
backendandfrontend - Set environment variables
- Deploy automatically on git push
FLASK_APP=run.py
FLASK_ENV=development
SECRET_KEY=your-secret-key-here
DATABASE_URL=sqlite:///collegescrap.db
CATALOG_BASE_URL=https://catalog.olemiss.edu
REACT_APP_API_URL=http://localhost:5000/api
- Add more majors and minors
- Implement actual web scraping for Ole Miss catalog
- Add course ratings/difficulty from RateMyProfessor
- Email schedule directly to student/advisor
- PDF export with prettier formatting
- 4-year plan generator
- Course substitution suggestions
- Mobile app version
- Support for other universities
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Ole Miss Academic Catalog
- Flask and React communities
- All contributors who helped build this tool
For questions or support, please open an issue on GitHub.
Built with ❤️ to help students graduate on time