ClassSync is a local-first Android productivity app for students who want their academic work in one place. It combines Google Classroom sync, optional Gmail-based academic discovery, manual task capture, planner views, exam preparation, study planning, reminders, and a homescreen widget into a single Compose-based experience.
ClassSync is currently available as an Android-only application. Cross-platform support is planned for a later release.
- Closed testing: Join the Android test
- Download: Get ClassSync on Google Play
The current app direction is centered around a hybrid event intelligence pipeline:
- hard rules stay in place for trusted academic signals
- an optional TensorFlow Lite classifier adds smarter classification on top
- the app falls back safely when the model is unavailable or not confident enough
- Syncs Google Classroom coursework, announcements, and materials into local event/task flows
- Supports optional Gmail sync for academic email-derived updates
- Lets users add and manage manual tasks alongside synced work
- Shows work through a dashboard, tasks page, planner, study planner, exam mode, and settings
- Schedules reminders and widget refreshes from locally stored academic state
- Runs a hybrid classifier that decides whether an update is a task, announcement, material, exam/test notice, submission instruction, grade/feedback update, or unknown
- Works without a custom backend; app state is stored locally with Room and DataStore
flowchart TD
A["Onboarding"] --> B["Google Sign-In"]
B --> C["Classroom Sync"]
B --> D["Optional Gmail Sync"]
C --> E["Hybrid Event Intelligence"]
D --> E
E --> F["Local Events + Tasks"]
F --> G["Home / Work Desk"]
F --> H["Planner"]
F --> I["Study Planner"]
F --> J["Exam Mode"]
F --> K["Widget + Reminders"]
F --> L["Settings + Sync Controls"]
ClassSync now uses a two-layer classification system instead of relying only on keyword rules.
RuleBasedEventClassifierruns first for deterministic academic signals.TfLiteEventClassifierruns when enabled and the on-device model is available.HybridEventClassifierapplies confidence policy to decide which result to trust.- Trusted hard-rule categories still win when they should.
- If model loading or inference fails, the app automatically continues with the rule-based path.
DUE_DATE_TASKTEST_OR_EXAM_INFOSUBMISSION_INSTRUCTION
ACTIONABLE_NO_DATEANNOUNCEMENT_ONLYINFORMATION_ONLYMATERIAL_ONLYGRADE_OR_FEEDBACKUNKNOWNdisambiguation
flowchart LR
A["Raw classroom / Gmail / manual input"] --> B["Text cleanup + due-date parsing"]
B --> C["RuleBasedEventClassifier"]
B --> D["TfLiteEventClassifier"]
C --> E["ClassifierConfidencePolicy"]
D --> E
E --> F["HybridEventClassifier result"]
F --> G["ClassroomEventParser"]
G --> H["Event storage"]
G --> I["Task conversion if actionable"]
flowchart TD
A["GoogleAuthManager"] --> B["AuthTokenProvider"]
B --> C["ClassroomApiClient"]
B --> D["GmailApiClient"]
C --> E["Remote data sources"]
D --> E
E --> F["Repositories"]
F --> G["Use cases"]
G --> H["Parser + ML classifier layer"]
H --> I["Room database"]
I --> J["ViewModels"]
J --> K["Jetpack Compose UI"]
I --> L["Widget data provider"]
I --> M["Reminder / Sync workers"]
N["DataStore"] --> J
N --> H
N --> M
Onboarding- branded full-screen onboarding
- Google sign-in
- Classroom and optional Gmail setup
Home / Work Desk- quick status, synced work summary, and focus blocks
Tasks- manual and synced academic tasks together
- completion state, removal, and cleanup flow
Planner- today, week, month, and range views over academic work
Classroom- semester/section-oriented academic data flow and schedule direction
Study Planner- generated study blocks with saved progress
Exam Mode- checklist-oriented exam preparation
Settings- sync controls, theme, reminder lead time, digest, and app behavior
Widget- compact academic overview on the homescreen
The repository includes a local training workflow in ml_training/:
ml_training/train_event_classifier.pyml_training/evaluate_event_classifier.pyml_training/export_tflite.pyml_training/requirements.txtml_training/README.md
The model is trained on the uploaded synthetic academic event dataset to predict:
TASK_REQUIREDDUE_DATE_TASKACTIONABLE_NO_DATEINFORMATION_ONLYANNOUNCEMENT_ONLYMATERIAL_ONLYTEST_OR_EXAM_INFOSUBMISSION_INSTRUCTIONGRADE_OR_FEEDBACKUNKNOWN
app/src/main/assets/classsync_event_classifier.tfliteapp/src/main/assets/classsync_event_labels.txt
TfLiteEventClassifier.ktHybridEventClassifier.ktClassifierConfidencePolicy.ktRuleBasedEventClassifier.ktClassificationMapper.ktClassroomEventParser.kt
- Kotlin
- Jetpack Compose
- Room
- DataStore
- WorkManager
- Google Classroom API
- Gmail API
- TensorFlow Lite
app/src/main/java/com/rochiee/classsync
├── ai
├── auth
├── bloc
├── dashboard
├── data
│ ├── local
│ ├── remote
│ └── repository
├── di
├── digest
├── domain
├── eventengine
├── exam
├── export
├── ml
│ └── classifier
├── planner
├── reminder
├── study
├── taskengine
├── ui
├── widget
└── worker
- Open the project in Android Studio.
- Use a recent Android SDK and a physical device or emulator.
- Configure Google OAuth locally.
- Build and run the app.
ClassSync does not require committed secrets in the repo.
Use one of these local-only options:
local.propertiesCLASSSYNC_GOOGLE_WEB_CLIENT_ID=...apps.googleusercontent.com
local.propertiesCLASSSYNC_GOOGLE_CLIENT_SECRET_JSON=/absolute/path/to/client_secret_....json
- shell environment
export CLASSSYNC_GOOGLE_WEB_CLIENT_ID=...apps.googleusercontent.com
Detailed setup guide:
./gradlew assembleDebug
./gradlew :app:compileDebugKotlin
./gradlew :app:testDebugUnitTest