A modern job application flow and CV management system designed to streamline the hiring process for both job seekers and recruiters. Built with a focus on interactive user experience and powered by a freemium, credit-based pricing model.
JobOS bridges the gap between talented job seekers and companies looking to hire. The platform supports two primary user roles:
- Job Seeker: Create professional profiles, upload CVs, browse job listings, and track application status in real-time.
- Job Poster: Post job openings, review candidate profiles, manage applications, and communicate with potential hires.
The system features real-time notifications powered by Firebase, ensuring users stay updated on application status, new job postings, and important messages.
- Spring Boot - REST API server
- PostgreSQL - Primary database
- Firebase Admin SDK - Real-time notifications
- Java - Language runtime
- JavaFX - Rich desktop UI with FXML/CSS
- OkHttp - HTTP client
- MVC Architecture - Clean separation of concerns
- Android SDK - Java-only
- Firebase BOM - Real-time database client
- OkHttp - Network layer
- Package-by-feature - Production-ready structure
- Common DTOs - Reusable data models across platforms
- Gradle - Multi-module build system
JobOS/
├── backend/ # Spring Boot REST API
│ ├── config/ # Firebase, Security, CORS
│ ├── controller/ # REST endpoints
│ ├── service/ # Business logic
│ └── resources/ # application.yml
│
├── desktop/ # JavaFX desktop app
│ ├── controller/ # FXML controllers
│ ├── service/ # API communication
│ ├── util/ # Helper classes
│ └── resources/
│ ├── fxml/ # UI layouts
│ └── css/ # Stylesheets
│
├── android/ # Android mobile app
│ └── app/src/main/java/com/jobos/android/
│ ├── JobOSApplication.java
│ ├── config/ # API configuration
│ ├── data/
│ │ ├── model/ # Data models
│ │ └── network/ # API clients
│ └── ui/
│ ├── main/ # Main activity
│ └── notifications/
│
└── shared/ # Shared DTOs
└── dto/common/ # Common data models
- JDK 25 or higher
- Gradle 9.2.1 (included via wrapper)
- PostgreSQL (running on localhost:5432)
- Android Studio (for Android development)
- Firebase Project (for real-time features)
-
Install PostgreSQL and create a database:
CREATE DATABASE jobos; CREATE USER jobos WITH PASSWORD 'jobos'; GRANT ALL PRIVILEGES ON DATABASE jobos TO jobos;
-
Update
backend/src/main/resources/application.ymlwith your credentials if needed.
-
Create a Firebase project at Firebase Console
-
Download service account key:
- Go to Project Settings → Service Accounts
- Click "Generate New Private Key"
- Save as
firebase-keys/jobos-firebase-key.json
-
Enable Firebase Realtime Database:
- Set database URL in
backend/config/FirebaseConfig.java - Configure rules to allow read/write on
/users/{userId}/notifications
- Set database URL in
-
For Android:
- Download
google-services.jsonfrom Firebase Console - Place in
android/app/directory
- Download
-
Set environment variable:
echo 'export FIREBASE_SERVICE_ACCOUNT_JSON_PATH="/path/to/firebase-keys/jobos-firebase-key.json"' >> ~/.zshrc source ~/.zshrc
./gradlew :backend:bootRunThe server will start on http://localhost:8080
Available endpoints:
GET /api/health- Health checkGET /api/ping- Ping endpointPOST /api/notifications/send- Send notification
./gradlew :desktop:runThe JavaFX application will launch with a clean, professional interface.
- Open the
android/directory in Android Studio - Sync Gradle files
- Run on emulator or physical device
Note: Ensure google-services.json is present in android/app/ before building.
./gradlew clean buildThis compiles all modules (shared, backend, desktop) and runs tests.
Send a test notification:
curl -X POST http://localhost:8080/api/notifications/send \
-H "Content-Type: application/json" \
-d '{
"userId": "test-user-123",
"title": "Welcome to JobOS",
"body": "Your profile is now active!"
}'- Backend: Layered architecture (Controller → Service → Repository)
- Desktop: MVC with FXML
- Android: Package-by-feature, preparing for MVVM
See android/STRUCTURE.md for detailed Android architecture documentation.