A production-grade, multi-tenant team collaboration app built with Jetpack Compose and Material Design 3.
Warning
Once production-ready, this badge and beta notices will be removed.
HubSpace is a production-grade, multi-tenant team collaboration and workspace application for Android. It is built entirely with Jetpack Compose and Material Design 3, and backed by a secure Firebase stack.
Under the hood, HubSpace follows an enterprise-grade architecture centered on a Single Source of Truth (SSOT) pattern through AuthViewModel. Combined with zero-flicker pre-fetching, the UI renders fully formed on first paint, with no layout shifts and no duplicate Firestore reads.
| Language |
|
| UI Framework |
|
| Architecture |
|
| Backend & Database |
|
| Notifications |
|
| Dev Environment |
|
| Feature | Description | |
|---|---|---|
| π | Zero-Flicker Architecture | Pre-fetched ViewModel state loading that eliminates layout shifts and duplicate Firestore reads. |
| π’ | Multi-Team Workspace | Seamless team switching with reactive state synchronization and custom team selection sheets. |
| π | Smart Daily Brief | SummarizeDayCard gives a context-aware workspace pulse that highlights active tasks, upcoming deadlines, and notices. |
| β‘ | Live GitHub Activity | GitHubLiveCard fetches contribution stats, streaks, and repository counts in real time using community APIs and coroutine-safe networking. |
| π | FCM Push Notifications | Background and killed-state push handling through a custom FirebaseMessagingService. |
| π¨ | Modern Material 3 Design | Dynamic surfaces, custom vector branding icons, and refined typography. |
| π | Secure Access | Google Sign-In with whitelist verification, backed by Firebase Authentication. |
HubSpace uses MVVM with Clean Architecture principles and a strict Unidirectional Data Flow. AuthViewModel acts as the Single Source of Truth for session and workspace state.
flowchart LR
UI["π¨ Compose UI<br/>(Material 3)"] -- "user events" --> VM["π§ ViewModels<br/>(AuthViewModel = SSOT)"]
VM -- "immutable UI state" --> UI
VM --> REPO["π¦ Repositories"]
REPO --> AUTH["π Firebase Auth<br/>+ Whitelist check"]
REPO --> FS[("π₯ Cloud Firestore")]
REPO --> GH["β‘ GitHub Community API"]
FCM["π FCM Service"] --> VM
Key principles
- Single Source of Truth: one authoritative state holder, so screens never disagree with each other.
- Unidirectional Data Flow: events flow up, state flows down, which keeps behavior predictable and testable.
- Pre-fetching: data is loaded before the UI needs it, which removes flicker and redundant reads.
- π Dedicated Tasks Board: full-fledged checkable team task lists with strike-through states and quick-add bottom sheets.
- π Team Join by Hash Code: 8-character invite code generation and validation for instant workspace onboarding.
- π Notification Deep Linking: direct intent routing from background push notifications to specific team announcements.
- π€ Edge AI Task Parsing: a natural language widget that parses and schedules events and tasks from plain text.
| Home | Team Switcher | Daily Brief | GitHub Activity |
|---|---|---|---|
| coming soon | coming soon | coming soon | coming soon |
- Android Studio (latest stable)
- JDK 17 or newer
- A Firebase project with Authentication, Firestore, and Cloud Messaging enabled
# 1. Clone the repository
git clone https://github.com/<your-username>/HubSpace.git
cd HubSpace
# 2. Open in Android Studio and let Gradle sync- In the Firebase Console, create a project and add an Android app with the project's package name.
- Enable Google as a sign-in provider under Authentication.
- Add your debug and release SHA-1 / SHA-256 fingerprints to the Firebase app settings.
- Download
google-services.jsonand place it in theapp/directory. - Set up the Firestore whitelist data used for sign-in verification.
- Build and run on a device or emulator.
./gradlew assembleDebugNote
google-services.json contains project-specific configuration. Keep it out of public version control by adding it to .gitignore.
Contributions, issues, and feature requests are welcome.
- Fork the project
- Create your 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
Distributed under the MIT License. See LICENSE for details.
Built with β€οΈ using Kotlin and Jetpack Compose
β If you like this project, consider giving it a star.