Skip to content

nm121212/SyllabusSync

Repository files navigation

πŸ“„ SyllabusSync

Java Spring Boot React PostgreSQL License

Intelligent academic task management system that automatically extracts deadlines and deliverables from course syllabi and syncs them with Google Calendar.

🎯 Overview

SyllabusSync eliminates the tedious manual work of transferring assignment dates from syllabi to calendars. Simply upload your course syllabi (PDF, DOCX, TXT), and SyllabusSync will:

  • πŸ” Parse assignment titles, due dates, and exam schedules
  • πŸ“… Sync everything to your Google Calendar automatically
  • πŸ“Š Organize tasks in a unified dashboard
  • πŸ”” Send smart reminders before due dates
  • πŸ“ˆ Track your progress across all courses

✨ Key Features

Feature Description Status
πŸ“„ Syllabus Parsing Extract tasks from PDF/DOCX/TXT files using NLP βœ… Core
πŸ“… Google Calendar Sync OAuth2 integration with automatic event creation βœ… Core
πŸ—‚οΈ Task Dashboard Unified view with sorting, filtering, and search βœ… Core
πŸ”” Smart Reminders Customizable notifications (7d, 3d, 1d before due) βœ… Core
✏️ Manual Task Management Add, edit, and delete tasks manually βœ… Core
πŸ“Š Progress Analytics Track completion rates per course 🚧 Planned

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Frontend            β”‚
β”‚       React.js (SPA)          β”‚
β”‚ - Task Dashboard UI           β”‚
β”‚ - Upload & Confirmation UI    β”‚
β”‚ - Calendar Sync Controls      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ REST API Calls
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Backend (Java)       β”‚
β”‚        Spring Boot API        β”‚
β”‚ - Syllabus Parsing Service    β”‚
β”‚ - Task Management Service     β”‚
β”‚ - Calendar Integration Layer  β”‚
β”‚ - Reminder Scheduler          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ JPA / JDBC
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Database             β”‚
β”‚ PostgreSQL (Users, Courses,   β”‚
β”‚ Tasks, Reminders, Tokens)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         External APIs          β”‚
β”‚  - Google Calendar API         β”‚
β”‚  - OAuth 2.0 Auth              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ†“ FREE Services Used

Database

  • βœ… H2 Database - Embedded, no setup required (FREE)
  • βœ… PostgreSQL - Optional for production (FREE)

Authentication & APIs

  • βœ… Google OAuth2 - Free OAuth service (FREE)
  • βœ… Google Calendar API - Free API with generous limits (FREE)
  • βœ… JWT Tokens - No external service needed (FREE)

Email & Notifications

  • βœ… Gmail SMTP - Free email service (FREE)
  • βœ… Spring Mail - Built-in email support (FREE)

Caching & Storage

  • βœ… Simple Cache - Built-in Spring cache (FREE)
  • βœ… Local File Storage - No cloud storage needed (FREE)

Development Tools

  • βœ… H2 Console - Built-in database management (FREE)
  • βœ… Swagger UI - Built-in API documentation (FREE)
  • βœ… Spring Boot Actuator - Built-in monitoring (FREE)

πŸš€ Quick Start

Prerequisites

1. Clone the Repository

git clone https://github.com/yourusername/syllabussync.git
cd syllabussync

2. Set Up Environment Variables

# Copy the example environment file
cp env.example .env

# Edit .env with your actual credentials
nano .env  # or use your preferred editor

Required environment variables:

# Google OAuth Configuration
GOOGLE_CLIENT_ID=your_google_client_id_here
GOOGLE_CLIENT_SECRET=your_google_client_secret_here

# Gemini AI API Configuration  
GEMINI_API_KEY=your_gemini_api_key_here

# JWT Configuration
JWT_SECRET=your_jwt_secret_key_here_make_it_long_and_random

# Frontend Configuration
REACT_APP_GOOGLE_CLIENT_ID=your_google_client_id_here

