Quiby

quit smoking buddy

Overview

Quiby is an iOS smoking cessation and habit-breaking app that was developed as part of final challenge at the Apple Developer Academy. Quiby reframes quitting smoking as a shared journey rather than a solo effort. The app introduces a buddy system combined with gamification, allowing users to pair with a trusted partner to track progress, share streaks, and earn achievements together. By visualizing shared accountability and progress in real time, Quiby encourages consistency, motivation, and emotional support throughout the quitting process.

Problem

Quitting smoking is difficult not only because of nicotine dependence, but also due to the lack of accountability and sustained motivation over time. Many cessation apps focus solely on individual progress, which can make users feel isolated and disengaged, especially during moments of craving or relapse risk. Additionally, maintaining consistency across devices, tracking shared progress, and keeping users engaged in real time presents technical challenges in state synchronization, notification timing, and data reliability.

Solution

Quiby addresses this challenge by transforming smoking cessation into a shared, collaborative experience. The app introduces a buddy-based system that pairs users together, allowing them to track progress, earn achievements, and stay accountable as a team rather than as individuals.

From a technical perspective, the solution is built around real-time synchronization and reliability. CloudKit is used to maintain a shared source of truth for user data, buddy relationships, streaks, and badges, ensuring that both users always see consistent and up-to-date information. Push notifications are integrated to reinforce engagement through reminders, progress updates, and timely encouragement.

By combining social accountability, gamification, and a robust backend architecture, Quiby shifts habit-breaking from a solitary effort into a supportive, shared journey, increasing user motivation, consistency, and long-term commitment.

Features

Buddy Pairing via Unique Code

Quiby enables users to securely pair with a quitting partner using system-generated unique codes. Each user enters the others code to establish a mutual connection, ensuring intentional and private pairing.

Personalized Onboarding

During onboarding, Quiby collects essential behavioral data such as:
  • Smoking frequency
  • Quit date
  • Cigarette cost
This information is used to personalize progress tracking, making goals more realistic and measurable while providing meaningful long-term motivation (e.g., money saved, days smoke-free).

Shared Progress Dashboard

Once paired, both users can view:
  • Their own quitting streak
  • Their buddy's streak
By displaying this data in a single shared dashboard, the app promotes transparency and accountability, reinforcing commitment through social reinforcement rather than self-discipline alone.

Shared Badge Collection

Quiby rewards milestones through a shared badge system, where achievements are earned and displayed together with a buddy.
This design shifts motivation from individual milestones to collective success, reinforcing the idea that progress is stronger when supported by another person.

Breathing Exercise for Craving Control

To address short-term cravings, Quiby includes a guided breathing exercise designed to help users manage urges in the moment.
This feature provides a healthy alternative action when cravings arise, helping users interrupt habitual behavior patterns without leaving the app.

Architecture

The system is composed of an iOS app and an Apple Watch companion app. The iPhone aggregates environmental data and performs calculations, while the Apple Watch supplies motion data and delivers real-time alerts.

Quiby is built using a client-driven, cloud-synchronized architecture, optimized for real-time collaboration between paired users.
  • iOS (Swift UI)
  • Manages user interface, onboarding flow, progress visualization, and local state management.

  • CloudKit (Public Database)
  • Acts as the shared data layer for buddy pairing, streak synchronization, and badge updates. CloudKit ensures near real-time consistency between users without requiring a custom backend.

  • Push Notifications
  • Used to notify users about streak milestones, buddy activity, and engagement reminders, reinforcing consistency and accountability.

The system prioritizes state consistency, scalability, and reliability, ensuring both users see the same progress data without conflicts.
Data Model

The data model is designed to support a buddy-based smoking cessation experience with real-time synchronization and shared progress tracking. It is structured around CloudKit record types that separate user state, social interactions, and collaborative achievements. This approach ensures clear responsibility boundaries between personal data, peer-to-peer engagement, and shared milestones, while enabling reliable synchronization, scalability, and consistency across paired users.

1. QuiddyUsers

Stores core user data related to smoking behavior, buddy relationships, and progress tracking.

  • buddyCode: A unique identifier representing the user&apso;s paired buddy.
  • buddyStartDate: The timestamp indicating when the buddy relationship officially began.
  • cigPerDay: The average number of cigarettes smoked per day by the user.
  • dateCravingPressed: A list of timestamps recording when the user reported a craving event.
  • incomingCode: A pending buddy code received from another user, used during the invitation acceptance or rejection state.
  • invitedDate: The date when a buddy invitation was sent or received.
  • outgoingCode : The buddy code of a target user to whom an invitation has been sent and is awaiting response.
  • pricePerCig: The cost of a single cigarette, used for calculating money saved.
  • quiddyCode: A unique identifier assigned to each user, used for buddy pairing.
  • relapseDate: A list of timestamps indicating when the user recorded a relapse event.
  • stopDate: The initial date when the user stopped smoking.
  • updatedStopDate: An adjusted stop date used for calculating savings and progress, accounting for relapse events.
  • username: The user's display name.

2. BuddyNudge

Supports the in-app nudge system that enables encouragement and accountability between buddies.

  • message: The content of the nudge message sent between users.
  • receiver: The user who receives the nudge.
  • sender: The user who sends the nudge.

3. BuddyBadge

Stores shared badge achievements earned collaboratively by paired users.

  • badgeName: The display name of the badge.
  • badgeThreshold: The condition required to earn the badge.
    • Money saved: Rp 100,000 · 250,000 · 500,000 · 1,000,000 · 2,500,000
    • Day streak: 7 · 14 · 30 · 60 · 90 · 120 days
  • badgeType: The category of the badge, such as day streak or money saved.
  • obtainedDate: The timestamp when the badge was earned.
  • userA/userB: The paired users who earned the badge together. A deterministic sorting function ensures consistent assignment of users as A and B within each buddy relationship.
Tech Stack
swiftUIarKitrealityKit
  • SwiftUI: Used to build a declarative, state-driven user interface across iOS and watchOS. SwiftUI enables real-time UI updates in response to timer changes, sensor updates, and notification states.
  • Cloud Kit: Used for storing and synchronizing shared data such as buddy relationships, streak progress, and badges. CloudKit enables real-time updates while maintaining Apple ecosystem security standards.
  • Push Notification: Supports engagement through reminders and progress-related alerts, helping users stay committed to their quitting goals.
Team
team

Left to Right

  • Jeremy: Project Manager, iOS Developer
  • Stephan: Lead Developer
  • Vee: Lead Designer
  • Kelvin: iOS Developer, UI/UX Designer
My Contributions

Development

I developed the core application logic, integrating CloudKit for shared data synchronization and implementing push notifications for progress updates. This included designing the buddy system flow from unique code generation and invitation handling to buddy management and pending states, as well as badge and milestone tracking to support a consistent and reliable shared experience.

Technical Decision Making & Planning

I led the technical direction of the project by selecting the overall tech stack and defining how each component should work together. I also broke down high-level features into a structured backlog and distributed tasks across the team to ensure balanced workload and steady progress.

Version Control & Team Workflow

I handled Git setup and collaboration workflow for the team, including repository management, branching strategy, and pull request practices. I also reviewed team code, resolved merge conflicts, and ensured code quality and consistency throughout development.

Ideation & Design Feedback

I actively participated in the ideation phase, contributing to feature discussions, user flow decisions, and feasibility validation to ensure that proposed ideas could be realistically implemented within the project scope.