Complete Database Schema Reference

users Table

  • name: string (optional)
  • image: string (optional)
  • email: string (optional)
  • emailVerificationTime: number (optional)
  • phone: string (optional)
  • phoneVerificationTime: number (optional)
  • isAnonymous: boolean (optional)
  • hashedPassword: string (optional)
  • token: string (optional)
  • gender: string (optional) - ['male', 'female', 'non-binary']
  • sexualOrientation: string (optional)
  • interestedIn: string[] (optional)
  • age: number (optional)
  • birthDate: number (timestamp, optional)
  • latitude: float64 (optional)
  • longitude: float64 (optional)
  • city: string (optional)
  • country: string (optional)
  • ageRangeMin: number (optional)
  • ageRangeMax: number (optional)
  • maxDistancePreference: number (km, optional)
  • interests: string[] (optional)
  • languages: string[] (optional)
  • relationshipType: string (optional) - ['casual', 'serious', 'friendship']
  • longDistanceRelationship: string (optional)
  • profileCompleteness: number (%, optional)
  • matchabilityScore: number (optional)
  • isActive: boolean (optional)
  • lastActiveTimestamp: number (optional)
  • isVerified: boolean (optional)
  • showInSearchResults: boolean (optional)
  • discoveryPreferences: object (optional) - {
    • showMen: boolean
    • showWomen: boolean
    • showNonBinary: boolean
    }

messages Table

  • body: string (required)
  • userId: ID reference to users (required)

partnerConnections Table

  • userId: ID (users) (required)
  • partnerId: ID (users) (optional)
  • connectionCode: string (required)
  • status: string - ['pending', 'connected', 'expired']
  • initiatorUserId: ID (users) (optional)
  • createdAt: number (required)
  • expiresAt: number (required)
  • targetUserId: ID (users) (optional)

moods Table

  • userId: ID (users) (required)
  • mood: string (required)
  • reason: string (optional)
  • images: string[] (required)
  • note: string (optional)
  • createdAt: number (required)
  • moodIntensity: number (optional)
  • tags: string[] (optional)
  • visibilitySettings: string (optional)

habits Table

  • userId: ID (users) (required)
  • title: string (required)
  • description: string (optional)
  • frequency: string (required)
  • streak: number (required)
  • longestStreak: number (required)
  • lastCheckedIn: number (timestamp, required)

events Table

  • userId: ID (users) (required)
  • title: string (required)
  • description: string (optional)
  • startDate: string (ISO, required)
  • endDate: string (ISO, required)
  • startTime: string (required)
  • endTime: string (required)
  • participants: ID[] (users) (optional)
  • eventType: string (required) - ['date', 'meeting', 'reminder', 'traveling', 'task', 'other']
  • importanceLevel: string - ['Low', 'Medium', 'High']
  • notify: string (optional)
  • location: string (optional)

memories Table

  • userId: ID (users) (required)
  • title: string (required)
  • description: string (optional)
  • date: string (ISO, required)
  • location: string (optional)
  • latitude: number (optional)
  • longitude: number (optional)
  • images: string[] (required)
  • memoryType: string (optional)
  • createdAt: string (required)

questions Table

  • category: string (required)
  • subcategory: string (optional)
  • content: string (required)

questionAnswers Table

  • userId: ID (users) (required)
  • questionId: ID (questions) (required)
  • answer: string (required)

gameStates Table

  • userId: ID (users) (required)
  • partnerId: ID (users) (required)
  • gameType: string (required)
  • currentState: any (required)
  • lastUpdated: number (timestamp, required)

notifications Table

  • userId: ID (users) (required)
  • type: string (required)
  • content: string (required)
  • isRead: boolean (required)
  • createdAt: number (timestamp, required)

images Table

  • userId: string (required)
  • url: string (required)
  • key: string (required)
  • title: string (optional)
  • description: string (optional)
  • createdAt: string (optional)
  • groupId: string (optional)

Schema Notes:

  • All ID fields reference Convex document IDs
  • Timestamps are stored as milliseconds since epoch
  • Date fields without times use ISO 8601 strings
  • Arrays are represented as JavaScript arrays
  • Optional fields may be null or undefined
  • v.float64() fields use 64-bit floating point numbers
  • Indexes are maintained for query optimization