3. Set Up Google OAuth

  1. Go to Google Cloud Console
  2. Create a new project or select existing
  3. Enable Google Calendar API
  4. Create OAuth 2.0 credentials
  5. Add http://localhost:8080/api/syllabus/auth/google/callback as authorized redirect URI
  6. Copy the client ID and secret to your .env file

4. Set Up Gemini AI API

  1. Go to Google AI Studio
  2. Create a new API key
  3. Copy the key to your .env file

5. Start the Application

🎯 One-Command Startup (Recommended)

# Start everything with one command
./start.sh

This will:

  • βœ… Check prerequisites (Java, Node.js)
  • βœ… Start the Spring Boot backend
  • βœ… Start the React frontend
  • βœ… Wait for services to be ready
  • βœ… Show you the URLs to access the application

Alternative: Manual Setup

Start Backend:

cd backend
./mvnw spring-boot:run

Start Frontend (in another terminal):

cd frontend
npm install
npm start

Docker Setup

# Start all services with Docker
docker-compose up --build

# Or run in background
docker-compose up -d --build

6. Access the Application

Once started, you can access:

7. Stop the Application

# Stop all services
./stop.sh

Or press Ctrl+C in the terminal where you ran ./start.sh

πŸ”§ Configuration

Backend Configuration (application.yml)

spring:
  datasource:
    # FREE: Using H2 embedded database (no setup required)
    url: jdbc:h2:mem:syllabussync;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password: 
    driver-class-name: org.h2.Driver
  
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true

  h2:
    console:
      enabled: true
      path: /h2-console

google:
  calendar:
    client-id: your_google_client_id
    client-secret: your_google_client_secret
    redirect-uri: http://localhost:8080/api/syllabus/auth/google/callback

syllabus:
  parsing:
    max-file-size: 10MB
    supported-formats: pdf,docx,txt

Frontend Configuration (.env)

REACT_APP_API_BASE_URL=http://localhost:8080/api
REACT_APP_GOOGLE_CLIENT_ID=your_google_client_id

Google Calendar API Setup

  1. Go to Google Cloud Console
  2. Create a new project or select existing one
  3. Enable the Google Calendar API
  4. Create OAuth 2.0 credentials
  5. Add authorized redirect URIs:
    • http://localhost:8080/api/syllabus/auth/google/callback (development)
    • https://yourdomain.com/api/syllabus/auth/google/callback (production β€” adjust if you change the API path)

πŸ“– Usage

1. Upload Syllabus

  1. Navigate to the Upload page
  2. Select your syllabus file (PDF, DOCX, or TXT)
  3. Choose the course from dropdown or create new course
  4. Click Upload & Parse

2. Review Extracted Tasks

  1. Review the parsed tasks in the confirmation screen
  2. Edit task details if needed:
    • Assignment title
    • Due date
    • Task type (Assignment, Project, Exam, Quiz)
    • Priority level
  3. Click Confirm & Save

3. Dashboard Management

  1. View all tasks organized by course and due date
  2. Use filters to find specific tasks:
    • By course
    • By task type
    • By due date range
    • By completion status
  3. Mark tasks as completed
  4. Edit or delete tasks manually

4. Google Calendar Sync

  1. Click Connect Google Calendar (first time only)
  2. Authorize SyllabusSync in the OAuth popup
  3. Click Sync to Calendar to create events
  4. Events will appear in your Google Calendar with:
    • Assignment title and course
    • Due date and time
    • Reminder notifications (7d, 3d, 1d before due)

πŸ› οΈ Development

Tech Stack

  • Backend: Java 17, Spring Boot 3.x, Spring Security, Spring Data JPA
  • Frontend: React 18, Axios, Material-UI
  • Database: PostgreSQL 15
  • Parsing: Apache Tika, PDFBox, OpenNLP
  • Authentication: OAuth 2.0, JWT
  • Build: Maven, npm
  • Testing: JUnit 5, Mockito, Jest, React Testing Library

Project Structure

