FaceFollow is an iOS app I built when I was 18 to help people become more aware of their own emotions.
It combines facial expression tracking, emoji‑based challenges, and emotion logging to create a playful yet introspective experience.
Your face, your rules. Every emotion is valid.
🎥 Watch the Demo video: YouTube Link
FaceFollow lets you:
- Record how you feel – adjust sliders for Passion, Energy, and Positivity.
- Pick an emoji mask – try to match the expression (smile, pout, wide eyes, raised or furrowed brows).
- Let the camera analyse your face – the app shows real‑time tracking and gives a similarity score.
- Save your session – add a comment and store the record.
- Review your history – a calendar view shows past entries, and a scoreboard displays trends, streaks, and insights.
The goal is not to judge or “fix” your expressions, but to gently nudge you toward recognising your inner emotional state.
- Face Landmark Tracking (Vision framework) – detects eyes, eyebrows, lips, and face contour.
- 5 Emoji Challenges – 😃 (smile), 😲 (raised brows), 😠 (furrowed brows), 😗 (pout), 😳 (wide eyes).
- Real‑time similarity score – calibrated to your own face during the first few seconds.
- Emotion visualisation – a colour‑coded circle changes with your slider values.
- Calendar view – see which emojis you picked on any day.
- Scoreboard – recent logs, 7‑day trends, emoji frequency, and average scores per mask.
- Insights – personalised messages based on your recording patterns (e.g., inner positivity vs. chosen mask).
- Dark / Light mode – respects system or manual preference.
- Developer mode – hidden feature (tap the version number 5 times) to clear data or generate random test data.
- SwiftUI for the entire user interface.
- SwiftData for local persistence of
EmotionRecordobjects. - AVFoundation + Vision – real‑time face detection and landmark extraction.
- UICalendarView (wrapped as
UIViewRepresentable) for the history calendar with emoji decorations. - Charts (Swift Charts) – trend lines, bar charts for emoji frequency, and average scores.
- Camera – uses front‑facing camera, portrait orientation, mirrored preview for a natural “mirror” feel.
The face‑matching logic calculates a percentage score based on the chosen feature (e.g., mouth width for smile, eye height for wide eyes, brow‑to‑eye distance for brows). During the first ~30 frames, the app calibrates the user’s neutral range to make the score personalised rather than absolute.
- iOS 16.0+ (the app uses SwiftUI APIs that require iOS 16, some features are marked
@available(iOS 17.0, *)but the base target is 16). - Xcode 14+ (Swift 5.7+)
- A real device with a front camera (the simulator cannot provide video frames for face detection).
- Clone the repository:
git clone https://github.com/yourusername/FaceFollow.git cd FaceFollow - Open
FaceFollow.xcodeproj(or the.xcodeprojgenerated from the Swift package). - Select your team and bundle identifier in Signing & Capabilities.
- Build and run on a physical iPhone or iPad.
Note: The app requests camera permission. Allow it to use the front camera.
FaceFollowApp.swift– app entry point, sets up SwiftData container.ContentView.swift– main tab view (Scoreboard, Calendar, Record, Insights, Settings).RecordView.swift– sliders for Passion/Energy/Positivity.EmojiPickerView.swift– grid of emoji challenges.FaceSimulationView.swift– camera + face tracking + real‑time score overlay.SummaryView.swift– save record with optional comment.CalendarView.swift– native calendar with emoji decorations.ScoreboardView.swift– charts, streak, recent logs.InsightsView.swift– dynamic textual insights based on recorded data.SettingView.swift– dark mode toggle, hidden developer mode.EmotionRecord.swift– SwiftData model.EmotionCalculator.swift– helper to map sliders to emotion word and colour.EmojiChallenge.swift– defines the five challenges and which facial feature to track.CameraFaceOverlayView.swift/CameraVisionManager– core face detection and landmark drawing.
To access developer tools:
- Go to the Settings tab.
- Tap the version number (“Face Follow – V2.1.3”) five times.
- A new “Developer” section appears.
- Clear All Data – deletes all
EmotionRecordentries. - Generate Random Month Data – populates the last 30 days with random test data (useful for testing charts and insights).
- Clear All Data – deletes all
- Apple’s Vision framework for face landmark detection.
- SwiftUI and SwiftData for making data‑driven UI so smooth.
- The open‑source community for endless inspiration.
I built FaceFollow when I was 18 as a way to explore both iOS development and emotional awareness. It’s not meant to be a clinical tool – just a gentle, sometimes silly, reminder that there’s no wrong way to express how you feel.
If this app helps you pause for a second and check in with yourself, it has done its job.
Made with ❤️ and a front‑facing camera.