Where paths were meant to cross.
The Problem · How It Works · Architecture · Getting Started · License
Every social app asks the same question: "Who do you want to meet?"
And every time, we lie. We describe who we think we want — not who we actually resonate with. Dating apps reduced connection to a swipe. Meetup reduced it to a calendar event. LinkedIn reduced it to a transaction.
But think about your closest friendships. How did they actually start?
"You too? I'm always here on Tuesday mornings."
"Wait, you also read at this cafe every weekend?"
"We've been at this trail head at the same time for months."
The best connections in your life weren't matched by an algorithm. They were coincidences that felt like destiny.
Serendipity Maps doesn't find people for you. It engineers the conditions where you find each other.
Serendipity Maps is a location-based friendship platform that treats human connection as a spatial design problem, not a search problem.
Instead:
- AI learns your behavioral fingerprint — where you go, when you go, how you move, what vibes you gravitate toward — all passively, all on-device.
- An overlap engine calculates serendipity windows — those precise moments when two behaviorally compatible people are about to share the same space.
- An ambient signal system nudges you — not with a notification, but with a subtle feeling. A screen glow. A proximity hint. Something that feels like intuition.
- After you naturally cross paths, a Serendipity Card reveals what you share — a coincidence score, overlapping patterns, connection potential.
You don't choose who to meet. The city chooses for you.
┌─────────────────────────────────────────────────────────────┐
│ │
│ You walk into a coffee shop on a random Tuesday morning │
│ · │
│ ▼ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ Behavioral │───▶│ Overlap Engine │ │
│ │ Fingerprint │ │ detects window │ │
│ │ (on-device) │ │ with someone │ │
│ └─────────────────┘ │ compatible │ │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Ambient Signal │ │
│ │ gentle nudge │ │
│ │ (not a ping) │ │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────┐ │
│ │ You notice someone. They notice you. │ │
│ │ A conversation happens. Naturally. │ │
│ └──────────────────┬───────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Serendipity Card reveals: │ │
│ │ - 87% coincidence score │ │
│ │ - You both come here every Tuesday │ │
│ │ - Shared: indie bookstores, morning trails │ │
│ │ - This was your 3rd near-miss this month │ │
│ └──────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
| # | Module | What It Does |
|---|---|---|
| 1 | Behavioral Fingerprinting | AI passively learns your spatial patterns, timing rhythms, energy cycles, and vibe preferences — entirely on-device, zero data leaves your phone |
| 2 | Overlap Engine | Calculates real-time "serendipity windows" — the moments when two behaviorally compatible humans are about to share the same physical space |
| 3 | Ambient Signal | Subtle proximity hints (screen glow, distance simulation) that feel like intuition, not another notification to dismiss |
| 4 | Serendipity Card | Post-encounter reveal: coincidence score, shared behavioral patterns, missed connections history, and connection potential |
| 5 | Privacy Controls | Ghost mode, selective visibility, invisible zones (ex: workplace, therapist's office), on-device processing, differential privacy guarantees |
src/
├── app/
│ ├── layout.tsx # Root layout — dark ethereal theme
│ ├── page.tsx # Composes all 11 interactive sections
│ └── globals.css # 12+ keyframe animations, glassmorphism system
│
├── components/
│ └── serendipity/
│ ├── PathCanvas.tsx # Hero — animated Bezier paths crossing a star field
│ ├── MapCanvas.tsx # Interactive Leaflet/OSM map with proximity layers
│ └── sections/
│ ├── HeroSection.tsx # Landing — animated path-crossing canvas
│ ├── HowItWorksSection.tsx # 6-step interactive walkthrough
│ ├── BehavioralFingerprintSection.tsx # AI pattern learning visualization
│ ├── SerendipityWindowsSection.tsx # Real map with near-miss zones
│ ├── EncounterSignalSection.tsx # Phone mockup, proximity rings
│ ├── SerendipityCardSection.tsx # Post-encounter card reveal
│ ├── PhilosophySection.tsx # Comparison vs Tinder/Bumble/Meetup
│ ├── TemporalLayersSection.tsx # Friendship intent layers
│ ├── PrivacySection.tsx # Working toggles, zone management
│ ├── ExitVelocitySection.tsx # 4 design principles
│ ├── MetricsSection.tsx # Success metric cards
│ └── FooterSection.tsx
│
├── store/
│ └── useAppStore.ts # Zustand — patterns, windows, encounters, privacy
│
└── lib/
└── utils.ts # Shared utilities
| Tinder / Bumble | Meetup / Eventbrite | Bumble BFF | Slowly / Penpal | Serendipity Maps | |
|---|---|---|---|---|---|
| Discovery | Swipe profiles | Browse events | Swipe friends | Text-based | Spatial overlap |
| Intent | Explicit (dating) | Explicit (interest) | Explicit (friends) | Explicit (letters) | Implicit — revealed after |
| Privacy | Public profile | Public RSVP | Public profile | Anonymous | Differential privacy, on-device |
| Connection | Chat first | Schedule first | Chat first | Write first | Meet first, card later |
| Friction | High (decision fatigue) | Medium (planning) | Medium (swiping) | Low (but slow) | Near-zero (ambient) |
| Authenticity | Low (curated) | Medium | Low (curated) | Medium | High (unscripted) |
| Element | Value |
|---|---|
| Theme | Dark ethereal with glassmorphism |
| Amber | #D4A574 — warmth, sunrise, possibility |
| Aurora | #B8A9C9 — mystery, twilight, wonder |
| Teal | #7CB9A8 — calm, flow, trust |
| Blue | #8FB8DE — depth, distance, longing |
| Rose | #C9A9B8 — softness, humanity, connection |
| Animations | Float, pulse-glow, drift, path-draw, shimmer, encounter-pulse, breathe, card-reveal, star-twinkle, gentle-spin |
| Typography | Geist Sans + Geist Mono |
# Clone the repo
$ git clone https://github.com/modarresi1913/serendipity-maps.git
$ cd serendipity-maps
# Install dependencies
$ npm install
# Set up the database
$ npx prisma generate
$ npx prisma db push
# Start the dev server
$ npm run devOpen http://localhost:3000 and scroll through the experience.
1. Zero-Choice Interface
The user never picks, swipes, or selects. The system presents zero decisions. Connection emerges from spatial coincidence, not choice paralysis.
2. Invisibility by Default
The product should feel like it's not there. No feed, no inbox, no dashboard. Just life — slightly more magical.
3. Post-Hoc Revelation
Information about compatibility is revealed after an encounter, not before. This prevents confirmation bias and preserves the authenticity of the moment.
4. Graceful Decay
Every nudge has a natural expiration. Unacted signals dissolve. The system never pressures — it suggests, then steps back.
| Metric | Target | Why It Matters |
|---|---|---|
| Serendipity Rate | >40% of nudges lead to encounters | Measures if overlaps feel natural, not forced |
| Friendship Conversion | >25% of encounters become lasting connections | The ultimate proof of behavioral compatibility |
| Privacy Comfort Score | >4.5 / 5.0 | If users don't feel safe, nothing else matters |
| Weekly Retention | >60% after 3 months | Ambient products live or die by quiet consistency |
┌─────────────────────────────────────────────────────────┐
│ YOUR PHONE ONLY │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Behavioral │ │ Spatial │ │ Differential │ │
│ │ Fingerprint │ │ Patterns │ │ Privacy Layer│ │
│ │ (encrypted) │ │ (on-device) │ │ (epsilon ≤ 1)│ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └────────────────┬┘──────────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ Only │ │
│ │ anonymous, │ │
│ │ noisy │ │
│ │ signals │ │
│ │ leave here │ │
│ └──────┬──────┘ │
└──────────────────────────┼──────────────────────────────┘
│
▼
┌─────────────────┐
│ Overlap Engine │
│ (server-side) │
│ sees only │
│ fuzzy tokens │
└─────────────────┘
- Ghost Mode — Full invisibility. You vanish from all calculations.
- Invisible Zones — Add places where you never want to be detected (workplace, therapist's office, home).
- Selective Visibility — Control which pattern dimensions are shared (timing yes, location no).
- On-Device Processing — Raw location data never leaves your device. Only differentially-private signals are transmitted.
- Behavioral Fingerprinting visualization
- Serendipity Windows with interactive map (Leaflet/OSM)
- Ambient Signal phone mockup with proximity animation
- Serendipity Card post-encounter reveal
- Privacy Controls (working toggles, zone management)
- Dark ethereal design system with glassmorphism
- Real-time overlap calculation backend
- On-device ML model for pattern extraction
- Differential privacy implementation
- Native iOS/Android companion (ambient signal delivery)
- Serendipity Card sharing and connection flow
- Multi-city support with pattern transfer
This is an open experiment in rethinking how humans connect. Ideas, PRs, and brutal honesty are all welcome.
- Fork it
- Create your branch (
git checkout -b feature/your-idea) - Commit your changes (
git commit -m 'Add something serendipitous') - Push to the branch (
git push origin feature/your-idea) - Open a Pull Request
MIT — Build something beautiful with it.
Built with the belief that the best connections are the ones you didn't plan.