Skip to content
RH★RYAN
HANGRALIMDEVELOPER / BALI, ID

IOS / PHOTOGRAPHY

Keepsake

A camera built around albums. Choose where your photos belong before taking them, then open that album’s camera straight from a Home Screen widget.

Shipped on the App Store

Tap. Snap. Already organized.
THE ROLE
iOS Developer · Apple Developer Academy
THE WHEN
May — Jun 2025
BUILT WITH
SwiftUIAVFoundationPhotoKitWidgetKit

The idea

Organizing photos is easy to postpone. Keepsake moves that step into taking the photo: choose or create an album, open its camera, and save each shot directly into that album in the iOS photo library.

Built with a team at the Apple Developer Academy and shipped to the App Store, the app combines a custom camera with album management and a configurable Home Screen widget. My role was iOS development.

From capture to collection

AVFoundation provides the capture session and photo output. The camera model consumes asynchronous preview and photo streams, updates the SwiftUI viewfinder, and passes captured image data to the selected photo collection. PhotoKit handles saving assets and adding them to the album.

The album manager supports creating, renaming, and deleting albums, loading their latest thumbnails, and handling photo-library permissions, including limited access. Thumbnail caching helps the album browser avoid repeatedly loading full-size images.

One tap into the right camera

The WidgetKit extension lets someone configure a widget for a particular album. Tapping it follows a deep link into Keepsake with that album selected. App Groups share album settings between the app and widget, including whether to show a photo thumbnail.

What the project taught me

The useful experience sits in the handoff between capture, storage, and navigation. Working on Keepsake meant handling asynchronous camera output, keeping UI updates on the main actor, respecting library permissions, and preserving the user’s album choice across entry points.

The result is a small, focused workflow: choose the collection once, then keep taking photos into it.

CASE FILE / 04THAT'S THE STORY.

LET'S BUILD THE NEXT ONE ↗
UP NEXT / CASE FILE 05

Sastra Bali

A new way to read an old script.

← THE COMPLETE LINEUPBACK TO BASE ↑
YOU'VE GOT A DIRECT LINE.

RYAN'S GUIDE

The inside story on the work.

AI PORTFOLIO GUIDEASK AWAY
THIS IS WHERE THE CONVERSATION STARTS.
Ryan's guide

Hey! I'm Ryan's AI portfolio guide. Want the story behind a project, his background, or what he builds? You're in the right place.

PICK A CONVERSATION STARTER

ENTER: SEND SHIFT + ENTER: NEW LINE

AI guide, not Ryan. Messages go to OpenRouter.
Have something personal to discuss? Email Ryan ↗