-
-
Rack turns your real closet into an app: snap your clothes, style them on boards, and post the fit as a magazine-style drop.
-
Dress up your home screen with 13 app icons, from fuzzy hangers to a llama. A Monthly exclusive.
-
Snap any piece and Rack cuts out the background automatically, so it hangs on your digital rail in seconds.
-
Rack of the day: an AI stylist picks one outfit from clothes you already own each morning, and tells you why it works.
Inspiration
Every morning I stood in front of a full closet and felt like I had nothing to wear. The problem was never a lack of clothes. I kept reaching for the same five pieces while everything else hung there, forgotten.
I tried the wardrobe apps that already exist, and I read their reviews. The same complaints kept coming up: uploads that fail, whole wardrobes that disappear, and outfit suggestions that feel random, with no way to say "not this again." So I built the app I wanted: one that is reliable, learns my taste, and is fun enough to open every morning.
That became Rack. The home screen is a clothes rack with a hanger each for your top, bottom, shoes and accessory. The hangers sway when you tilt your phone, and a shake reshuffles the whole look.
What it does
- Put your closet on your phone. Take a photo and Rack removes the background on your device, finds the main color, names it, and saves a clean cut-out. You can also paste a link from a shop, and Rack adds the piece to your wishlist with its photo, name, brand and price filled in.
- Today's look, already on the rack. Every morning an outfit from your own clothes hangs on the rail, picked for the season. Choose one of eight occasions, like work or a party, and the rack changes to match. Tap a hanger to try the next piece, hold to go back, double tap to pin it. "Love it" and "Not today" teach Rack what you like.
- Style by hand. The canvas is a blank board where you drop your pieces, move and resize them, draw on top, and save the look. The Inspo drawer keeps posts you saved from Instagram, TikTok and Pinterest as a mood board of outfits to recreate.
- Plan ahead. Pick tomorrow's outfit tonight, or line up the next seven days. Rack adds each plan to your calendar and reminds you at the time you choose. Tomorrow's plan shows on the home screen.
- Know what you really wear. Log today's outfit in one tap. Rack then shows your cost per wear, a calendar of what you wore, the pieces gathering dust, the colors your closet runs on, your wear streak, and 30 achievements to earn.
- Share it. Rack Drop turns today's fit, a canvas board or your whole closet into a 9:16 story poster. There are four templates, and each exports as a still image or a short video.
- Your data, safe. Rack works offline first and syncs across your devices, so a lost phone does not mean a lost wardrobe. You can delete your account and everything in it from Settings.
Rack is free to try with a nine piece sample closet. A weekly or monthly plan lets you build your own.
How I built it
The iOS app is written in SwiftUI with SwiftData, so the whole wardrobe lives on the device and works without a connection. Background removal uses Vision's foreground mask, and color extraction samples only the opaque pixels of the cut-out. Core Motion feeds the gravity vector into the hangers, EventKit powers the calendar planner, local notifications handle the reminders, and AVFoundation renders the Rack Drop videos. Subscriptions run on RevenueCat.
The daily outfit comes from a small scoring engine that runs on the phone. It is a set of plain rules, so the same closet always gives the same answer and I can trace exactly why a piece was picked. Each piece \(g\) gets a score:
$$ s(g) = 2\,[\text{season fits}] + 2\,[\text{occasion fits}] + [\text{unworn} \geq 30 \text{ days}] - 2\,[\text{worn in the last 2 days}] + [\text{favorite}] + p_g $$
where \(p_g\) is the taste score learned from your "Love it" and "Not today" taps, kept between \(-3\) and \(3\) so one favorite piece cannot take over. Outerwear earns a bonus in fall and winter and a penalty otherwise. A full look is scored as the sum of its pieces plus a color harmony term \(H\), the average harmony between its pieces:
$$ S(\text{look}) = \sum_{g \in \text{look}} s(g) + H(\text{look}) $$
Pieces in the wash are never suggested.
The backend is Node.js 22 with TypeScript and Fastify, backed by PostgreSQL on Supabase. It handles sync, Sign in with Apple, email accounts with a verification code, photo storage, achievements, and the link import.
Challenges I ran into
- Sync that never loses a wardrobe. Disappearing closets were the top complaint about other apps, so this had to be right. Every change is saved on the phone first and pushed later. When two devices edit the same piece, the most recent edit wins. A delete is sent as a normal update with a "deleted" flag, so a delete and an edit racing each other follow the same rule as everything else.
- Fetching links safely. Importing from a pasted link means the server fetches URLs that anyone can type in, which is a classic security hole (SSRF). I built a guard that checks DNS, blocks private network ranges, and checks every redirect again.
- Calendar sync that actually syncs. Editing a planned outfit kept creating duplicate calendar events. It turned out write-only calendar access cannot read back the events it created, so it could not update or delete them. I switched to full access with a strict rule: Rack only ever touches events it created itself.
- Hangers that sway without slowing the screen. The tilt sensor updates many times a second. Only the hangers read the tilt value, so the rest of the home screen stays still and is not redrawn.
- Fitting the smallest review window. Apple reviews iPhone apps in a small 375 by 667 window on an iPad. My style quiz overflowed it and the build was rejected. The quiz now measures the height it has and shrinks its card and spacing to fit.
What I learned
- Rules I can explain beat a black box. Because the outfit engine is a short list of rules, I can read any suggestion and see where it came from. That made it easy to tune, and the "Love it" and "Not today" taps move the score in a way I can predict.
- Cut what isn't ready. Earlier builds had a weather feature that was really a fixed guess for each month, and an AI stylist that was not good enough to charge for. I removed both before release. A smaller app that tells the truth is better than a bigger one that doesn't.
- Local first is a feature. Keeping the wardrobe on the device made the app fast and reliable, which is exactly where other wardrobe apps let people down.
What's next for Rack
A few things are partly built and need finishing: a daily "this or that" style duel, a swipe-to-build fit builder, a wardrobe export as a spreadsheet or PDF for insurance, alternate app icons, and a monthly recap card. After that come a home screen widget, outfit sharing with friends, packing lists for trips, and fill-the-gap suggestions that show what one new piece would unlock in the wardrobe you already own.
Built With
- argon2
- core-image
- core-motion
- eventkit
- fastify
- figma
- ios
- jwt
- node.js
- postgresql
- revenuecat
- sign-in-with-apple
- storekit
- supabase
- swift
- swiftdata
- swiftui
- typescript
- vision
- xcode
- zod



Log in or sign up for Devpost to join the conversation.