Parallel.me — Project Summary

Parallel is an anonymous, ephemeral matchmaking platform designed to connect people based on shared emotional states rather than standard profiles. Users submit a brief, raw "diary entry" about how they are feeling right now, and the system uses AI vector search to instantly find the one person on the platform who feels exactly the same.


Inspiration

Modern social media and networking apps are built to connect people superficially—through filtered photos, curated bios, and algorithmic echo chambers. We wanted to build the absolute antithesis of a standard "dating app." Our inspiration came from the profound yet fleeting realization that out of the 8 billion people on Earth, someone out there is feeling the exact same specific emotion, anxiety, or bizarre thought as you at this exact moment. We wanted to build a bridge between those two strangers so they could briefly travel "in parallel," united purely by raw, unfiltered vulnerability.

What it does

Parallel requires users to write a short, honest "diary entry" describing their current mental state (e.g., "I feel like I'm falling behind my peers, but I don't even know what race we're running").

  • The app immediately processes the emotional and semantic gravity of what you wrote using Google Gemini and searches a global Vector Database to instantly find a stranger who wrote something remarkably similar.
  • When a match is found, an AI synthesizes both entries to generate a custom, hyper-specific Icebreaker question bridging the two experiences.
  • It then drops both users into a beautifully animated, anonymous chat room. Users can progressively de-anonymize by broadcasting "identity chips" (like a first name or city), but after exactly 24 hours, the chat permanently self-destructs and the /sunset screen is triggered.

How we built it

Parallel is built using a modern, decoupled tech stack optimized for atmosphere, speed, and privacy.

  • The Frontend: Built on Next.js 16 (App Router) and TypeScript. We relied heavily on Framer Motion and Tailwind CSS to build a highly atmospheric, emotionally resonant UI. The app features violent visual flares during matches, "breathing" ambient orbits during loading screens, and a hyper-illuminated "Sunny Parchment" Light Theme.
  • The Brain (Backend): We used a high-performance FastAPI (Python) server. We explicitly utilize Lava as our backend model provider, routing all our AI inferencing through their robust infrastructure. Every diary entry is run through Google Gemini (text-embedding-004) via Lava to generate a high-dimensional vector representing its semantic weight.
  • The Matchmaker: These vectors are pushed into MongoDB Atlas, where we use cosine-similarity Vector Search to instantly find the closest active entry. We then pass both texts back to Gemini (gemini-1.5-flash) via Lava to synthesize the custom Icebreaker.
  • The Ephemeral Chat: To guarantee absolute privacy, the chat messaging never touches our backend. We utilized Supabase Realtime Broadcast over WebSockets to beam messages purely peer-to-peer. Once the 24-hour timer expires, the volatile WebSocket channel is permanently severed.
  • Auth: Managed entirely through the Auth0 SDK using strict server-side JWT session management.

Challenges we ran into

  • Architecting True Ephemeral Chat: It's surprisingly difficult to build a chat app that doesn't save data. Bypassing traditional database storage and wiring up Supabase Broadcast channels strictly for P2P messaging required tight WebSocket state management and race-condition handling on the React side.
  • Balancing Aesthetics: We spent considerable time dialing in the visual atmosphere. Creating a "moody, deep" app that isn't visually depressing was a massive challenge. We iterated through multiple color palettes before landing on a high-contrast Light Theme (Parchment and Dark Espresso) that uses sheer CSS drop-shadow effects and complex mix-blend layering to make the UI feel luminous and alive.
  • Audio Policies: Getting the Web Audio API to play gentle, programmatic "bloop" notifications for incoming and outgoing chat messages without hitting strict browser autoplay roadblocks required careful lifecycle management.

Accomplishments that we're proud of

  • The Seamless AI Pipeline: The speed at which the app takes an unstructured emotional text, vectorizes it, queries MongoDB Atlas, finds a match, and generates a personalized Gemini prompt through Lava, all while the user watches a smooth 2-second loading animation, feels like magic.
  • The UI/UX Experience: Utilizing Framer Motion physics to make the match screen feel impactful. The UI acts as much as an interactive art piece as it does a functional app.
  • The "Sunset" Mechanic: Fully committing to the 24-hour ephemeral model without compromises. There are no chat histories or save buttons. It forces users to be incredibly present.

What we learned

  • The vast power of MongoDB Vector Search indices and how semantic AI embeddings map complex emotional concepts significantly better than any keyword algorithm ever could.
  • Advanced React Server Components strategies in Next.js, particularly balancing server-side API auth (via Auth0) with client-side interactive polling mechanisms.
  • The mechanics of rendering programmatic oscillators via the Web Audio API without needing external sound files.

What's next for Parallel.me

  • Voice Capabilities: Integrating Gemini Audio to allow users to speak their diary entries naturally rather than typing them, enabling sentiment analysis on tone of voice.
  • Proximity Galaxies: Exploring geolocation features to see a glowing, blurred heatmap of people feeling similar emotions in your physical city.
  • Progressive De-anonymization: Adding "Identity Chips" so users can gradually choose to reveal deeper aspects of themselves inside the 24-hour window (e.g., syncing their active Spotify track, sharing a single photo, or revealing their Instagram handle).

Built With

  • auth0
  • fastapi
  • framer-motion
  • google-gemini-api
  • mongodb-atlas-vector-search
  • next.js
  • python
  • supabase-realtime
  • tailwind-css
  • typescript
Share this project:

Updates