← James Edwards
← James Edwards

Fits

A fashion social media app on iOS.

Role
Co-founder and CTO
Year
May 2023 to February 2025
Platform
iOS
Status
Sunset
Stack
Swift · UIKit · Go · PostgreSQL · pgvector · Redis · Next.js · AWS
Post your fit and get seen by everyone: the feed
Build your profile and showcase your pics: a profile
Discover the top fits of the day and week: Explore
See who made it out the feed: Fits of the day
Vote on the fits you like: a post with its upvotes
Check out what your friends upvoted: a profile’s upvotes
Find looks with the same vibe with similar fits: similarity results

Drag for more · click a screen to open it

Fits was a social network for outfits. People posted what they were wearing, upvoted each other, and followed people whose style they liked. There were two feeds, everyone and the people you followed, and posts could be reposted to your profile. It ran from 2023 to early 2025 and reached around 11,000 registered users.

I co-founded it and was the only engineer, so the work moved between the iOS app, the API, and whatever the product needed next.

Fits on iOS: a full-screen outfit post, the two-column feed, and a profile
A post, the feed, and a profile.

01Building the whole product

The app was Swift and UIKit: a photo feed of outfits in two columns, profiles, posting, following, upvotes and notifications.

Behind it, a Go API on PostgreSQL, with per-endpoint rate limiting in Redis. It covered the usual surface: accounts and auth, posts and media, feeds, follows, upvotes, search, notifications, reporting.

A Next.js companion rendered profiles and posts as real web pages, with link previews generated per post, so a Fits link shared in a group chat opened into the actual outfit instead of a redirect to the App Store.

Moderation was part of it too: reports, blocks, takedowns, and the account states that go with them.

02Finding similar outfits

One of the features I wanted was a way to find more outfits like the one you were already looking at.

I shipped that in 2024 on pgvector. Each post carries a 512-dimensional vector, and finding similar posts is a nearest-neighbour query ordered by distance.

Because similarity search lived in Postgres, block and moderation rules could be applied inside the same query, so a post from someone you have blocked never entered the candidate set.

A Fits post beside its More fits like this similarity results
Similarity results for a post.

Reference implementation of image similarity

03Running it

Fits ran in separate staging and production environments. GitHub Actions built Docker images into ECR, migrations shipped inside the image, and the database suite ran on every push.

With no other engineers on the team, staging gave me somewhere to catch problems before they reached production.