MyMuseum is a Kotlin Android image-posting prototype built with Firebase Authentication, Cloud Firestore, and Firebase Storage. It demonstrates a compact authenticated flow for publishing images, viewing a shared feed, and filtering the signed-in user's posts.
This is an academic learning project rather than a production social platform. Its current implementation is intentionally small and Activity-based.
- The repository was cleaned and its debug build was verified on July 29, 2026.
- The verified toolchain is JDK 17, Gradle 8.2, Android Gradle Plugin 8.2.0, and Android SDK 34.
- A Firebase project configured for the application ID
com.kaanbalci.mymuseumis required to run authenticated and data-backed flows. - Firestore and Storage security rules are not included, so production-grade backend security is not claimed.
The project name remains MyMuseum, while the current implementation functions as a generic Firebase-backed image-posting prototype:
- Create an account or sign in.
- Select an image from the device.
- Add an optional caption.
- Upload the image to Firebase Storage.
- Save its URL, owner email, caption, and timestamp in Cloud Firestore.
- Display post records in a RecyclerView feed.
- Email and password account creation and sign-in
- Session-aware routing for an already authenticated user
- Sign-out with the authenticated task stack cleared
- Device image selection
- Image upload to Firebase Storage
- Post creation in Cloud Firestore
- A shared feed updated through a Firestore snapshot listener
- Feed ordering by newest timestamp first
- A profile view filtered to the signed-in user's posts
- View Binding, RecyclerView, and Picasso-based image loading
| Screen | Responsibility |
|---|---|
MainActivity |
Creates accounts, signs users in, and forwards an existing session to the feed. |
AkisActivity |
Displays the shared, newest-first post feed and exposes upload, profile, and sign-out actions. |
YuklemeActivity |
Selects an image, uploads it, resolves its download URL, and saves the post document. |
ProfilActivity |
Displays post documents whose userEmail matches the current authenticated user. |
The app uses a direct Activity-based structure. Activities own their View Binding instances and call Firebase services directly; there is no separate ViewModel or repository layer.
- Kotlin 1.9.10
- Android SDK 34, minimum SDK 24
- Android Gradle Plugin 8.2.0
- Gradle 8.2
- AndroidX, Material Components, ConstraintLayout, RecyclerView
- Firebase Authentication
- Cloud Firestore
- Firebase Storage
- Picasso 2.8
Post documents are stored in the Posts collection.
| Field | Type | Use |
|---|---|---|
downloadUrl |
String | Public download URL returned after the image upload |
userEmail |
String | Email of the authenticated post owner |
comment |
String | Legacy field name used for the post caption |
date |
Timestamp | Timestamp created by the app when the post is saved |
Images are uploaded under images/{UUID}.jpg. The shared feed orders Posts by date descending, while the profile screen filters the collection by userEmail.
The screenshot below was captured from a locally built debug APK on an Android emulator. No personal account or backend content was used.
.
├── app/
│ └── src/main/
│ ├── java/com/kaanbalci/mymuseum/
│ │ ├── adapter/
│ │ ├── model/
│ │ └── view/
│ └── res/
├── docs/screenshots/
├── gradle/wrapper/
├── build.gradle.kts
├── settings.gradle.kts
└── gradlew / gradlew.bat
- Create or select a Firebase project that you control.
- Register an Android app with the package name
com.kaanbalci.mymuseum. - Enable Email/Password under Firebase Authentication.
- Create Cloud Firestore and Firebase Storage for the project.
- Define restrictive development rules for the authenticated flows. Do not leave open test rules enabled.
- Download the project's
google-services.jsonand place it atapp/google-services.json.
google-services.json is ignored by Git and is not included in the current repository tree. An earlier project configuration was removed from the current tree; if it remains active, its API access should be reviewed and restricted in the owning Firebase or Google Cloud project.
Prerequisites:
- JDK 17
- Android Studio or an Android SDK installation with SDK 34
- A valid project-specific
app/google-services.json
On Windows PowerShell:
git clone https://github.com/UAJOP/MyMuseum.git
Set-Location MyMuseum
.\gradlew.bat tasks
.\gradlew.bat assembleDebugOn macOS or Linux:
git clone https://github.com/UAJOP/MyMuseum.git
cd MyMuseum
./gradlew tasks
./gradlew assembleDebugThe debug APK is generated under app/build/outputs/apk/debug/.
- Firebase rules are not versioned in this repository and were not available for security validation.
- The profile screen is a current-user post filter, not a complete editable profile system.
- The project does not implement reactions, threaded discussions, post editing, post deletion, or pagination.
- Feed updates are real-time, but the app does not implement a dedicated offline-first data layer.
- Firebase calls and UI state are managed directly by Activities.
- The repository does not include an automated test suite or a release-store configuration.
- Authenticated backend flows require the developer's own Firebase configuration and test account.
