Developer foundations · iOS
Fast, resilient, useful.
A focused UIKit project built around live data, deliberate states, and an interface that stays clear under pressure.

- Project
- GitHub Followers
- Role
- Design · iOS development
- Stack
- Swift · UIKit
- Timeline
- 2 weeks · 2024
Project overview
A small app with real product constraints.
I built GitHub Followers to make follower relationships quick to understand while learning how an iOS interface should behave around live API data.
The work brought networking, caching, pagination, search, and reusable UIKit structure into one compact experience.
Working app
See the complete flow.
A walkthrough of the follower grid, search, navigation, and interface states working together.
Working with live data
Five systems behind the interface.
Fetch
Pull profile images, usernames, and follower counts from the GitHub API.
Cache
Store images with NSCache to avoid repeated network calls.
Update
Use UICollectionViewDiffableDataSource for clear, efficient collection updates.
Continue
Load the next page only after scrolling crosses the content threshold.
Find
Make a growing follower list easy to search with UISearchController.
Designing every state
The successful path was not the only path.
The interface accounts for waiting, empty results, and individual network errors—not only a successful response.
Loading
Show visible progress while the network request is active.
Empty
Give an empty result its own useful, intentional screen.
Error
Match the message to the individual network failure.
Building reusable structure
Native constraints. Reusable structure.
Layouts use safe-area-aware constraints. Child view controllers keep sections reusable and connected to UIKit lifecycle behavior.
Native layout
Auto Layout constraints respect each view’s safe area.
Reusable sections
Child view controllers keep interface pieces self-contained.
Clear outcomes
Success meant smooth navigation and fewer unnecessary requests.