BridgeRelationships — Professional Networking & Gamified Learning

A SwiftUI app for building and tracking professional relationships through interactive learning, quizzes, and custom badges. Modular architecture, onboarding flows, and accessibility-first design.

Project Overview

BridgeRelationships is a SwiftUI-based iOS app designed to help users grow and track their professional network. The app features interactive onboarding, gamified quizzes, badge rewards, and modular UI components. Built with accessibility and scalability in mind, it leverages custom asset management and MVVM architecture for clean, maintainable code.

SwiftUI MVVM Gamification iOS

Project Snapshot

  • Platform: iOS (SwiftUI)
  • Type: Professional networking & learning
  • Focus: Gamified learning, accessibility, modular UI
  • Team: 5
  • Role: Product designer and iOS engineer
  • Timeline: Nov 2025 - Dec 2025

Unique Value

  • Motivates users to grow their professional network with gamified learning, custom badges, and interactive onboarding.
  • Combines modular SwiftUI components and asset management for a polished, scalable experience.
  • Blends learning, achievement, and progress tracking for a more engaging and memorable experience than typical networking apps.
  • Accessibility-first design ensures usability for all users.

Key Features

  • Custom UI & Assets: Unique badge, button, and onboarding views using SwiftUI and custom asset sets for a visually engaging experience.
  • Gamified Learning: Quiz logic and badge rewards to motivate users, leveraging models like QuestionModel and BadgeQuizLearnData.
  • Modular Architecture: Organized code into Models, Views, and CustomAssets for maintainability and scalability.
  • Accessibility & Engagement: Onboarding flows and interactive sheets to guide users and track progress.
  • SwiftUI Best Practices: MVVM patterns and reusable components for efficient development and clean code.

Screen Recording

Watch a screen recording of RelationshipBuilder in action:

Preview of RelationshipBuilder app in action.

Technical Breakdown

  • Views: BadgesView.swift, LearnView.swift, QuizView.swift, OnBoardingView.swift, MapTileView.swift — Custom views for badge display, learning modules, quizzes, onboarding, and map tiles.
  • Models: BadgeQuizLearnData.swift, QuestionModel.swift, LearnModel.swift, OnBoardingItem.swift — Data models for quiz logic, badge tracking, learning sets, and onboarding items.
  • CustomAssets: BadgeButton.swift, DoneButton.swift, LogoView.swift, RetakeQuizButton.swift, ShowBadgesButton.swift, SubmitButton.swift — Custom SwiftUI components for interactive UI elements.
  • Sheets: QuizSummarySheetView.swift, ResultsSheetView.swift — Modular sheet views for quiz summaries and results.
  • Assets.xcassets: Custom icons, badges, and color sets for a consistent and branded UI.

Design Decisions

  • Emphasized modularity and reusability by separating UI components, models, and assets.
  • Used MVVM for clean separation of logic and UI, making the app scalable and easy to maintain.
  • Focused on accessibility with high-contrast colors, clear iconography, and onboarding guidance.
  • Gamified user progress with badges and quizzes to increase engagement and retention.

Code Snippet

QuizControllerView.swift: Badge unlock logic based on quiz completion.

func markQuizPassedIfNeeded() {
    // Only mark as passed if score meets threshold
    guard score >= passingScore else { return }
    let key = "passed_" + quizTitle.replacingOccurrences(of: " ", with: "").lowercased() // e.g. passed_quiz1
    UserDefaults.standard.set(true, forKey: key)
    // Update badge unlocks based on pairs
    let passed1 = UserDefaults.standard.bool(forKey: "passed_quiz1")
    let passed2 = UserDefaults.standard.bool(forKey: "passed_quiz2")
    UserDefaults.standard.set(passed1 && passed2, forKey: "badge1Unlocked")
    let passed3 = UserDefaults.standard.bool(forKey: "passed_quiz3")
    let passed4 = UserDefaults.standard.bool(forKey: "passed_quiz4")
    UserDefaults.standard.set(passed3 && passed4, forKey: "badge2Unlocked")
    let passed5 = UserDefaults.standard.bool(forKey: "passed_quiz5")
    let passed6 = UserDefaults.standard.bool(forKey: "passed_quiz6")
    UserDefaults.standard.set(passed5 && passed6, forKey: "badge3Unlocked")
    let passed7 = UserDefaults.standard.bool(forKey: "passed_quiz7")
    let passed8 = UserDefaults.standard.bool(forKey: "passed_quiz8")
    UserDefaults.standard.set(passed7 && passed8, forKey: "badge4Unlocked")
}

Code Snippet

AKKitModel.swift: Singleton sound manager for app-wide audio feedback.

class SoundManager {
    static let instance = SoundManager()  // Singleton instance
    var player: AVAudioPlayer?
    enum SoundOption: String {
        case ding, success, buzz, cheer
    }
    func playSound(sound: SoundOption) {
        guard let url = Bundle.main.url(forResource: sound.rawValue, withExtension: ".mp3") else { return }
        do {
            player = try AVAudioPlayer(contentsOf: url)
            player?.play()
        } catch let error {
            print("Error playing sound. \(error.localizedDescription)")
        }
    }
}

Project Learnings

  • Learned to build modular SwiftUI apps with custom asset management and reusable components.
  • Improved quiz logic and badge reward systems for user motivation.
  • Enhanced onboarding flows for better user guidance and accessibility.
  • Applied MVVM and best practices for scalable, maintainable code.