Work / MasterPics
MasterPics

The Situation
MasterPics is a photography contest app for iOS and Android. Members join contests with keys, upload photos, vote on other entries, climb a ten-step rank ladder and win prizes. We built it from scratch, launched it on both stores, and now run its marketing, so what we learn from campaigns feeds straight back into the product.
The Constraint
Every screen is full of large photos, and many members are on slow or patchy mobile connections. Feeds had to load fast and scroll smoothly without phones running out of memory. Contest results decide prizes and ranks, so they had to be exactly right every time. And because growth was paid from the start, the app needed built-in reasons to invite friends and keep coming back.
What we did
We built every part of the app, from contests and swipe voting to ranks, chat, hosted contests, the key shop and the Pro subscription.
Uploads: photos are resized on the phone to 1,600 pixels before upload, with a progress bar, instead of sending the full-size original. This makes uploads much faster on weak connections and keeps storage costs down. Files that are too large get a clear message instead of a crash.
Loading and caching: each photo is downloaded once and kept in a disk cache, so scrolling back through a feed never reloads it or flashes white. On iPhone, the app checks a photo’s size before showing it and shrinks only files over 5 MB, no more than two at a time.
Offline: when the connection drops, a banner appears and screens the member has already loaded stay usable. Profiles and saved posts are cached for five minutes, so reopening them doesn’t refetch everything.
Fair results: prizes and ranks are worked out by a scheduled job on the server. Each contest is locked before scoring, so two runs can never award the same prize twice.
Growth: we built guests’ ability to browse before signing up, invite links credited on the server, shareable result cards, and rewarded ads capped at three a day. We also run the paid campaigns and the ad creative.
.png)
.png)
.png)
The trade-off
When the app can’t find out a photo’s size quickly (within four seconds), it loads the photo at full size rather than waiting or showing an empty card. On older iPhones, that occasionally uses more memory than we’d like. We accepted that because a blank contest card is worse for members than a slightly heavier image, and shrinking only the photos we know are large still prevents the crashes.
Outcome
| Metric | Value | Source | Date |
|---|---|---|---|
| Downloads | 1,000+ | Google Play | Oct 2026 |
| Built from scratch to live on both stores | Both iOS and Android | Delivery records | 2025 |
| Engagement | Since July 2025 | Repository history | Oct 2026 |
| Commits since launch | 806 | Repository history | Jul 2025 to Oct 2026 |
| Languages | 2 (English, French) | App source | Oct 2026 |
| Live versions | iOS 5.0.5 · Android 1.0.83 | Release records | Oct 2026 |
What we would do differently
We would set photo size limits and resizing on the first day. Early uploads went up at full size, and we later had to add size checks on the viewing side to keep older iPhones stable. Resizing at upload from the start would have kept every photo light from the beginning.
More work
See all work →Ready when the work has to be right the first time.
A 30-minute scoping call with a senior engineer, designer or growth lead. You will leave with a written view of scope, risks and a realistic timeline, whether or not you hire us.
12 years40+ shipped products6 industries
Karachi and Sharjah
.png)
