Intelligent academic task management system that automatically extracts deadlines and deliverables from course syllabi and syncs them with Google Calendar.
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
| 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 |
βββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββ
- β H2 Database - Embedded, no setup required (FREE)
- β PostgreSQL - Optional for production (FREE)
- β Google OAuth2 - Free OAuth service (FREE)
- β Google Calendar API - Free API with generous limits (FREE)
- β JWT Tokens - No external service needed (FREE)
- β Gmail SMTP - Free email service (FREE)
- β Spring Mail - Built-in email support (FREE)
- β Simple Cache - Built-in Spring cache (FREE)
- β Local File Storage - No cloud storage needed (FREE)
- β H2 Console - Built-in database management (FREE)
- β Swagger UI - Built-in API documentation (FREE)
- β Spring Boot Actuator - Built-in monitoring (FREE)
- Java 17+ - Download OpenJDK
- Node.js 18+ - Download Node.js
- Maven 3.6+ - Download Maven (or use included Maven wrapper)
git clone https://github.com/yourusername/syllabussync.git
cd syllabussync# Copy the example environment file
cp env.example .env
# Edit .env with your actual credentials
nano .env # or use your preferred editorRequired 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- Go to Google Cloud Console
- Create a new project or select existing
- Enable Google Calendar API
- Create OAuth 2.0 credentials
- Add
http://localhost:8080/api/syllabus/auth/google/callbackas authorized redirect URI - Copy the client ID and secret to your
.envfile
- Go to Google AI Studio
- Create a new API key
- Copy the key to your
.envfile
# Start everything with one command
./start.shThis 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
Start Backend:
cd backend
./mvnw spring-boot:runStart Frontend (in another terminal):
cd frontend
npm install
npm start# Start all services with Docker
docker-compose up --build
# Or run in background
docker-compose up -d --buildOnce started, you can access:
- π Frontend: http://localhost:3000
- π Backend API: http://localhost:8080/api
- ποΈ H2 Database Console: http://localhost:8080/h2-console
- π Health Check: http://localhost:8080/actuator/health
# Stop all services
./stop.shOr press Ctrl+C in the terminal where you ran ./start.sh
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,txtREACT_APP_API_BASE_URL=http://localhost:8080/api
REACT_APP_GOOGLE_CLIENT_ID=your_google_client_id- Go to Google Cloud Console
- Create a new project or select existing one
- Enable the Google Calendar API
- Create OAuth 2.0 credentials
- 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)
- Navigate to the Upload page
- Select your syllabus file (PDF, DOCX, or TXT)
- Choose the course from dropdown or create new course
- Click Upload & Parse
- Review the parsed tasks in the confirmation screen
- Edit task details if needed:
- Assignment title
- Due date
- Task type (Assignment, Project, Exam, Quiz)
- Priority level
- Click Confirm & Save
- View all tasks organized by course and due date
- Use filters to find specific tasks:
- By course
- By task type
- By due date range
- By completion status
- Mark tasks as completed
- Edit or delete tasks manually
- Click Connect Google Calendar (first time only)
- Authorize SyllabusSync in the OAuth popup
- Click Sync to Calendar to create events
- Events will appear in your Google Calendar with:
- Assignment title and course
- Due date and time
- Reminder notifications (7d, 3d, 1d before due)
- 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
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
# Start everything with one command
./start.sh
# Stop everything
./stop.sh-
Start Backend
cd backend ./mvnw spring-boot:run -
Start Frontend
cd frontend npm start -
Access Application
- Frontend: http://localhost:3000
- Backend: http://localhost:8080
- H2 Console: http://localhost:8080/h2-console
# Backend tests
cd backend && ./mvnw test
# Frontend tests
cd frontend && npm test
# Integration tests
cd backend && ./mvnw verify# 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| 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 |
# 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"# 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 ./frontendThe 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.).
- In Vercel, set the project Root Directory to
frontend. - Under Settings β Environment Variables, set (at least for Production):
REACT_APP_API_BASE_URLβ your public API base, including/api(for examplehttps://api.yourdomain.com/api).REACT_APP_GOOGLE_CLIENT_IDβ same OAuth Web client ID as in Google Cloud Console, if the UI needs it.
- Redeploy after changing env vars (values are baked in at build time).
- On the backend, set
GOOGLE_REDIRECT_URIandCALENDAR_OAUTH_SUCCESS_URLto your production API callback and frontend URLs (for examplehttps://your-app.vercel.app/calendar). Add those URLs in the Google Cloud OAuth client (authorized JavaScript origins and redirect URIs).
- Database: PostgreSQL with backups and connection string on the backend host.
- Backend: Spring Boot with
JWT_SECRET, Google credentials, andapplicationprofile appropriate for production. - Frontend: Static hosting (Vercel or any CDN) with
REACT_APP_*build-time variables. - SSL: HTTPS on both frontend and API.
- Monitoring: Logs and health checks (
/actuator/healthon the API).
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Apache Tika for document parsing
- Google Calendar API for calendar integration
- Spring Boot for the robust backend framework
- React for the modern frontend framework
- π§ Email: support@syllabussync.com
- π Issues: GitHub Issues
- π Documentation: Wiki
Made with β€οΈ for students everywhere