πŸ“‘ 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


πŸ“ 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]
  1. Upload: User uploads a syllabus PDF through the React frontend
  2. Processing: FastAPI receives the file and uploads it to Google Gemini
  3. AI Analysis: Gemini 2.5 Flash parses the document using a comprehensive prompt template
  4. Validation: Pydantic models validate and structure the extracted data
  5. Optimization: The backend categorizes and sorts assignments by importance
  6. 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:

  1. 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_prompt variable within backend/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.

  2. Pydantic Validation & Python Logic: Once Gemini returns the completed JSON, the Python backend takes over. The organize_syllabus_data function leverages Pydantic models (such as AssessmentComponent, GradingMechanic, and the top-level OmniscientSyllabus) 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


🀝 πŸ”— 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

Built With

Share this project:

Updates