Skip to content

salarkhannn/rento

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

86 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rento

A peer-to-peer rental marketplace built with React Native and Expo

React Native Expo TypeScript Supabase

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.

✨ Features

πŸ” Authentication & Profiles

  • 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

πŸ“¦ Listing Management

  • 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)

🀝 Booking System

  • Intuitive booking request workflow
  • Real-time status tracking (Pending β†’ Confirmed β†’ Completed)
  • Integrated messaging for booking coordination
  • Comprehensive booking history and management

πŸ’¬ Communication

  • Real-time one-to-one messaging between users
  • Conversation threading with read receipts
  • Unread message badges and notifications
  • Message history persistence

❀️ Wishlist & Discovery

  • Save items to personal wishlist
  • Browse available listings with smart filtering
  • Location-based item discovery
  • Category-based exploration

πŸ”” Notifications

  • In-app notification system for key events
  • Push notification support for mobile engagement
  • Customizable notification preferences
  • Real-time updates for booking status changes

πŸ—οΈ Architecture

Frontend Stack

  • 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

Backend & Infrastructure

  • 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

Data Layer

  • Apollo Client: GraphQL client with caching (configured)
  • Supabase Client: Direct database interactions and real-time subscriptions
  • Hybrid approach allowing flexibility between REST and GraphQL

πŸ“± Supported Platforms

  • iOS: Native iOS app with tablet support
  • Android: Native Android app with adaptive icons
  • Web: Progressive Web App (PWA) with Metro bundler

πŸš€ Quick Start

Prerequisites

  • Node.js (version 18 or higher)
  • npm or yarn
  • Expo CLI
  • iOS Simulator (for iOS development) or Android Studio (for Android development)

Installation

  1. Clone the repository

    git clone https://github.com/salarkhannn/rento.git
    cd rento
  2. Install dependencies

    npm install
  3. Environment setup

    Create a .env file in the root directory:

    EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
    EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
  4. Start the development server

    npm start
  5. Run on your preferred platform

    # iOS Simulator
    npm run ios
    
    # Android Emulator
    npm run android
    
    # Web browser
    npm run web

Database Setup

  1. Create a new project in Supabase
  2. Run the database migrations using the provided schema files
  3. Configure Row Level Security (RLS) policies for data protection
  4. Set up the storage bucket named rental-images for file uploads

πŸ—‚οΈ Project Structure

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

πŸ§ͺ Testing

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:ci

Test files are located in components/__tests__/ directory and follow the naming convention *.test.js.

πŸ“¦ Build & Deployment

Development Builds

# Create development build for iOS
eas build --profile development --platform ios

# Create development build for Android
eas build --profile development --platform android

Production Builds

# Build for app stores
eas build --profile production --platform all

Web Deployment

# Build for web deployment
npm run web:build

# Preview web build locally
npm run web:serve

πŸ”§ Configuration

Environment Variables

The application requires the following environment variables:

Variable Description Required
EXPO_PUBLIC_SUPABASE_URL Supabase project URL βœ…
EXPO_PUBLIC_SUPABASE_ANON_KEY Supabase anonymous key βœ…

Platform-Specific Settings

iOS

  • Supports tablets and phones
  • Background app refresh for notifications
  • User tracking description for privacy compliance

Android

  • Adaptive app icon support
  • Notification permissions
  • Keyboard handling optimizations

🀝 Contributing

We welcome contributions to Rento! Please follow these guidelines:

  1. Fork the repository and create your feature branch
  2. Write comprehensive tests for new functionality
  3. Follow the existing code style and TypeScript conventions
  4. Update documentation for any API changes
  5. Submit a pull request with a clear description of changes

Development Workflow

# 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-feature

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • 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

πŸ“ž Support

For support, please:


Built with ❀️ by the Rento team

⭐ Star us on GitHub β€’ 🀝 Contribute β€’ πŸ“ž Get Support

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages