Skip to content

Repository files navigation

README

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.

Table of Contents

Screenshots

Description

  • 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

Frameworks

  • SwiftUI
  • Firebase (Auth, Firestore, Storage, Functions, App Check, Cloud Messaging)
  • RevenueCat
  • User Notifications
  • AVFoundation (camera for QR scanning)
  • CocoaPods

What I Learned

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.

Accomplishments

  • 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

Architecture

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.

How To Use

  1. Clone the repo
  2. Run pod install in the project directory
  3. Open PerkLoop.xcworkspace in Xcode (use the workspace, not the project file)
  4. Add your Info.plist and Config.swift (see .gitignore for required config files)
  5. Build and run on a device or simulator

Available on the App Store

Acknowledgements

Used by

Contributors

Languages