A peer-to-peer rental marketplace built with React Native and Expo
Rento is a comprehensive mobile application that facilitates peer-to-peer item rentals, connecting people who want to rent out their belongings with those seeking temporary access to items. Whether you're a homeowner with tools sitting idle or a student needing equipment for a project, Rento bridges the gap in the sharing economy.
- Secure user registration and authentication via Supabase Auth
- Comprehensive profile management with avatar support
- Dual-mode functionality (renter and lender roles)
- Device-specific push notification registration
- Create detailed rental listings with rich metadata
- Multi-image upload with cloud storage integration
- Flexible pricing and availability scheduling
- Category-based organization and filtering
- Location-based discovery with geospatial data
- Multiple pickup methods (owner delivery, renter pickup, courier)
- Intuitive booking request workflow
- Real-time status tracking (Pending β Confirmed β Completed)
- Integrated messaging for booking coordination
- Comprehensive booking history and management
- Real-time one-to-one messaging between users
- Conversation threading with read receipts
- Unread message badges and notifications
- Message history persistence
- Save items to personal wishlist
- Browse available listings with smart filtering
- Location-based item discovery
- Category-based exploration
- In-app notification system for key events
- Push notification support for mobile engagement
- Customizable notification preferences
- Real-time updates for booking status changes
- React Native: Cross-platform mobile development
- Expo: Development platform and build system
- Expo Router: File-based navigation with TypeScript support
- TypeScript: Static type checking and enhanced development experience
- Lucide React Native: Consistent iconography
- Supabase: Backend-as-a-Service providing:
- PostgreSQL database with real-time subscriptions
- Authentication and user management
- File storage for images and media
- Row-level security (RLS) policies
- Optional GraphQL endpoint
- Apollo Client: GraphQL client with caching (configured)
- Supabase Client: Direct database interactions and real-time subscriptions
- Hybrid approach allowing flexibility between REST and GraphQL
- iOS: Native iOS app with tablet support
- Android: Native Android app with adaptive icons
- Web: Progressive Web App (PWA) with Metro bundler
- Node.js (version 18 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator (for iOS development) or Android Studio (for Android development)
-
Clone the repository
git clone https://github.com/salarkhannn/rento.git cd rento -
Install dependencies
npm install
-
Environment setup
Create a
.envfile in the root directory:EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Start the development server
npm start
-
Run on your preferred platform
# iOS Simulator npm run ios # Android Emulator npm run android # Web browser npm run web
- Create a new project in Supabase
- Run the database migrations using the provided schema files
- Configure Row Level Security (RLS) policies for data protection
- Set up the storage bucket named
rental-imagesfor file uploads
rento/
βββ app/ # Expo Router pages and navigation
β βββ (tabs)/ # Tab-based navigation screens
β βββ auth/ # Authentication flow
β βββ conversation/ # Messaging interface
β βββ edit-listing/ # Listing management
β βββ guards/ # Access control components
β βββ utils/ # Utility functions
βββ assets/ # Static assets (images, fonts, icons)
βββ components/ # Reusable UI components
βββ constants/ # App-wide constants and configurations
βββ lib/ # Core business logic and integrations
β βββ apollo.ts # GraphQL client configuration
β βββ supabase.ts # Supabase client and type definitions
β βββ queries.ts # Database queries and mutations
β βββ notifications.ts # Push notification handling
βββ ui/ # Design system components
β βββ components/ # UI primitives
β βββ theme.ts # Theme configuration
β βββ typography.ts # Typography system
βββ supabase/ # Supabase configuration files
The project uses Jest and React Test Renderer for unit and integration testing:
# Run tests in watch mode
npm test
# Run tests once
npm run test:ciTest files are located in components/__tests__/ directory and follow the naming convention *.test.js.
# Create development build for iOS
eas build --profile development --platform ios
# Create development build for Android
eas build --profile development --platform android# Build for app stores
eas build --profile production --platform all# Build for web deployment
npm run web:build
# Preview web build locally
npm run web:serveThe application requires the following environment variables:
| Variable | Description | Required |
|---|---|---|
EXPO_PUBLIC_SUPABASE_URL |
Supabase project URL | β |
EXPO_PUBLIC_SUPABASE_ANON_KEY |
Supabase anonymous key | β |
- Supports tablets and phones
- Background app refresh for notifications
- User tracking description for privacy compliance
- Adaptive app icon support
- Notification permissions
- Keyboard handling optimizations
We welcome contributions to Rento! Please follow these guidelines:
- Fork the repository and create your feature branch
- Write comprehensive tests for new functionality
- Follow the existing code style and TypeScript conventions
- Update documentation for any API changes
- Submit a pull request with a clear description of changes
# Create a feature branch
git checkout -b feature/amazing-feature
# Make your changes and test thoroughly
npm test
# Commit with conventional commit messages
git commit -m "feat: add amazing feature"
# Push to your fork and submit a pull request
git push origin feature/amazing-featureThis project is licensed under the MIT License - see the LICENSE file for details.
- Expo Team for the excellent development platform
- Supabase for providing comprehensive backend services
- React Native Community for continuous innovation
- Contributors who help improve this project
For support, please:
- π§ Email: [email protected]
- π Report issues on GitHub Issues
- π¬ Join our community discussions
Built with β€οΈ by the Rento team
β Star us on GitHub β’ π€ Contribute β’ π Get Support