Inspiration

At weddings, trips, and some moments in our life, everyone is on their phone — shooting, scrolling, posting — and the moment itself gets lost. Shared albums are usually messy group chats or after-the-fact dumps. We wanted something closer to a disposable camera for modern events: one place to capture together, with the option to keep photos hidden until a reveal, so people stay present and open the album as a shared experience. That idea became MemoCam — memories only happen once.

What it does

MemoCam is an event camera app for hosts and guests.

  • Hosts create an event (name, dates, cover card, reveal timing, shots-per-guest limit).
  • Guests join via invite link or QR and capture into a shared album.
  • Photos can stay locked until a reveal date/time, then the full album opens for everyone.
  • A full-screen camera session tracks remaining shots and queues uploads immediately.
  • Guests can only shoot while the event is live; hosts can keep uploading after the window closes until archive.

How we built it

  • Kotlin Multiplatform (sharedLogic) for domain models, use cases, repositories, and shared ViewModels (MVI-style: state, intents, effects).
  • Native UI: Jetpack Compose on Android, SwiftUI on iOS — same features, platform-native look and feel.
  • Offline-first: SQLDelight as the UI source of truth; network writes into the local DB.
  • Networking: Ktor client, kotlinx.serialization, Koin DI, Coroutines/Flow (SKIE for Swift interop).
  • Uploads: DB-backed queue with retry/backoff so captures aren’t lost on bad venue Wi‑Fi.

Challenges we ran into

  • as i have an individual account in google play console i have to pass 12 days of closed testing so it's not finished yet

Accomplishments that we're proud of

  • A full create → invite → capture → reveal → gallery flow on both platforms from shared logic.
  • Offline-first architecture with a persistent upload queue so photos survive flaky networks.
  • A clear separation of concerns: UI → ViewModels → use cases → repositories.
  • Reveal as a first-class product moment, not an afterthought.
  • A cohesive dark, celebratory design system that feels intentional on both OS UIs.

What we learned

  • Shared presentation logic (ViewModels) pays off more than sharing UI when you want native quality.
  • Offline-first and upload queues are non-negotiable for real-world event apps.
  • Pure domain policies (like reveal) keep behavior consistent and easy to test.
  • Dual-platform product work is as much about permission and timing rules as it is about screens.

What's next for Memocam

  • Polish guest onboarding and invite sharing.
  • Stronger notifications around live events and reveal moments.
  • Richer album experiences (downloads, sharing, host tools).
  • Light theme and broader localization.
  • Scale the backend and media pipeline for larger events.
  • Keep iterating on presence-first features so the camera stays in the moment — and the album feels like the reward.

Built With

  • compose
  • kmp
  • kotlin
  • revenuecat
  • swift
Share this project:

Updates

Submission history