GPAFlow is a web application designed to help students track, analyze, and predict their Grade Point Average (GPA). It allows users to input past course data, manage semester-based information, and predict future GPA outcomes based on hypothetical course scenarios. The application is built using HTML, CSS, and JavaScript, with Chart.js for visualizations and a responsive design for accessibility across devices.
- Features
- Live Demo
- Installation
- Usage
- File Structure
- Dependencies
- Technical Details
- Contributing
- License
- Course Input: Add past courses manually or via CSV upload with validation for grade, count, and hours.
- Semester Support: Toggle semester-based tracking to analyze GPA per semester.
- Editable Course Summary: Sort, edit, add, or delete course entries directly in a table.
- Current Standing: Displays cumulative GPA, total courses, total hours, and progress toward graduation.
- GPA Prediction Tool: Simulate future GPA outcomes for up to 7 courses, with dynamic credit hour inputs and a GPA range filter (0 to 0.9).
- Semester Analysis: Visualize semester and cumulative GPA trends with a line chart and data table.
- Responsive Design: Optimized for desktop and mobile devices using a grid layout and Inter font.
- GitHub Integration: Links to the project repository for contributions.
You can access the live version of GPAFlow at https://gpaflow.netlify.app/.
- Clone the repository:
git clone https://github.com/yaseen454/GPAFlow.git
- Navigate to the project directory:
cd GPAFlow - Open
index.htmlin a web browser. No server setup is required as the app runs client-side.
Alternatively, host the files on a web server (e.g., using a local server like live-server or a hosting platform like Netlify).
- Toggle Semester Data: Enable the "Consider Semester Data" checkbox to track courses by semester. Specify the total number of semesters (default: 8).
- CSV Upload:
- Upload a CSV file with headers:
Grade,Count,Hours/Course(andSemesterif semester mode is enabled). - Example CSV format (without semester):
Grade,Count,Hours/Course A,2,3 B+,1,3
- Example CSV format (with semester):
Grade,Count,Hours/Course,Semester A,2,3,1 B+,1,3,2
- Errors are shown for invalid grades, counts, hours, or semesters.
- Upload a CSV file with headers:
- Manual Entry:
- Select a grade (A to F), enter the number of courses, credit hours (0 to max, default 3), and semester (if enabled).
- Click "Add Courses" to append to the course summary table.
- Course Summary Table:
- Sort by grade, count, hours, or semester (if enabled) by clicking column headers.
- Edit rows inline by clicking "Edit", then "Save" or "Cancel".
- Delete rows with "Remove" or clear all data with "Clear All Courses".
- Add new rows with "Add Course".
- Displays:
- Cumulative GPA: Calculated from all entered courses.
- Total Courses: Total number of courses entered.
- Total Hours: Sum of credit hours.
- Overall Progression: Progress bar showing hours completed vs. max graduation hours (default: 140).
- Adjust Max Graduation Hours and Max Hours/Course to customize calculations.
- Enter the number of future courses (n, max 7 to prevent performance issues).
- Specify credit hours for each course in dynamically generated input fields (0 to max hours, default 3).
- Click "Run Prediction" to calculate possible GPA outcomes.
- View results in a table showing GPA ranges, likelihood percentages, and bar visualizations.
- Use the GPA Range Factor slider (0 to 0.9) to filter GPA ranges without recalculating.
- Available when "Consider Semester Data" is enabled and semester data is provided.
- Displays a line chart of semester and cumulative GPAs.
- Includes a table with exact GPA values per semester.
- Access the "Info & Usage" tab for a detailed guide on all features and input requirements.
GPAFlow/
├── index.html # Main HTML file with structure and UI
├── script.js # JavaScript logic for functionality and state management
├── style.css # CSS for styling and responsive design
└── README.md # Project documentation
- Chart.js: For rendering GPA charts (
https://cdn.jsdelivr.net/npm/chart.js). - Google Fonts (Inter): For typography (
https://fonts.googleapis.com/css2?family=Inter).
No external dependencies require installation as they are loaded via CDN.
- courseSummary: Array storing course entries (grade, count, hours, optional semester).
- allCourses: Flattened array of individual courses for calculations.
- rawPredictionGpas: Stores GPA outcomes from predictions.
- isSemesterMode: Tracks whether semester data is considered.
- currentlyEditingIndex: Tracks the row being edited in the course summary table.
- calculateGpa: Computes GPA using a weighted average of grade points (A=4.0, A-=3.666, etc.) and credit hours.
- product: Generates all possible grade combinations for prediction (cartesian product).
- subsequentCourseTest: Calculates possible GPAs for future courses based on user inputs.
- parseAndLoadCSV: Validates and processes CSV uploads, ensuring correct headers and data ranges.
- Navigation: Tabs for "Home" and "Info & Usage", with a GitHub link.
- Course Input Section: Form for manual entry, CSV upload, and course summary table.
- Current Standing: Displays GPA, course count, hours, and progress bar.
- Prediction Tool: Dynamic inputs for future courses and a filterable results table.
- Semester Analysis: Chart.js line chart and table for semester-based GPA trends.
- Tab Switching: Toggles visibility of tab content.
- Course Input: Handles manual entry, CSV uploads, and table interactions (sort, edit, delete).
- Prediction: Triggers calculations and updates results based on user inputs and filter changes.
- Settings: Updates max hours and graduation hours, ensuring data consistency.
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new branch (
git checkout -b feature-name). - Make your changes and commit (
git commit -m "Add feature"). - Push to the branch (
git push origin feature-name). - Open a pull request on GitHub.
Report issues or suggest features via the GitHub Issues page.
This project is licensed under the MIT License. See the LICENSE file for details.