Sky Diary — NASA APOD Viewer
A modern Android application for discovering NASA's Astronomy Picture of the Day content, saving favorite images for offline access, and exploring astronomy through a smooth Jetpack Compose experience.
- RoleAndroid App Development
- PlatformAndroid — Kotlin & Jetpack Compose
- FocusNASA API, Offline Storage & Modern UI
Problem
NASA's Astronomy Picture of the Day provides a rich collection of astronomy images and explanations, but browsing, saving, and revisiting previously discovered content can be improved through a dedicated mobile experience.
Solution
Sky Diary combines NASA's APOD API with Jetpack Compose, Retrofit, Room, DataStore, and Coil to create a polished astronomy browsing experience with persistent favorites, offline access, and theme preferences.
Users
- • Astronomy Enthusiasts
- • NASA APOD Users
- • Android Users
Outcome
A complete Android application demonstrating real-world API integration, offline-first persistence, asynchronous data loading, responsive UI, and analytics.
App Previews
Problem breakdown
Content Discovery
- • NASA APOD provides a large collection of astronomy images and explanations
- • Browsing remote content benefits from a dedicated, visually engaging mobile interface
- • Users need an easy way to explore older APOD entries and view detailed information
Offline Access
- • Interesting astronomy images should remain accessible without an internet connection
- • Saved content needs reliable local persistence
- • Saved state must remain synchronized between the main browsing experience and offline collection
Mobile Experience
- • Image-heavy remote content can make interfaces feel slow while loading
- • Theme preferences should persist between application sessions
- • The application needs to remain compatible with older Android devices
Design intent
Explore visually
A two-column astronomy image grid creates a simple, visual-first way to discover NASA APOD content while keeping the browsing experience compact and engaging.
Offline by design
Room provides local persistence for saved APOD entries, allowing users to revisit their favorite astronomy content without requiring an active internet connection.
Smooth interactions
Shimmer loading effects, image crossfades, and card animations provide continuous visual feedback while remote astronomy content is being loaded.
Persistent preferences
DataStore keeps the user's Light / Dark theme preference across application restarts, creating a more consistent personalized experience.
User flows
Discovery journey
Goal: Discover and explore NASA astronomy content.
- 01
Open Sky Diary on the Home tab
- 02
Fetch APOD content from NASA's API
- 03
Browse astronomy images in a two-column grid
- 04
Select an image to open its detailed view
- 05
Read the image title, date, and explanation
- 06
Load older APOD entries using Show More
The flow keeps astronomy discovery simple and visual while providing access to the full context behind each NASA APOD entry.
Save & offline flow
Goal: Save interesting astronomy content for later access.
- 01
Open an APOD detail view
- 02
Save the astronomy image
- 03
Persist the APOD locally using Room
- 04
Access saved content through the Offline tab
- 05
Open or remove saved entries without an internet connection
- 06
Keep saved state synchronized with the Home experience
Local persistence transforms the application from a simple API viewer into a useful personal collection that remains available offline.
Theme preference flow
Goal: Maintain a consistent visual experience across sessions.
- 01
Choose Light or Dark theme
- 02
Persist the preference using DataStore
- 03
Restore the preference when the application starts
- 04
Apply the selected theme across the Compose interface
Persisting preferences ensures that users do not have to repeatedly configure the application after restarting it.
Architecture Overview
High-level breakdown of how the system is structured and how responsibilities are separated across layers.
Android Client
Kotlin and Jetpack Compose power the Android interface, using Material 3 for the visual system and responsive screens for browsing, details, and offline content.
State & Networking
ViewModel and StateFlow manage application state while Retrofit and Gson handle communication with and parsing of NASA's APOD API.
Local Persistence
Room Database stores saved APOD entries for offline access, while DataStore Preferences persists the user's Light / Dark theme selection.
Image & Analytics Layer
Coil handles remote image loading and visual transitions, while Firebase Analytics provides basic Daily Active User tracking and usage insights.
Result & Impact
Built a complete Android application around NASA's real-world Astronomy Picture of the Day API.
Implemented offline-first favorite storage using Room Database.
Created a polished Jetpack Compose interface with shimmer loading, image crossfades, and card animations.
Persisted Light / Dark theme preferences using DataStore.
Established a modern Android architecture using Kotlin, Coroutines, StateFlow, Retrofit, Room, and Compose.
Integrated Firebase Analytics for basic application usage tracking.
Maintained compatibility with Android API 21 and above.
"Want to see more or work together?"
This project reflects how I approach real-world problems — from UX decisions to technical trade-offs. If this resonates, let’s talk.




