Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenDating

Privacy-focused dating on an open protocol.
An Expo React Native reference client for the OpenDating protocol.

License MIT Expo SDK 57 TypeScript strict React Native 0.86 CI status Platforms iOS Android


Release status: approved for iOS and Android launch. See Release Status for verified capabilities, and the 1.0 Execution Roadmap for the path through GA.

What is OpenDating?

OpenDating is an early dating client built around data minimization, coarse location, private service requests, and end-to-end encrypted direct messages. It currently connects to services operated by OpenDating on Cloudflare; federation and independent providers are post-GA work.

Under the hood, OpenDating uses Nostr as a protocol building block. The current discovery, matching, moderation, media, and delivery services are first-party OpenDating services; interchangeable independent providers are post-GA work.

OpenDating Mobile is the first reference client for the OpenDating protocol (v0.1).


Why OpenDating?

Traditional Dating Apps OpenDating
Your data lives on their servers Your identity is a key you own
They track your exact location Only ~5 km coarse area shared
They can read your messages End-to-end encrypted (NIP-44)
Profile portability varies by provider An open profile format and export are planned for post-GA federation; they are not available in this release
Advertising and data monetization may be part of the model No advertising or tracking-based monetization in the current build
Account portability varies Portable identity is a protocol design goal; interoperable provider transfer is planned post-GA and is not available today

Features

Discovery

  • Photo-first swipe deck — Tinder-style cards with Reanimated gestures
  • Privacy-first location — Only a 5-character geohash (~5 km) ever leaves your device
  • Customizable filters — Age range, distance, gender, relationship intent
  • Daily quotas — Prevents profile scraping and enumeration

Messaging

  • End-to-end encrypted — NIP-17 direct messages via NIP-44 encryption
  • Match-only — The relay enforces that only matched users can message each other
  • No read receipts — No typing indicators, no online status

Safety

  • Block — Takes effect locally immediately, enforced server-side, never notified
  • Unmatch — Removes the match without explanation
  • Report — Encrypted to moderation service, with optional message evidence
  • Private by default — Likes, blocks, and reports are never public

Platform

  • iOS — Feels like a native SwiftUI app (SF Symbols, native sheets, continuous corners)
  • Android — Feels like a native Material 3 app (Material Symbols, tonal surfaces)
  • Dark mode — Full light/dark/system theme support
  • Accessibility — VoiceOver, TalkBack, Dynamic Type, Reduce Motion

Architecture

┌──────────────────────────────────────────────┐
│                  Expo UI                     │  ← Native components
├──────────────────────────────────────────────┤
│               App Screens                    │  ← Expo Router
├──────────────────────────────────────────────┤
│              Feature Hooks                   │  ← Domain logic
├──────────────────────────────────────────────┤
│           OpenDatingClient                   │  ← Protocol facade
├──────────────────┬───────────────────────────┤
│ opendating-proto │   NDK core                │  ← Infrastructure
│ (crypto, types)  │   (relay, events, auth)   │
├──────────────────┴───────────────────────────┤
│                  Nostr                       │
├──────────────────────────────────────────────┤
│    OpenDating Relay v0.1 (Cloudflare)        │
└──────────────────────────────────────────────┘

The mobile app does not depend on backend implementation code. Integration uses the published [email protected] registry artifact (installed through the ^0.1.0 range), advertised service capabilities, and the OpenDating protocol specification. Protocol 0.1 is experimental; package 0.1.1 is pending registry publication and verification.


Quick Start

# Clone
git clone https://github.com/jongan69/opendating-mobile.git
cd opendating-mobile

# Install
cp .env.example .env
npm ci

# Run
npm start                # Expo dev server
npm run ios              # iOS simulator
npm run android          # Android emulator

Quality Commands

npm run typecheck        # TypeScript strict — must pass with 0 errors
npm run lint             # ESLint — must pass with 0 errors
npm test                 # Jest test suite

Documentation

Document Description
ARCHITECTURE Layer diagram, data flow, design decisions
DESIGN Visual principles, color system, typography, motion
SECURITY Key storage, encryption, auth, trust model
PRIVACY What's shared, what's not, limitations, controls
HANDOFF Repository boundary, access inventory, quality gates, and continuation order
RELEASE-STATUS Verified release behavior and current production blockers
ROADMAP-1.0 Gated path from release containment through GA and federation
PROTOCOL-INTEGRATION All 20+ protocol operations, request lifecycle, error handling
MOBILE-V0.1-COMPLETE Release report with full feature inventory
CONTRIBUTING Development workflow, code style, privacy rules
CHANGELOG Version history

Tech Stack

Category Technology Version
Framework Expo SDK 57
Runtime React Native 0.86
Language TypeScript (strict) 6.0
Navigation Expo Router ~57
UI Components @expo/ui ~57
Nostr Client @nostr-dev-kit/ndk ^2.15
Protocol opendating-protocol ^0.1.0 (registry: 0.1.0; 0.1.1 pending)
Gestures react-native-gesture-handler ~2.32
Animation react-native-reanimated ^4.5
Images expo-image ~57
Secure Storage expo-secure-store ^57
Location expo-location ^57
Photos expo-image-picker ^57
Haptics expo-haptics ^57
SVG react-native-svg latest

Contributing

OpenDating Mobile is open source and welcomes contributions. See CONTRIBUTING.md for the development workflow, code style guide, and privacy rules.

Before submitting a PR:

  • npm run typecheck must pass (0 errors)
  • npm run lint must pass (0 errors)
  • No backend implementation imports
  • No hardcoded service pubkeys
  • No raw GPS, nsec, or decrypted message plaintext in new code

Related Projects

  • OpenDating — The protocol specification, backend relay, and opendating-protocol npm package
  • Nostr — The decentralized protocol OpenDating is built on

License

MIT © OpenDating


Built with ❤️ for privacy, portability, and genuine human connection.

About

Privacy-first decentralized dating app — Expo React Native reference client for the OpenDating protocol on Nostr. Tinder-quality UX with end-to-end encrypted messaging, coarse location privacy, and self-sovereign identity.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages