Fashion-based Dating App for iOS
A curated dating experience where style meets connection. Match with people who share your fashion aesthetic.
Fitting is a fashion-forward dating app that matches users based on style compatibility. Rather than swiping on faces, users first connect through their fashion aesthetic — revealing profile photos only after a mutual match.
- Style-first matching — Compatibility score weighted heavily on fashion style (30%), with height, age, occupation, weekend hangout spots, and color palette preferences
- Photo reveal after match — Face photos unlock only when both users match
- Curated community — New users go through an approval process to maintain quality
- Real-time chat — Instant messaging after matching with push notification support
| Feature | Description |
|---|---|
| Apple Sign In | Native iOS authentication |
| Onboarding | 7-step profile setup (style, brands, photos, Q&A) |
| Matching Algorithm | Multi-factor scoring system (fashion, height, age, etc.) |
| Explore | Daily recommendation feed (up to 5 per day) |
| Like / Heart | Send likes and get notified on matches |
| Chat | Real-time messaging with Supabase Realtime |
| Push Notifications | Expo push notifications for likes, matches, messages |
| Saved Users | Bookmark interesting profiles |
| Block & Report | User safety tools |
| Profile Edit | Update photos, style, brands, Q&A anytime |
| Force Update / Maintenance | Remote app config via Supabase |
- Expo
~54— React Native framework - expo-router — File-based routing
- NativeWind
v4— Tailwind CSS for React Native - gluestack-ui — UI component library
- TanStack Query
v5— Server state management - Zustand
v5— Client state management - React Native Reanimated — Animations
- Supabase — Auth, PostgreSQL, Storage, Realtime, Edge Functions
- Supabase Edge Functions — Push notification delivery (Deno)
- Row Level Security (RLS) — Fine-grained data access control
- PostgreSQL Functions — Matching algorithm logic via RPC
- EAS Build — Cloud builds for iOS
- EAS Submit — App Store submission
fitting-app/
├── app/ # expo-router screens
│ ├── (onboarding)/ # Onboarding flow (7 steps)
│ ├── (tabs)/ # Main tab navigation
│ │ ├── index.tsx # Home / Explore feed
│ │ ├── hearts.tsx # Likes & matches
│ │ ├── chat.tsx # Conversations list
│ │ └── settings.tsx # Settings
│ ├── chat/[id].tsx # Chat room
│ ├── profile/ # Profile view & edit
│ └── user/[id].tsx # Other user's profile
├── api/ # Supabase query functions
├── components/ # Shared UI components
│ └── ui/ # gluestack-ui components
├── hooks/
│ ├── queries/ # TanStack Query hooks
│ └── mutations/ # TanStack Mutation hooks
├── stores/ # Zustand stores
├── supabase/
│ ├── functions/ # Edge Functions
│ └── migrations/ # Database migrations
├── lib/ # Utilities (supabase client, etc.)
├── types/ # TypeScript types
└── docs/ # Architecture documentation
Compatibility scores are computed via a PostgreSQL RPC function:
Total Score = (
Height Score × 20% +
Age Score × 20% +
Fashion Score × 30% + ← Style (60%) + Brand (40%)
Occupation × 10% +
Weekend Spot × 10% +
Color Palette × 10%
) / 100
See docs/matching-algorithm.md for full details.
- Node.js 18+
- Expo CLI
- iOS Simulator (Xcode) or physical iPhone
- Supabase project
Create a .env file in the root:
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key# Install dependencies
npm install
# Start development server
npm start
# Run on iOS simulator
npm run ios# Install Supabase CLI
npm install -g supabase
# Link to your project
supabase link --project-ref your-project-ref
# Run migrations
supabase db push# Deploy push notification functions
supabase functions deploy send-like-notification
supabase functions deploy send-message-notification
supabase functions deploy send-approval-notificationSet the following secrets in your Supabase project:
EXPO_ACCESS_TOKEN
| Document | Description |
|---|---|
docs/matching-algorithm.md |
Matching score calculation |
docs/signup-integration.md |
Auth & onboarding flow |
docs/push-notification.md |
Push notification system |
docs/photo-system.md |
Photo upload & reveal system |
docs/user-block.md |
Block & report features |
docs/app-config.md |
Remote config (force update, maintenance) |
docs/DATABASE_SCHEMA.md |
Full database schema |
MIT



