A modern Android application built with Jetpack Compose and Material 3 for exploring developer profiles and repositories across GitHub and GitLab — all in one place.
Search and view developer profiles on both GitHub and GitLab from a single search bar.
- Avatar, name, username, bio, company, location, and website
- Followers, following, and public repository counts
- Platform badge indicating GitHub or GitLab
A native-style contribution graph showing activity over the last ~4 months.
- 18-week × 7-day color grid (5 intensity levels)
- Month and day-of-week labels
- Activity totals: Commits · PRs · Issues · Comments · Other
- Powered by the public Events API — no authentication required
Export a shareable A4 PDF report of any developer profile directly from the TopBar.
- Username, followers, following, stars, public repos
- Recent commit count and most-active repository
- Last worked-on repository and top 3 programming languages
- Generated date — no external PDF library needed (Android
PdfDocument)
Read repository READMEs rendered as rich Markdown inside the app.
- Full Markdown support: headers, tables, strikethrough, links, code blocks
- SVG and PNG badge/icon rendering (shields.io, devicons, vectorlogo.zone)
- Aspect-ratio-preserving image sizing
- Powered by Markwon
Browse a user's public repositories with key metadata at a glance.
- Repository name, description, and primary language badge
- Stars, forks, and last-updated timestamp
- Tap to view the full README
The app checks for newer versions on launch and notifies the user with a dismissible dialog.
- Version info served from a remote
version.json - Supports mandatory and optional update prompts
- Material 3 with dynamic color (Android 12+)
- Dark and light theme support
- Bottom navigation bar
- Skeleton loading, error, and empty states throughout
| Version | Code | Highlights |
|---|---|---|
| 3.0 | 6 | Contribution heatmap, PDF report, rewarded ad, SVG badge support |
| 2.1 | 5 | Hotfix: GitLab user search returning 404 |
| 2.0 | 3–4 | Multi-platform (GitHub + GitLab), Markdown README viewer, version check system |
| 1.0 | 1–2 | Initial release — GitHub profile and repository viewer |
The app follows MVVM with a clean layered architecture:
app/src/main/java/com/sigmotoa/gitdash/
├── data/
│ ├── model/ # UnifiedUser, UnifiedRepo, ContributionData, Platform…
│ ├── remote/ # GitHubApiService, GitLabApiService (Retrofit interfaces)
│ └── repository/ # UnifiedRepository — single source of truth for both platforms
├── ui/
│ ├── components/ # AdMobBanner, ContributionGraph, GitHubSearchBar, MarkdownText
│ ├── screen/ # ProfileScreen, RepositoryListScreen, RepoDetailScreen
│ ├── theme/ # Color, Type, Theme (Material 3)
│ ├── util/ # ProfileReportGenerator (PDF)
│ └── viewmodel/ # GitHubViewModel + GitHubUiState
└── MainActivity.kt # Navigation host
UnifiedRepositoryabstracts the differences between the GitHub REST API v3 and GitLab REST API v4 behind a single interface, returning platform-agnosticUnifiedUserandUnifiedRepomodels.ContributionDatabundles the date heatmap, event-category counts, and top-pushed repo into a single result, fetched once per profile load.ProfileReportGeneratoruses Android's built-inandroid.graphics.pdf.PdfDocumentdrawn withCanvas— zero external dependencies for PDF generation.MarkdownTextwraps aTextViewinsideAndroidViewwith a lifecycle-aware Markwon instance (cached withremember) to avoid recreating the renderer on every recomposition.
| Library | Purpose |
|---|---|
| Kotlin 2.0 | Primary language |
| Jetpack Compose | Declarative UI |
| Material 3 | Design system + dynamic color |
| Coroutines + StateFlow | Async state management |
| Library | Purpose |
|---|---|
| Retrofit 2 | HTTP client |
| OkHttp | Interceptors & logging |
| Kotlinx Serialization | JSON deserialization |
| Library | Purpose |
|---|---|
| Coil 3 | Image loading (Compose-native) |
| Markwon 4.6 | Markdown → TextView rendering |
| markwon-image + androidsvg | SVG badge & icon support |
Android PdfDocument |
PDF generation (built-in, no extra dep) |
| Library | Purpose |
|---|---|
| Navigation Compose | Bottom-nav + back-stack |
| Manual DI | Repository + ViewModel wiring in MainActivity |
- Min SDK: 26 (Android 8.0 — needed for
java.time) - Target / Compile SDK: 36
- JVM Target: Java 11
- Android Studio Hedgehog or newer
- JDK 11+
- Android device or emulator running Android 8.0+
git clone https://github.com/sigmotoa/GitDash.git
cd GitDashOpen in Android Studio, then:
# Build
./gradlew assembleDebug
# Install on connected device/emulator
./gradlew installDebug- Tap the Profile tab
- Select GitHub or GitLab using the platform toggle
- Type a username and tap Search
The contribution grid loads automatically below the profile stats — green cells indicate activity intensity over the last ~4 months.
- With a profile loaded, tap the Share (↑) icon in the TopBar
- Watch the short rewarded ad
- The PDF is generated and the system share sheet opens automatically
- Tap the Repositories tab
- Scroll through public repos; tap any to open the README viewer
| Variant | Notes |
|---|---|
debug |
Logging enabled, test AdMob IDs as fallback |
release |
ProGuard available; use real AdMob IDs in local.properties |
./gradlew assembleRelease# Unit tests
./gradlew test
# Lint
./gradlew lint
# Instrumented tests (requires device/emulator)
./gradlew connectedAndroidTest- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m "feat: add my feature" - Push:
git push origin feature/my-feature - Open a Pull Request targeting
main
This project is licensed under the MIT License — see LICENSE for details.
- GitHub REST API v3
- GitLab REST API v4
- Jetpack Compose
- Material Design 3
- Markwon by @noties
- Language colors inspired by GitHub Linguist
Made with ❤️ using Jetpack Compose