Orbits is a high-performance, local-first Android application designed to seamlessly capture, structure, and organize professional networking contacts directly from LinkedIn using native system share targets and an ultra-dense, Instagram DM-inspired interface.
- Frictionless Share Sheet Targets:
- Quick Orbit: A zero-UI background intent handler that parses LinkedIn profile shares instantly, cleans tracking parameters via regex, and saves contacts with a lightweight confirmation toast.
- Tag & Save: A translucent slide-up Compose modal overlaying the LinkedIn app, allowing immediate tag assignments (
Met at Event,Referred,Hire,Follow up) and contextual note taking without context switching.
- High-Density Instagram-Style List: Compact 88dp–100dp profile rows engineered to show 5–6 contacts per screen without scrolling. Features custom dynamic gradient rings surrounding contact avatars for pinned profiles and active follow-up reminders.
- 3D Tactile Interaction Mechanics: Interactive micro-animations with spring-physics scale modifiers (
ModifierExt.kt) providing responsive, tactile haptic feedback on touch. - Unidirectional Data Flow (UDF): Pure reactive state architecture powering real-time list filtering, full-text search, and time-based category organization via Kotlin
StateFlow. - Offline Analytics Dashboard: Embedded "Explore" analytics screen providing visual network density stats, category distributions, and interaction timelines calculated directly from local Room SQLite metrics.
[System Share Sheet] ➔ [QuickOrbit / TagSave Activities] ➔ [Room SQLite Database]
│
│ (Reactive Flows)
▼
[OrbitViewModel] ➔ [HomeUiState]
│
▼
[Jetpack Compose UI]
The app persists contacts locally using Room SQLite with structured schema definitions:
CREATE TABLE IF NOT EXISTS orbits (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL,
clean_url TEXT NOT NULL UNIQUE,
headline TEXT,
tags TEXT NOT NULL DEFAULT '', -- Comma-separated tags
notes TEXT,
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
reminder_date INTEGER,
status TEXT NOT NULL DEFAULT 'Saved', -- 'Saved', 'Connected', 'In Conversation', 'Archived'
is_pinned INTEGER NOT NULL DEFAULT 0
);- Target SDK: Android 15 (API level 35) / Min SDK: Android 7.0 (API level 24)
- Language: Kotlin 2.0+
- UI Toolkit: Jetpack Compose with Material3 Design components
- Persistence: Room 2.6.1 SQLite database with KSP code generation and automatic schema migrations
- Concurrency: Kotlin Coroutines, StateFlow, and SharedFlow pipelines
- System Integration: Custom Android
IntentFilter(text/plain) with translucent window flags
To build and compile the Orbits project locally from source:
-
Clone the repository:
git clone https://github.com/AnmolS05/Orbits.git cd Orbits -
Compile the Debug APK:
- On Linux/macOS:
./gradlew assembleDebug
- On Windows (PowerShell/CMD):
.\gradlew.bat assembleDebug
- On Linux/macOS:
-
Locate Build Output: The output APK will be generated at:
app/build/outputs/apk/debug/app-debug.apk