Welcome to Perk Punch!
Perk Punch is a dual sided loyalty app I built to connect local businesses with their customers. Businesses can create custom punch cards, track analytics, and manage their customer base. Customers collect punches, earn rewards, and discover nearby businesses all in one place.
- 100% SwiftUI
- MVVM architecture with a hybrid (feature + type) based organization
- Dual app experience: separate flows for businesses and customers
- Firebase backend (Auth, Firestore, Storage, Cloud Functions, App Check)
- QR code scanning for punch collection
- Custom card designer with templates, color picker, and export
- RevenueCat for subscription management (customer tiers + business tiers)
- Push notifications and daily streak tracking
- Lottie animations throughout
- Light and dark mode support
- Custom app icon support
- Custom theme support
- SwiftUI
- Firebase (Auth, Firestore, Storage, Functions, App Check, Cloud Messaging)
- RevenueCat
- User Notifications
- AVFoundation (camera for QR scanning)
- CocoaPods
Perk Punch started as a way to learn SwiftUI and Firebase while building something I would actually use. Local businesses often rely on paper punch cards which are easy to lose and hard to track. I wanted to give them a digital alternative that felt personal and flexible.
The biggest challenge was the dual sided nature of the app. Businesses and customers see completely different interfaces, but they share the same data layer. I ended up organizing the codebase by user type and feature, with shared managers for Firestore, auth, and subscriptions. The design tab alone, with its card editor, templates, color harmony, and export features took a lot of iteration to get right.
I also learned a lot about in app purchases and subscription tiers. RevenueCat simplified the backend, and wiring up entitlements across both user types and handling migrations was interesting.
- Dual sided app with separate business and customer experiences
- Custom QR based punch system with short codes for manual entry
- Full card designer with templates, color tools, and print/export
- Firebase App Check integration for backend security
- Subscription tiers for both customers and businesses
- Built independently
Want to understand how the codebase is organized? See Architecture.md for a breakdown of the project structure, managers, content flow, and where/how to find things. It covers the hybrid feature + type organization, the business vs customer split, and how to navigate the design tab and other aspects of the design patterns of the app.
- Clone the repo
- Run
pod installin the project directory - Open
PerkLoop.xcworkspacein Xcode (use the workspace, not the project file) - Add your
Info.plistandConfig.swift(see.gitignorefor required config files) - Build and run on a device or simulator
Available on the App Store









