
Building Hardcopy
A free, ad-free iOS app for cataloging a physical movie collection — designed, researched, and taken through App Store review from the ground up.
Challenge

Process
The project started with a straightforward question:
"Why is there no free, dedicated place to track a physical media collection, when watch-trackers like Letterboxd have owned the streaming version of this for years?"
The Core Pain Point
The pain point I heard over and over starts with the user standing in a store, looking at a movie title, and not remembering if it was already at home.
That put ownership tracking above everything else, and it led me to create something that most "watch-trackers" get wrong:
Owning something and wanting something are two different lists.
A wishlist - stuff to buy
A watchlist - stuff to watch, whether you own it or not
These aren't the same list, so in Hardcopy they're kept structurally separate. A movie can live on either one, both, or neither.
Competitive Analysis
Before drawing a single screen, I looked at what already existed:
Streaming trackers - which are built around watch history and discovery, usually not ownership
Spreadsheets - that work, but ask people to maintain their own structure from scratch
Nothing free was built around the actual moment a collector needs help. Whether it be standing in a store, or scanning a shelf at home, trying to remember what's already theirs.

People also wanted to rate and review what they owned, but making that visible to other users pulls in a moderation and reporting obligation that both app stores require the moment there's public user-generated content. For the first version of the application I'm building and maintaining alone, keeping profiles and reviews private sidesteps that entirely.
The Interface
With the problem and the audience clear, I worked through the interface before touching visuals. Everything funnels toward one action:
Getting a disc onto the shelf as fast as possible.
Barcode scan - point the camera and it's logged in seconds, defaults to scanned format, easy to change if misread
Title search - for when you don't have the disc in hand
From there, four separate views instead of one list trying to do everything:
Collection - what you own
Wishlist - what you want to buy
Watchlist - what you want to watch
Lists - custom groupings
A few features other features I added:
A "weighted-equal randomizer" for when the viewer cant decide on what movie to watch.
A share card generated every time you add a movie, because collectors like showing off a rare find
A 13-step guided tour for first-time users, each step pointing at the real control it's teaching instead of a generic slideshow
Visual Identity
The earliest working version used emoticons for the entire icon system and a placeholder logo. Neither one was making it to the App Store, so I built a real visual identity:
Dark charcoal background (
#1E1E1E) with one blue accent (#0095D5)Every emoji in navigation and buttons replaced with a stroke-icon set drawn by hand, all at one consistent weight
The Bug That Took Longer Than the Rest of the App Combined
Real-device testing turned up one bug worth detailing because that fix single-handedly fixed the application.
Once wrapped for iOS and running on a physical phone through TestFlight, the bottom nav bar would visibly detach and drift upward at certain moments, most noticeably mid-scroll and during the onboarding tour.
After weeks of diagnosing, the real cause was structural: the nav bar was pinned with position: fixed on top of a scrolling page, which is exactly what iOS's WebKit engine handles badly during animated scrolls.
The actual fix was to stop the page itself from scrolling at all with one fixed-height shell with a single internal scroll region, so the nav bar became an ordinary element with nothing left to detach from.
I verified it worked with direct on-device measurement.
App Store Submission
After that came putting the application on the App Store. App Review rejected the submission three times total before finally accepting it.

Conclusion
Hardcopy is ultimately a project about a question every other movie tracker avoided. That being not what you watched, but what's already on your shelf. Most of the apps in this space are built around discovery or watch history, and treat ownership as an afterthought if they touch it at all. Hardcopy was designed around the opposite idea. That the person opening it just wants to know, fast, whether something's already theirs, and that costs them nothing to find out. The separate lists, the barcode scan, the randomizer, the account wall that only shows up when it's earned, all of it is in service of that same idea.



