iOS Club · Spring 2026
SideQuest
Turning city exploration into shared adventures.
City quests you complete, share, and compare with friends. I built parts of the social layer.

Problem
Travel ideas are scattered; turning them into plans with friends takes effort.
Approach
City quests to start, a feed and leaderboards to keep going.
Outcome
Presented at iOS Club Demo Day.
From places to save to things to do
Pick a quest
Food, art, landmarks, activities
Invite friends
Form a quest group
Document it
A photo completes the quest
Share and compare
Feed, leaderboard, passport

Building the social layer

What I built · 6-person subteam
- Comments
- Helped shape the architecture
- Post retrieval
- By user, filtered by author
- Friend requests
- Incoming and outgoing
- Emoji reactions
- Per-user map, aggregated counts
- Podium
- Top three, plus a compact variant
Team-built: quests, travel history, maps, profile, and passport.
Connecting live interactions to data
SwiftUI views
Tab bar, navigation stacks, sheets
View models / shared state
Published properties, Observation
Firebase
Auth · Firestore · Storage
Firestore collections
USERS
Profiles, friends, points
ADVENTURES
City and its quests
QUESTS
Details, location, photos
POSTS
Content, comments, reactions
BADGES
Profile badges

Reactions as a user → emoji map
Benefit: One reaction per user; easy totals
Trade-off: Writes pile onto the post
One podium, two variants
Benefit: Shared logic across screens
Trade-off: Fixed sizes hurt small screens
Known limits Feed loads in batches, not true database pagination · Comments are live; the feed refreshes on pull
What I’d carry into the next version
Agree on data contracts earlier
Comment format changes rippled through post code. Define schemas up front.
Design loading around realistic data
Fast-feeling isn’t fast. Paginate early and test at scale.
Focus · Comments
Keeping discussion attached to each post
Comments live inside each post document. A Firestore listener refreshes the thread when the post changes.
+Benefit: Simple reads and live updates
−Trade-off: Big threads mean big documents
Next: a paginated comment subcollection.