// github.com/Darkus39/StudyPlannerFX

BRACU Study Planner v2.0

Academic management system for BRACU students — Java 21 · Spring Boot 3.2 · JavaFX 21
Java 21 Spring Boot 3.2.4 JavaFX 21.0.2 Lombok 1.18.38 Gson 2.10.1 Platform Win · Mac · Linux
// what it does
📊
Dashboard
Live CGPA tracker, semester overview, and progress stats at a glance.
📚
Course Manager
Add, edit and track courses from a built-in BRACU database of ~340 courses.
🗓️
Study Schedule
Auto-generated study schedules and topic roadmaps per course.
🎯
CGPA Forecast
Target CGPA simulation — see exactly what grades you need to hit your goal.
💾
Local Persistence
All data saved locally as JSON. Never leaves your device.
💡
Light UI
Fully custom light theme with Syne + JetBrains Mono typography.
🌑
Dark UI
Fully custom dark theme with Syne + JetBrains Mono typography.
// what's new in v2.0
AreaBefore (v1)Now (v2)
ArchitecturePlain JavaFX MVCSpring Boot + JavaFX — full DI, service layer
UIBasic JavaFX stylingFully redesigned dark theme
PersistenceWorking dir JSONDocuments/BRACUStudyPlanner/ (cross-platform)
Distributionmvn javafx:run onlyjpackage native installer (.exe / .dmg / .rpm / .deb)
Bug fix (Fedora 43)Freeze on "Initialize Profile"Fixed with Platform.runLater()
// architecture
View
SetupScreenMainScreenDashboardTabCoursesTabScheduleTabSettingsTab
Services
StudentServiceCgpaServiceCourseRepositoryScheduleServicePersistenceService
Model
StudentCourseEntrySemesterInfo
Core
Spring Boot 3.2JavaFX 21LombokGson
// one-click installers
For non-terminal users — Three scripts are included in the repo root. Download the one for your OS, place it in the StudyPlannerFX/ folder, and run it. Java and Maven will be installed automatically if missing, then the app will launch.
🪟 Windows
1
Get the script
File: install-windows.bat (in repo root)
2
Right-click → Run as Administrator
Required for winget to install JDK/Maven if not present
3
App launches automatically ✓
First run downloads Maven dependencies (~2 min)
Manual terminal commands
:: Install JDK 21
winget install Microsoft.OpenJDK.21

:: Install Maven
winget install Apache.Maven

:: Launch app
cd StudyPlannerFX
mvn javafx:run
🍎 macOS
1
Get the script
File: install-macos.sh (in repo root)
2
Open Terminal, run:
chmod +x install-macos.sh && ./install-macos.sh
Installs Homebrew, JDK 21, Maven if needed. Works on Intel & Apple Silicon.
3
App launches automatically ✓
Manual terminal commands
# Install Homebrew (skip if present)
/bin/bash -c "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew\
/install/HEAD/install.sh)"

brew install --cask temurin@21
brew install maven
cd StudyPlannerFX && mvn javafx:run
🐧 Linux
1
Get the script
File: install-linux.sh (in repo root)
2
Open Terminal, run:
chmod +x install-linux.sh && ./install-linux.sh
Auto-detects apt (Ubuntu/Debian) or dnf (Fedora/RHEL). Sudo required.
3
App launches automatically ✓
Manual — Ubuntu / Debian
sudo apt update
sudo apt install openjdk-21-jdk maven
cd StudyPlannerFX && mvn javafx:run
Manual — Fedora / RHEL
sudo dnf install java-21-openjdk-devel maven
cd StudyPlannerFX && mvn javafx:run
// developer commands
bash
# Run in dev mode (fastest)
mvn javafx:run

# Build fat JAR then run
mvn clean package
java -jar target/StudyPlannerFX-2.0.0.jar

# Build native installer — Linux / macOS
chmod +x build-installer.sh && ./build-installer.sh

# Build native installer — Windows
.\build-installer.bat
// native installer (no java required for end users)

Use build-installer.sh / .bat to produce a platform-native package with a bundled JRE — end users don't need Java installed.

PlatformOutputInstall
Windows.exe installerDouble-click to install
macOS.dmg disk imageOpen → drag to Applications
Fedora / RHEL.rpm packagesudo dnf install *.rpm
Ubuntu / Debian.deb packagesudo dpkg -i *.deb
// data storage
Privacy — All student data is saved locally as human-readable JSON. Nothing is ever sent to any server.
OSLocation
Windows%USERPROFILE%\Documents\BRACUStudyPlanner\student_data.json
macOS~/Documents/BRACUStudyPlanner/student_data.json
Linux~/BRACUStudyPlanner/student_data.json
// project structure
tree
StudyPlannerFX/
├── install-windows.bat          ← one-click installer — Windows
├── install-macos.sh             ← one-click installer — macOS
├── install-linux.sh             ← one-click installer — Linux
├── build-installer.sh / .bat    ← jpackage native installer builder
├── pom.xml
└── src/main/java/com/bracu/studyplanner/
    ├── app/
    │   ├── Launcher.java            ← true entry point
    │   ├── StudyPlannerApp.java      ← bootstraps Spring + JavaFX
    │   └── SpringConfig.java
    ├── model/
    │   ├── Student.java
    │   ├── CourseEntry.java
    │   └── SemesterInfo.java
    ├── service/
    │   ├── StudentService.java       ← main orchestrator
    │   ├── CgpaService.java
    │   ├── CourseRepository.java
    │   ├── PersistenceService.java
    │   └── ScheduleService.java
    └── view/
        ├── screens/
        │   ├── SetupScreen.java
        │   ├── MainScreen.java
        │   └── tabs/
        │       ├── DashboardTab.java
        │       ├── CoursesTab.java
        │       ├── ScheduleTab.java
        │       └── SettingsTab.java
        └── components/
            ├── FormField.java
            ├── StatCard.java
            └── StatusBadge.java
// bug fix — fedora 43 freeze

On Linux/GTK JavaFX builds, swapping the scene root inside an active event dispatch caused the pulse scheduler to deadlock.

java
// Before — causes freeze on Linux/GTK:
onComplete.run();

// After — deferred to next FX pulse, safe everywhere:
Platform.runLater(onComplete);