π Table of Contents
- π Pareto
- π Table of Contents
- π― About
- β¨ Features
- π οΈ Tech Stack
- π Project Structure
- π§ How It Works
- π‘ Development Insights & Challenges
- π License
- π Acknowledgments
- π€ π More / Contribute / Installation
π― About
Pareto is named after the Pareto Principle (also known as the 80/20 rule), which states that roughly 80% of consequences come from 20% of causes.
In the context of academic success, this means that a significant portion of your grade often comes from just a few key assignments. Pareto helps students identify these high-impact assessments by intelligently analyzing course syllabi, allowing them to prioritize their efforts effectively.
π For Students, By Students - Focus on what matters most and optimize your semester for maximum results with minimum effort.
β¨ Features
| Feature | Description |
|---|---|
| π PDF Syllabus Upload | Simply drag and drop your syllabus PDF for instant analysis |
| π€ AI-Powered Analysis | Leverages Google Gemini 2.5 Flash for intelligent document parsing |
| π Smart Categorization | Automatically categorizes assignments by impact and type |
| βοΈ Weight Analysis | Identifies high-weight assignments that deserve your attention |
| π― Priority Sorting | Ranks assignments by importance (mandatory β high-weight β droppable) |
| π Policy Extraction | Extracts late policies, missed work rules, and grading scales |
| πΎ Export Raw Data | Download the full analysis as JSON for further use |
| β‘ Real-time Status | See backend connection status and analysis duration |
| π Modern Dark UI | Beautiful, responsive interface with dark mode design |
Assignment Categories
| Category | Badge | Description |
|---|---|---|
| Mandatory | π΄ Red | Must complete to pass the course |
| Transferable | π΅ Blue | Weight transfers to another assessment if missed |
| Drop Rule | π’ Green | Lowest N grades are automatically dropped |
| Standard | βͺ Gray | Regular graded assignment |
π οΈ Tech Stack
Backend
- FastAPI β Modern, fast Python web framework
- Google Generative AI β Gemini 2.5 Flash for document analysis
- Pydantic β Data validation using Python type annotations
- Uvicorn β Lightning-fast ASGI server
Frontend
- React 19 β UI component library
- Vite 7 β Next-generation frontend build tool
- Tailwind CSS 3.4 β Utility-first CSS framework
- Axios β Promise-based HTTP client
- Lucide React β Beautiful & consistent icons
π Project Structure
Pareto/
βββ π backend/
β βββ π main.py # FastAPI application & AI logic
β βββ π requirements.txt # Python dependencies
β βββ π .env # Environment variables (create this)
β
βββ π frontend/
β βββ π public/ # Static assets
β βββ π src/
β β βββ π assets/ # Images and static files
β β βββ π components/
β β β βββ π UploadZone.jsx # File upload component
β β β βββ π SyllabusDashboard.jsx # Results display
β β βββ π App.jsx # Main application component
β β βββ π App.css # Application styles
β β βββ π main.jsx # React entry point
β β βββ π index.css # Global styles
β βββ π index.html # HTML template
β βββ π package.json # Node.js dependencies
β βββ π vite.config.js # Vite configuration
β βββ π tailwind.config.js # Tailwind CSS configuration
β βββ π postcss.config.js # PostCSS configuration
β
βββ π run_dev.sh # Quick start script (Unix)
βββ π run_dev.bat # Quick start script (Windows)
βββ π .gitignore # Git ignore rules
βββ π README.md # This file
Assignment Types:
| Type | Description |
|---|---|
strictly_mandatory |
Must complete to pass |
external_transfer |
Weight can transfer to another assessment |
internal_drop |
Lowest N grades are dropped |
standard_graded |
Regular graded assignment |
π§ How It Works
graph LR
A[π Upload PDF] --> B[π FastAPI Backend]
B --> C[βοΈ Google Gemini AI]
C --> D[π Structured Analysis]
D --> E[π― Priority Sorting]
E --> F[π± React Dashboard]
- Upload: User uploads a syllabus PDF through the React frontend
- Processing: FastAPI receives the file and uploads it to Google Gemini
- AI Analysis: Gemini 2.5 Flash parses the document using a comprehensive prompt template
- Validation: Pydantic models validate and structure the extracted data
- Optimization: The backend categorizes and sorts assignments by importance
- Display: Results are rendered in a beautiful, interactive dashboard
π‘ Development Insights & Challenges
The Gemini Prompt Engineering Hurdle
A significant technical hurdle in developing Pareto was constraining the generative output of Google's Gemini model to fit the application's structured data requirements. Initially, the model struggled to consistently classify assessment types (e.g., mandatory, droppable, transferable) across the diverse and often ambiguous language found in different syllabi.
The breakthrough came from a two-part strategy that blends prompt engineering with robust backend validation:
The "Omniscient" JSON Template: Rather than asking the AI to simply find data, it was trained to fill out a meticulously designed JSON schema. This schema, defined in the
system_promptvariable withinbackend/main.py, acts as a rigid template. It forces the model to structure its entire understanding of the syllabus into a predictable format, covering everything from grading mechanics to specific dates and policy details.Pydantic Validation & Python Logic: Once Gemini returns the completed JSON, the Python backend takes over. The
organize_syllabus_datafunction leverages Pydantic models (such asAssessmentComponent,GradingMechanic, and the top-levelOmniscientSyllabus) to validate the AI's output. This layer catches any structural errors and then transforms the complex, nested JSON into the clean, prioritized list required by the frontend. This experience of iteratively refining the prompt and data handling logic was a fantastic and practical introduction to AI engineering.
π License
This project is open source and available under the MIT License.
π Acknowledgments
- Google Gemini for powerful AI capabilities
- Google's Antigravity IDE for its agentic assistance, which significantly accelerated the development workflow.
- FastAPI for the excellent Python framework
- Vite for lightning-fast frontend tooling
- Tailwind CSS for beautiful styling utilities
- Lucide for the gorgeous icon set
- The Pareto Principle for the inspiration
π€ π More / Contribute / Installation
If you are interested in contributing to or running this service, make sure you check out the GitHub repo. π
πRepo: https://github.com/SoroushRF/Pareto
Log in or sign up for Devpost to join the conversation.