License: MIT β see LICENSE.
Find your perfect match. Connect with people who match your vibe.
Real-time rooms. AI-powered compatibility. Meaningful connections.
Blink is a next-generation mobile app for finding people who truly match your vibe. Instead of endless swiping through profiles, Blink puts you in live rooms where real connections happen in real time.
Host a room and let people come to you β or join someone's room and compete to be their perfect match. An AI-powered Whisper Engine analyzes compatibility behind the scenes, helping hosts make better decisions based on shared interests, food preferences, and lifestyle alignment.
The result? Faster, more intentional connections with people you'll actually vibe with.
Create a live room, set the vibe (Casual, Romantic, Adventurous...), and wait for participants to join. You're in control.
Browse live rooms, see the host's vibe and profile, and jump in. Compete across three rounds to be their pick.
As participants join, Blink's AI analyzes their profile against yours β shared interests, food & drink preferences, activity alignment β and whispers compatibility insights only you can see: "She shares 4 interests with you", "His food preferences align 90%".
- First Impressions β Host sees participants with AI compatibility scores. Eliminate who doesn't fit.
- Icebreakers β AI suggests personalized questions. Participants answer live. Host narrows down.
- The Reveal β Full profiles unlocked. AI shows detailed compatibility breakdown. Host picks their match.
Matched? Enter real-time private messaging powered by Supabase Realtime. No bots, no delays β just real conversation.
| Feature | Description |
|---|---|
| Live Rooms | Real-time multiplayer rooms with WebSocket sync via Supabase Realtime |
| Host & Participant Roles | Choose to host (you pick) or compete (get picked) |
| AI Compatibility Engine | Gemini 3.5 Flash analyzes profiles and generates whisper insights |
| Date Preferences | Curate your ideal date β activities, cuisines, drinks β powered by a Hinge-inspired UI |
| Real-Time Chat | Instant messaging with your matches via Supabase Realtime |
| Tactile Audio & Haptics | Native sound effects and device vibrations for immersive feedback |
| Warm Editorial Design | Hinge-grade aesthetics with deep plum branding and serif typography |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BLINK CLIENT (EXPO / RN) β
β β
β Expo Router (Stack + Tabs) β
β βββ (tabs)/home ββββ Host a Room / Join a Room / Date Preferences β
β βββ (tabs)/rooms βββ Browse Live Rooms (real-time from Supabase) β
β βββ (tabs)/matches β Your Matches & Real-Time Chat β
β βββ create-room ββββ Room Setup (title, vibe, max participants) β
β βββ room ββββββββββββ Host Room View / Participant Room View β
β βββ date-special βββ Date Concierge Onboarding β
β βββ date-preferences Activities, Foods, Drinks & Summary Card β
βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β
WebSockets (Realtime) β PostgREST API
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SUPABASE CLUSTER β
β β
β βββ Postgres: profiles, rooms, room_participants, room_events, β
β β compatibility_scores, matches, messages β
β βββ RPCs: create_hosted_room, join_room, eliminate_participant, β
β β pick_match, advance_hosted_room, get_open_rooms β
β βββ Realtime Channels: room state, participant joins, chat messages β
β βββ Edge Functions: analyze-compatibility, generate-host-line β
βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GEMINI 3.5 FLASH ENGINE β
β Analyzes profile compatibility & generates whisper insights β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
blink/
βββ app/ # Expo Router file-based navigation
β βββ _layout.tsx # Root navigation, theme & audio providers
β βββ (tabs)/ # Tab navigator: Home, Rooms, Matches, Profile
β βββ create-room.tsx # Host room setup screen
β βββ room.tsx # Live room dispatcher (Host/Participant views)
β βββ date-special.tsx # Date Concierge onboarding
β βββ date-preferences.tsx # Date Preferences editor
β βββ chat.tsx # Real-time 1:1 messaging
β βββ auth.tsx # Authentication flow
βββ src/
β βββ screens/
β β βββ CreateRoomScreen.tsx # Room creation with vibe & participant settings
β β βββ HostLobbyScreen.tsx # Host waiting room with AI compatibility badges
β β βββ HostRoomScreen.tsx # 3-round game from host's perspective
β β βββ ParticipantRoomScreen.tsx # Participant view with live question answering
β β βββ HomeScreen.tsx # Host/Join CTAs & Date Preferences banner
β β βββ RoomsScreen.tsx # Browse real live rooms from Supabase
β β βββ ChatScreen.tsx # Real-time chat with matches
β β βββ ProfileScreen.tsx # User profile & preferences showcase
β βββ components/
β β βββ dating/ # Hinge-inspired dating UI components
β β βββ ui.tsx # Shared atomic UI primitives
β βββ hooks/
β β βββ useAppState.tsx # Global state with host/participant room flows
β βββ lib/
β β βββ roomActions.ts # Supabase RPCs for room management
β β βββ useRealtimeRoom.ts # Real-time hooks for rooms, browsing & chat
β β βββ supabase.ts # Supabase client initialization
β β βββ sound.tsx # Audio & haptic feedback system
β βββ types/
β β βββ dating.ts # Domain models for dating preferences
β βββ theme.ts # Design tokens, color palette & typography
βββ supabase/
βββ functions/
β βββ analyze-compatibility/ # AI compatibility scoring (Gemini 3.5 Flash)
β βββ generate-host-line/ # AI host commentary
βββ migrations/
βββ 0001_init.sql # Core schema: profiles, rooms, messages, RLS
βββ 0002_phase_engine.sql # Room phase state machine
βββ 0003_host_trigger.sql # Event notifications for AI
βββ 0004_hosted_rooms.sql # Hosted rooms, compatibility scores, new RPCs
βββ 0007_hosted_room_join_leave.sql # Hosted-room join and leave RPCs
βββ 0008_room_rls_no_recursion.sql # Room policies without recursive RLS
βββ 0009_hosted_room_gameplay.sql # Like/pass, icebreakers, match pick, safe leave
βββ 0010_chat_access.sql # Match-scoped chat reads and writes
βββ 0011_match_chat_rpc.sql # Authenticated read/send functions for chat
| Token | Value | Purpose |
|---|---|---|
| Background | #FAF4F8 |
Warm blush lavender-gray canvas |
| Surface | #FFFFFF |
Crisp white cards and containers |
| Primary | #4E214E |
Deep plum brand accent |
| Active Selection | #F4EBF4 |
Selected chip & tab background |
| Border | #EFE8EF |
Subtle card and control borders |
| Editorial Serif | Georgia / serif |
High-impact editorial headlines |
| Touch Targets | β₯ 44 Γ 44 dp | Accessible touch geometry on all controls |
- Node.js β₯ 18
- Expo CLI (
npm install -g expo-cli) - Expo Go on your phone, or iOS/Android emulator
git clone https://github.com/NOBA235/Blink.git
cd Blink/blink
npm install --legacy-peer-depscp .env.example .envFill in your Supabase credentials:
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-supabase-anon-keynpx expo startnpx expo start --tunnel@expo/ngrokis pre-configured indevDependenciesfor seamless tunnel connections.- Scan the QR code with Expo Go to test on your phone.
- Press
wfor Web,ifor iOS Simulator,afor Android Emulator.
-
Create a project named Blink at https://app.revenuecat.com and add the iOS and/or Android app.
-
Create an entitlement with identifier
premium. -
Create store products
blink_premium_monthly($4.99/month) andblink_premium_annual($29.99/year). -
Attach both products to the entitlement and add monthly and annual packages to the
defaultoffering. -
In RevenueCat, open Project settings β API keys. Copy the public SDK key for each platform into
src/lib/revenuecat.ts, replacing the placeholders:const RC_API_KEY_IOS = "appl_your_public_ios_sdk_key"; const RC_API_KEY_ANDROID = "goog_your_public_android_sdk_key";
Use the platform-specific key. Do not use a RevenueCat secret API key in the app.
-
Rebuild and reinstall the native development app after adding the SDK and keys. RevenueCat purchases are not available in Expo Go or web.
-
For the hackathon demo, open Settings and use [DEV] Simulate Premium in a development build to exercise premium screens without a store purchase.
The free tier includes five completed room visits per local calendar day and three saved matches. Room visit counts persist under blink_room_visits in AsyncStorage. Expo autolinks the native module; rebuild the native development client after adding the SDK.
Run the SQL scripts in supabase/migrations/ sequentially in your Supabase SQL editor:
0001_init.sqlβ Core schema, profiles, rooms, RLS policies0002_phase_engine.sqlβ Room phase state machine0003_host_trigger.sqlβ Event notifications for AI host0004_hosted_rooms.sqlβ Hosted rooms, compatibility scores, new RPCs0005_repair_host_profile.sqlβ Ensure existing users have profiles before hosting0006_close_hosted_room.sqlβ Allow hosts to close cancelled rooms0007_hosted_room_join_leave.sqlβ Guard hosted-room joins and participant exits0008_room_rls_no_recursion.sqlβ Fix recursive room visibility policies
supabase functions deploy analyze-compatibility
supabase functions deploy generate-host-line
supabase secrets set GEMINI_API_KEY=your_gemini_api_key# Type check all routes, components, and hooks
npx tsc --noEmit- Real-Time First: All room interactions, chat, and browsing powered by Supabase Realtime WebSockets.
- AI-Assisted, Human-Decided: AI provides compatibility insights; the host makes the final call.
- No Fake Data: Every room, participant, match, and message is real.
- Strict TypeScript: Zero
anytypes. Full type safety across the codebase. - Offline-First Persistence: Profile and preferences sync to AsyncStorage for instant app launches.
- Responsive Design: Flex-based layouts ensure flawless rendering across all screen sizes.