Lifestory
Memories, captured and shared as they happen — not filed away.
- Flutter
- Python / FastAPI
- PostgreSQL (self-hosted)
Overview
Lifestory is a mobile app for capturing and sharing memories the way they actually happen — not as a flat camera roll, but as living timelines people build together. A trip, an engagement, a move to a new city: each becomes its own timeline that friends and family can be invited into, adding their own moments, voice notes, and photos to the same shared thread over time.
We built the Flutter app and FastAPI backend for Lifestory. The core design challenge was making capture effortless — open app, shoot, done — while making the organizing layer of timelines, albums, and collaborators feel meaningful rather than like folder management.
What we built
The complete cross-platform app
The full Flutter mobile app, backed by a Python FastAPI service.
Onboarding & auth
Account creation and email login.
Feed
A scrollable stream of moments from followed and personal timelines, supporting private posts, voice-note ("Story time") entries, likes, and rich photo posts.
Capture
A dedicated camera flow for photos and video, built directly into the main navigation rather than buried in a menu.
Timelines
Users create named timelines — a trip, a relationship, a milestone — add moments over time, and track elapsed time since creation.
Collaborative sharing
Timelines can be shared via a unique link or directly to WhatsApp, Facebook, Twitter, email, and more, letting invited people contribute their own moments.
Profile & settings
Theme control, account management, feedback, and app sharing.
The journey
From first launch to a shared memory
Step 01
Getting started
Onboarding sets expectations early: capture, organize, and relive the memories that matter.
Step 02
Signing in
A focused email login gets returning users back into their timelines quickly.
Step 03
The feed
One feed supports mixed content — voice notes, private posts, and rich photo moments — without losing coherence.
Step 04
Capture, ready
Capture is one tap from anywhere in the app, built into the main navigation rather than buried in a menu.
Step 05
Capture, recording
Photos and video share one fast flow instead of asking users to choose a mode first.
Step 06
Timelines
Each timeline is a living thread built around an experience or milestone, not a static album.
Step 07
Inside a timeline
Elapsed time gives each story continuity while collaborators add moments to the same shared thread.
Step 08
Timeline created
Creation flows directly into sharing — once a timeline exists, it is ready to open up to others.
Step 09
Inviting collaborators
A unique link and native share sheet make inviting people to contribute their own moments immediate.
Step 10
Profile & settings
Theme, account management, feedback, and app sharing stay accessible without competing with capture.
The harder parts
Where the engineering really lived
Real-time collaborative timelines
Once a timeline can be shared and added to by multiple people, the app has to keep everyone's view consistent — new moments from any contributor need to show up reliably for everyone else on that timeline.
Two capture modes, one flow
Photos and video capture needed to live in a single, fast camera screen without forcing users to pick a mode up front — friction at the point of capture is the fastest way to lose a memory-sharing app's core habit.
Mixed content types in one feed
Voice notes, private posts, and photo moments all needed a consistent visual language in the feed so the product didn't feel like three different apps stitched together.
Reliable media uploads
Photos, video, and voice notes are the product. Uploads had to survive flaky networks, resume cleanly when a connection dropped, and surface progress so users knew a moment was still on its way — not lost.
Background upload tasks
Capture can't block the rest of the app. Uploads run as background tasks so someone can keep browsing timelines, start another capture, or leave the screen while media continues transferring without stalling the UI.
Fast media in the feed
Once uploaded, media still has to appear quickly. That meant thoughtful caching, compressed previews where full files weren't needed yet, and loading states that felt intentional instead of blank or janky.
Infinite moment loading
Timelines grow. The feed and timeline views paginate moments infinitely as the user scrolls — without reloading the whole list, losing scroll position, or making every new page feel like a full refetch.
Performance under load
Infinite scroll and heavy media together are an easy way to tank a phone. We kept lists lean, recycled off-screen content carefully, and watched memory and frame time so long timelines stayed usable instead of gradually degrading.
Outcome
Launched · Live as GetMemorizThe Lifestory app we built launched to both the App Store and Google Play, reaching 5,000+ downloads, and continues today under its new name, GetMemoriz.
Open Memoriz on Google Play