SyllabusSync/
β”œβ”€β”€ backend/                 # Spring Boot API
β”‚   β”œβ”€β”€ src/main/java/      # Java source code
β”‚   β”œβ”€β”€ src/main/resources/ # Configuration files
β”‚   └── pom.xml            # Maven dependencies
β”œβ”€β”€ frontend/               # React.js SPA
β”‚   β”œβ”€β”€ src/               # React source code
β”‚   β”œβ”€β”€ public/            # Static assets
β”‚   └── package.json       # Node.js dependencies
β”œβ”€β”€ start.sh               # One-command startup script
β”œβ”€β”€ stop.sh                # Clean shutdown script
β”œβ”€β”€ docker-compose.yml     # Docker orchestration
└── README.md             # This file

Running in Development

Quick Start (Recommended)

# Start everything with one command
./start.sh

# Stop everything
./stop.sh

Manual Development Setup

  1. Start Backend

    cd backend
    ./mvnw spring-boot:run
  2. Start Frontend

    cd frontend
    npm start
  3. Access Application

Running Tests

# Backend tests
cd backend && ./mvnw test

# Frontend tests
cd frontend && npm test

# Integration tests
cd backend && ./mvnw verify

Code Quality

# Backend code quality
cd backend && ./mvnw checkstyle:check
cd backend && ./mvnw spotbugs:check

# Frontend code quality
cd frontend && npm run lint
cd frontend && npm run lint:fix

πŸ“Š API Documentation

Core Endpoints

Method Endpoint Description
POST /api/syllabi/upload Upload and parse syllabus file
GET /api/tasks Get all tasks with filtering
POST /api/tasks Create new task manually
PUT /api/tasks/{id} Update task details
DELETE /api/tasks/{id} Delete task
POST /api/calendar/sync Sync tasks to Google Calendar
GET /api/courses Get all courses

Example API Usage

# Upload syllabus
curl -X POST http://localhost:8080/api/syllabi/upload \
  -H "Content-Type: multipart/form-data" \
  -F "file=@syllabus.pdf" \
  -F "courseId=1"

# Get tasks
curl -X GET "http://localhost:8080/api/tasks?courseId=1&status=pending"

# Sync to calendar
curl -X POST http://localhost:8080/api/calendar/sync \
  -H "Authorization: Bearer your-jwt-token"

πŸš€ Deployment

Docker Deployment

# Build and run with Docker Compose
docker-compose up -d

# Or build individual images
docker build -t syllabussync-backend ./backend
docker build -t syllabussync-frontend ./frontend

Vercel (React frontend)

The UI is a Create React App static build. Vercel does not run the Spring Boot API; host the backend separately (Docker, Railway, Render, Fly.io, etc.).

  1. In Vercel, set the project Root Directory to frontend.
  2. Under Settings β†’ Environment Variables, set (at least for Production):
    • REACT_APP_API_BASE_URL β€” your public API base, including /api (for example https://api.yourdomain.com/api).
    • REACT_APP_GOOGLE_CLIENT_ID β€” same OAuth Web client ID as in Google Cloud Console, if the UI needs it.
  3. Redeploy after changing env vars (values are baked in at build time).
  4. On the backend, set GOOGLE_REDIRECT_URI and CALENDAR_OAUTH_SUCCESS_URL to your production API callback and frontend URLs (for example https://your-app.vercel.app/calendar). Add those URLs in the Google Cloud OAuth client (authorized JavaScript origins and redirect URIs).

Production environment (checklist)

  1. Database: PostgreSQL with backups and connection string on the backend host.
  2. Backend: Spring Boot with JWT_SECRET, Google credentials, and application profile appropriate for production.
  3. Frontend: Static hosting (Vercel or any CDN) with REACT_APP_* build-time variables.
  4. SSL: HTTPS on both frontend and API.
  5. Monitoring: Logs and health checks (/actuator/health on the API).

🀝 Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

πŸ“ž Support


Made with ❀️ for students everywhere

About

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors