Inspiration

Swipe right, swipe left, swipe left, swipe right. This never-ending cycle of repetitive actions, accompanied by conversations that lead to dead ends and ghosting, and the thousands of bots, leaves users with promises that are almost impossible to meet in modern dating apps.

With the intention of finding companionship, consumers are often left feeling unsatisfied and lonelier than before hopping on the apps. This is where Blink, Blind Link, comes in, ensuring every conversation is meaningful and intentional, so you can save your time for the right person. The core idea behind Blink is to reduce the shallow nature of modern dating apps and limit exposure to bots and low-quality interactions that often leave people feeling more isolated.


What it does

Blink is a virtual blind date. Instead of leading with appearance or endless swiping, Blink matches real humans based on personality, values, and compatibility first. Users start by verifying their identity through World ID to ensure authenticity, then fill out preferences and answer deep and fun questions that gauge personality and relationship needs for better matching. To avoid decision fatigue, Blink provides only one curated match per day. The relationship gradually unlocks different communication levels, starting with text, then voice calls, video calls, and eventually profile photos, only if the connection develops successfully. After each conversation stage, both users decide whether to move forward or move on.


How we built it

Blink is built as a full-stack, identity-verified dating platform using a decoupled React frontend and FastAPI backend, with Supabase for data persistence and World ID to verify personhood.

Identity Verification: We integrated Worldcoin's World ID (via IDKit) for off-chain, zero-knowledge proof-of-personhood verification. Every user must cryptographically prove they are a unique human before participating, eliminating bots and catfishing at the protocol level.

Backend / API: Python + FastAPI with modular routers for profiles, matching, messages, ratings, photos, and World ID verification.

Real-Time Communication: Agora SDK for in-app voice and video calling between matched users.

Matching Algorithm: A custom matching service pairs users based on their stated preferences and ratings history, feeding match results back into the system to improve future recommendations.

Frontend / UI: Vite + React + TypeScript SPA with pages for auth, profile creation, swiping, chat, calls, and settings.

Database & Auth: Supabase (hosted PostgreSQL) handles user authentication, profile storage, photo uploads, match records, and message persistence via its client SDK and service role key.

Core Language/Libs: Python 3, FastAPI, Uvicorn, Pydantic, TypeScript, React, Vite, Supabase JS SDK, Agora SDK (for voice and video call capability), IDKit (World ID).


Challenges we ran into

World ID Integration: Getting World ID to work required multiple fixes, like WASM file serving, signing key parsing, missing request fields, and porting cryptographic signing logic from JavaScript to Python.

Matching Algorithm: A hybrid matching system that combines rule-based compatibility scoring with AI-assisted weighting using the Google Gemini API. Gemini evaluates richer, unstructured user data (such as personality responses, conversation signals, and behavioral patterns) to generate compatibility signals that are integrated into the final match ranking. These AI-derived insights are combined with structured signals like preferences and stage decisions to improve match quality over time.

Connecting Frontend to Backend: Initially, the app used localStorage for profile data, which had to be refactored to fetch from the API. Messages, stage decisions, and unmatch handling all needed to be properly connected to backend endpoints.


Accomplishments that we're proud of

Bot-Free by Design: By requiring World ID verification, Blink guarantees every user is a real, unique human, solving one of the biggest problems in online dating at the protocol level rather than with heuristics.

Integration of Voice and Video Calling: Integrating Agora for real-time voice and video calls directly in the app gives users a way to connect beyond text.

Figma-to-Code Design Fidelity: Translating a complete Figma design system into 15+ pixel-accurate React screens with a reusable component library, ensuring a polished, consistent user experience across the entire app.


What we learned

We learned how to deeply integrate World ID’s zero-knowledge proofs, Supabase, and Agora’s real-time communication SDK to build a trust-first dating experience from the ground up. We also learned how to turn a full Figma design system into a working frontend with high fidelity, keeping the UI consistent across multiple flows instead of just being static designs.

On the algorithm side, we combined rule-based systems with large language models like Google Gemini to get a more nuanced view of compatibility. This pushed us to think carefully about prompt design, how we weight different signals, and how to translate subjective traits like values, communication style, and emotional patterns into structured scores the system can actually use. We also saw how even small changes in the balance between AI-driven signals and deterministic rules can noticeably change match outcomes.


What’s Next

Push Notifications: Notify users when they get a new match, message, or call using Firebase Cloud Messaging or a similar service.

Smarter Matching (AI + ML): We currently use a hybrid rule-based and Google Gemini–assisted scoring system, and in the future, we plan to fine-tune models on anonymized behavioral data (conversation length, stage decisions, and interaction patterns) to further improve match accuracy and long-term compatibility prediction.

Flexibility on Conversation Times: Currently, the maximum amount of time two parties have to first contact each other is an hour, but in the future, we would like to consider more flexible timing constraints.

Built With

Share this project:

Updates