Timbr is an iOS app for discovering homes, rentals, and investment properties through a swipe-based experience. After a short onboarding flow, users get a personalized deck of listings powered by real estate data, with matches and preferences synced via Firebase.
- Swipe deck — Browse properties with card-style gestures (like / pass)
- Onboarding — Four-step setup: intent, property types, budget, and location
- Google sign-in — Authentication and account sync through Firebase Auth
- Saved listings — Heart properties to review later
- Profile & preferences — View and adjust search criteria stored in Firestore
- Smart property fetching — HasData Zillow listings with Firestore caching, rate limiting, and monthly usage caps
| Layer | Technology |
|---|---|
| UI | SwiftUI |
| Auth | Firebase Auth + Google Sign-In |
| Data | Cloud Firestore |
| Listings | HasData Zillow Listing API |
| Dependencies | Swift Package Manager (Firebase iOS SDK, GoogleSignIn) |
- macOS with Xcode (project targets iOS 26.1 per
timbr.xcodeproj) - An Apple Developer account (for device testing and signing)
- A Firebase project with iOS app configured
- A HasData API key (free tier: 1,000 requests/month)
git clone https://github.com/<your-org>/timbr.git
cd timbr
open timbr.xcodeproj- Create or use an existing Firebase project.
- Add an iOS app with bundle ID
priyaandani.timbr(or update the bundle ID in Xcode to match your Firebase app). - Download
GoogleService-Info.plistand place it in thetimbr/folder (replacing the existing file if needed). - Enable Google as a sign-in provider in Firebase Authentication.
- Configure the reversed client ID URL scheme in
Info.plistto match yourGoogleService-Info.plist(seeCFBundleURLSchemes).
Set your HasData API key in PropertyAPIService.swift (see PropertyAPIService initializer). For setup details, caching behavior, and usage limits, see HASDATA_API_SETUP.md.
Note: Do not commit production API keys or Firebase secrets to a public repository. Use environment-specific config or Xcode build settings for shared repos.
- Select the timbr scheme in Xcode.
- Choose a simulator or connected device.
- Press Run (⌘R).
Swift Package Manager dependencies resolve automatically on first build.
Splash → Welcome (sign up / log in)
↓
Onboarding (if new or incomplete)
↓
Main tabs: Home · Saved · Profile
Onboarding steps
- Intent (buy, rent, invest, design inspiration, sell soon)
- Property types
- Budget range
- Location
Preferences are saved to Firestore under users/{uid}.
timbr/
├── timbrApp.swift # App entry, Firebase init, tab bar styling
├── ContentView.swift # Welcome, auth, onboarding routing
├── MainTabView.swift # Tab container
├── SwipeView.swift # Property swipe deck
├── SwipeCardView.swift # Card UI
├── SavedView.swift # Saved properties
├── ProfileView.swift # User profile & settings
├── Onboarding*.swift # Onboarding flow views & manager
├── AuthManager.swift # Google Sign-In
├── PropertyAPIService.swift # HasData API client
├── PropertyService.swift # Firestore cache & property loading
├── Property.swift # Property model
├── UserPreferences.swift # Onboarding preferences model
└── Assets.xcassets/ # Images, colors, app icon
- HASDATA_API_SETUP.md — HasData integration, caching, and usage tracking
- API_INTEGRATION_GUIDE.md — Alternative real estate APIs and architecture notes
The app requests location when in use to personalize nearby listings (NSLocationWhenInUseUsageDescription in Info.plist).
No license file is included in this repository. Add one if you plan to open-source or distribute the project.