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.

Role
Developer · Social Feed
Subteam
6 people
Project
iOS Club · Spring 2026
Platform
iOS · SwiftUI
SideQuest social feed with the top-three friend podium above a Golden Gate quest post
Fig. 01 · The social feed.Social feed subteam · Mine: post data, reactions, podium

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

1

Pick a quest

Food, art, landmarks, activities

2

Invite friends

Form a quest group

3

Document it

A photo completes the quest

4

Share and compare

Feed, leaderboard, passport

SideQuest quest detail: Walk the Golden Gate Waterfront, difficulty, and quest group
Fig. 02 · A quest, completed with a photo.Team-built

Building the social layer

SideQuest friend ranking with the top-three podium and full list
Fig. 03 · Friend rankings, topped by my podium.Mine: podium + compact variant

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

Fig. 05 · Simplified MVVM architecture. Leaderboards sort friends’ stored points; no separate collection.
SideQuest post with its live comment thread
Fig. 04 · Comments update live on each post.I helped shape comments

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.

Reactions as a user → emoji map

Mine

Benefit: One reaction per user; easy totals

Trade-off: Writes pile onto the post

One podium, two variants

Mine

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.