PropSpot is a premium, modern mobile application for property search and real estate listing management. Built on top of React Native and Expo (v54), PropSpot features a seamless user experience, secure authentication, and a robust real-time backend powered by Clerk and Supabase.
- π Secure Authentication: Integrated authentication flow (Sign In, Sign Up, and Password Reset) managed by Clerk.
- π Automatic User Syncing: Automatic synchronization of user metadata from Clerk to a dedicated Supabase
usersdatabase table. - π Advanced Search & Filtering: Robust search functionality with a dynamic filter modal (price range, property type, room count, custom amenities, etc.).
- π Location Services: Access device location permissions via
expo-locationto set property coordinates. - πΌοΈ Media Library Integration: Support for selecting and uploading high-quality images from the device gallery using
expo-image-picker. - β‘ State Management: Clean, lightweight global state stores for filters and user sessions powered by Zustand.
- πΊοΈ Maps Integration: Interactive map rendering for viewing properties dynamically in geo-space.
- π± NativeWind Styling: Sleek, responsive, and customizable UI styled entirely with Tailwind CSS utility classes via NativeWind v4.
- Framework: React Native & Expo (SDK 54)
- Routing: Expo Router (File-based routing using tabs & stack navigation)
- Authentication: Clerk Expo
- Database & Backend: Supabase (PostgreSQL Database, JS client SDK)
- Styling: Tailwind CSS / NativeWind v4
- State Management: Zustand
- Animations & Gestures:
react-native-reanimated&react-native-gesture-handler
βββ app/ # Expo Router navigation configuration
β βββ (auth)/ # Authentication screens (Sign In, Sign Up, Reset Password)
β βββ (root)/ # App shell (verifies auth and syncs user profiles)
β β βββ (tabs)/ # Core tab-bar views (Home, Search, Create, Saved, Profile)
β β βββ property/ # Dynamic property detail screen & Interactive Map view
β βββ _layout.tsx # Clerk Provider setup
βββ components/ # Reusable UI components (FeaturedCard, FilterModal, PropertyCard)
βββ hooks/ # Custom React Hooks (Supabase client, Saved properties, Sync hook)
βββ store/ # Zustand global state configurations (filterStore, userStore)
βββ types/ # Typescript interfaces (IProperty, User details)
βββ utils/ # Supabase clients and helper functions
βββ DEPLOYMENT.md # Compilation, packaging, and distribution instructions
βββ README.md # Project documentation (this file)
Ensure you have the following installed on your developer machine:
- Node.js (v18 or higher recommended)
- npm or yarn
- Expo Go app installed on your physical test device (Android or iOS), or configured Emulators/Simulators.
-
Clone the Repository and navigate to the project directory:
cd Property-Management-React-Native -
Install Project Dependencies:
npm install
-
Configure Environment Variables: Create a local
.envfile in the root directory. You can copy the template from.env.example:cp .env.example .env
Open the newly created
.envfile and populate it with your active Clerk and Supabase credentials:EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_... EXPO_PUBLIC_SUPABASE_URL=https://...supabase.co EXPO_PUBLIC_SUPABASE_KEY=sb_publishable_...
-
Start the Development Server:
npx expo start
- Press
ato run on an Android emulator/device. - Press
ito run on an iOS simulator/device. - Scan the terminal QR code with Expo Go on your physical device.
- Press
For building a standalone production binary (Android .apk or iOS .ipa), please refer to the detailed instructions in DEPLOYMENT.md.
Note
Storing publishable environment variables inside eas.json is recommended for simple cloud builds, but ensure you keep secrets secure if the project repository is made public.
This project is private and proprietary.