Pic Off makes photo challenges fun and effortless. Built natively with Kotlin, it allows users to challenge friends to take the best picture based on a specific theme.
The goal was to engineer a robust Single-Activity application utilizing MVVM architecture to handle complex state transitions seamlessly.
| Home & Feed | Challenges | Start New Challenge |
|---|---|---|
![]() |
![]() |
![]() |
- Architecture: MVVM, Single Activity (Navigation Component), ViewBinding
- Core: Kotlin, Coroutines, LiveData
- Backend (Firebase): Auth (Google Sign-In), Realtime Database, Storage
- Key Features: AlarmManager (Resilient Notifications), Camera Intents, Offline Support
Managing the lifecycle of a challenge between two users is handled via a state machine in the MainViewModel:
graph LR
A[Sent] --> B[Open]
B --> C[Vote Recipient]
C --> D[Vote Challenger]
D --> E[Result]
E --> F[Done]
- Sent: Challenger sends request.
- Open: Recipient accepts and uploads photo.
- Vote Recipient: Recipient votes.
- Vote Challenger: Challenger votes.
- Result: Winner is calculated and displayed.
- Done: Challenge completed.
-
Clone the repo
git clone https://github.com/libaum/PicOff.git
-
Firebase Setup
- Add your own
google-services.jsonto the/appdirectory.
- Add your own
-
Build
- Open in Android Studio (Electric Eel+) and run (minSdk 26).
Built with ❤️ and Kotlin for Android


