Jump

Co-founder, sole engineerFebruary 2023 to January 2024

A dating app on iOS and Go.

Swift · UIKit · Go · PostgreSQL · PostGIS · Redis · WebSockets · APNs

Jump was a dating app. I co-founded it with friends who handled design and marketing, and I was the only engineer on it, building the iOS client and the Go backend. It shipped to the App Store in 2023.

Jump on iOS: a profile with coin and shot balances, and a purchase confirmation
Profile and purchase screens.

Matching

Someone was not eligible to appear just because they fit your settings. Both people's preferences had to hold in both directions, on gender and on age, before either of them was shown to the other. On top of that sat a set of exclusions: anyone already liked or passed on, anyone blocked in either direction, and accounts without photos or hidden from browsing.

The remaining candidates were ranked by a score that favoured recent activity, weighted double for anyone active in the last day, along with having more than one photo and being verified. Results were then ordered by distance band first, using PostGIS over geographic coordinates, and by score inside each band.

Reference implementation of reciprocal matching →

Messaging

A message was saved before the system decided how to deliver it. Connection state only changed the delivery path.

Match state can change while a socket is still open. Someone can unmatch mid-conversation. So sending, typing, reactions, unsends and read receipts all check the current match before they run. Being authorized when the connection opened is not enough.

Delivery itself was the simple part. If the recipient was connected, the message went over their WebSocket. If not, it went out as a push notification, provided they had notifications turned on.