Skip to content

iteshxt/velo-rapido

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

24 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🚲 Velo Rapido - Premium Bike Rental System 🚲

Velo Rapido is a comprehensive bike rental management system that allows users to browse, book, and rent bikes online. The platform offers a seamless experience for both users and administrators, with features like bike management, user management, reservation tracking, and maintenance scheduling.

πŸ“‘ Table of Contents

  1. ✨ Features
  2. πŸ—οΈ Project Structure
  3. πŸ’» Technologies Used
  4. πŸ—„οΈ Database Structure
  5. πŸ‘₯ User Roles
  6. πŸ”§ Installation
  7. πŸš€ Deployment
  8. πŸ”‘ Admin Credentials
  9. 🀝 Contributing
  10. πŸ“ License

✨ Features

For Users πŸ§‘β€πŸš²

  • Browse Bike Fleet: Users can view all available bikes with detailed specifications and photos
  • User Registration/Login: Secure authentication system for users to create and manage accounts
  • Bike Reservation: Simple booking process with date and time selection
  • Online Payment: Multiple payment options including card, COD, and UPI
  • Rental Dashboard: Track current and past rentals
  • Damage Reporting: Submit reports for any damages during rental period
  • Dark/Light Mode: User interface with theme support πŸŒ“

For Administrators πŸ‘¨β€πŸ’Ό

  • Comprehensive Dashboard: Overview of rentals, bikes, users, and maintenance
  • Bike Management: Add, edit, delete, and manage bike inventory
  • User Management: Manage user accounts and permissions
  • Reservation Tracking: Monitor all bookings and rental status
  • Maintenance Scheduling: Schedule and track bike maintenance πŸ”§
  • Damage Report Management: Review and process damage reports

πŸ—οΈ Project Structure

velo-rapido/
β”œβ”€β”€ index.php                 # Homepage
β”œβ”€β”€ admin/                    # Admin panel πŸ‘¨β€πŸ’Ό
β”‚   β”œβ”€β”€ dashboard.php         # Admin dashboard
β”‚   β”œβ”€β”€ bikes/                # Bike management
β”‚   β”œβ”€β”€ maintenance/          # Maintenance management
β”‚   β”œβ”€β”€ reports/              # Damage and reservation reports
β”‚   └── users/                # User management
β”œβ”€β”€ assets/                   # Static assets
β”‚   β”œβ”€β”€ css/                  # Stylesheets 🎨
β”‚   └── images/               # Images including bike photos and favicon
β”œβ”€β”€ auth/                     # Authentication πŸ”
β”‚   β”œβ”€β”€ login.php             # Login page
β”‚   β”œβ”€β”€ logout.php            # Logout functionality
β”‚   └── register.php          # Registration page
β”œβ”€β”€ db/                       # Database πŸ—„οΈ
β”‚   β”œβ”€β”€ db.php                # Database connection and helpers
β”‚   └── velo_rapido.sql       # SQL schema and initial data
β”œβ”€β”€ includes/                 # Shared components
β”‚   β”œβ”€β”€ footer.php            # Footer component
β”‚   β”œβ”€β”€ header.php            # Header component with navigation
β”‚   └── utils.php             # Utility functions πŸ› οΈ
└── pages/                    # User-facing pages
    β”œβ”€β”€ book.php              # Booking page
    β”œβ”€β”€ dashboard.php         # User dashboard
    β”œβ”€β”€ fleet.php             # Bike catalog 🚲
    β”œβ”€β”€ payment.php           # Payment processing πŸ’³
    └── report-damage.php     # Damage reporting form

πŸ’» Technologies Used

  • Frontend:

    • HTML5/CSS3 🎨
    • Tailwind CSS for styling ✨
    • JavaScript πŸ“œ
    • Font Awesome for icons πŸ”£
  • Backend:

    • PHP 7.4+ 🐘
    • MySQL Database πŸ—„οΈ
  • Deployment:

    • InfinityFree for web hosting ☁️
    • FreeSQLDatabase for database hosting 🏦

πŸ—„οΈ Database Structure

The database consists of six main tables with the following structure:

πŸ‘€ Users Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column      β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ user_id     β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ first_name  β”‚ VARCHAR(50)     β”‚ User's first name               β”‚
β”‚ last_name   β”‚ VARCHAR(50)     β”‚ User's last name                β”‚
β”‚ email       β”‚ VARCHAR(100)    β”‚ User's email (unique)           β”‚
β”‚ password    β”‚ VARCHAR(255)    β”‚ Hashed password                 β”‚
β”‚ role        β”‚ ENUM            β”‚ 'user' or 'admin'               β”‚
β”‚ phone       β”‚ VARCHAR(20)     β”‚ Contact number                  β”‚
β”‚ address     β”‚ TEXT            β”‚ User's address                  β”‚
β”‚ created_at  β”‚ TIMESTAMP       β”‚ Account creation time           β”‚
β”‚ updated_at  β”‚ DATETIME        β”‚ Last update time                β”‚
β”‚ status      β”‚ ENUM            β”‚ 'active' or 'disabled'          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🚲 Bikes Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column       β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ bike_id      β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ bike_name    β”‚ VARCHAR(100)    β”‚ Name of the bike                β”‚
β”‚ bike_type    β”‚ VARCHAR(50)     β”‚ Type (MTB, City, etc.)          β”‚
β”‚ specificationsβ”‚ TEXT           β”‚ Detailed specifications         β”‚
β”‚ image_path   β”‚ VARCHAR(255)    β”‚ Path to bike image              β”‚
β”‚ hourly_rate  β”‚ DECIMAL(10,2)   β”‚ Cost per hour                   β”‚
β”‚ status       β”‚ ENUM            β”‚ 'available', 'reserved', etc.   β”‚
β”‚ created_at   β”‚ TIMESTAMP       β”‚ When bike was added             β”‚
β”‚ updated_at   β”‚ DATETIME        β”‚ Last update time                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“… Reservations Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column          β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ reservation_id  β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ user_id         β”‚ INT (FK)        β”‚ Reference to users table        β”‚
β”‚ bike_id         β”‚ INT (FK)        β”‚ Reference to bikes table        β”‚
β”‚ start_time      β”‚ DATETIME        β”‚ Rental start time               β”‚
β”‚ end_time        β”‚ DATETIME        β”‚ Rental end time                 β”‚
β”‚ pickup_location β”‚ VARCHAR(255)    β”‚ Where to pick up the bike       β”‚
β”‚ dropoff_locationβ”‚ VARCHAR(255)    β”‚ Where to return the bike        β”‚
β”‚ status          β”‚ ENUM            β”‚ 'pending', 'confirmed', etc.    β”‚
β”‚ created_at      β”‚ TIMESTAMP       β”‚ When reservation was made       β”‚
β”‚ updated_at      β”‚ DATETIME        β”‚ Last update time                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ’° Payments Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column       β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ payment_id   β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ reservation_idβ”‚ INT (FK)       β”‚ Reference to reservations table β”‚
β”‚ amount       β”‚ DECIMAL(10,2)   β”‚ Payment amount                  β”‚
β”‚ payment_methodβ”‚ ENUM           β”‚ 'card', 'cod', 'upi'            β”‚
β”‚ payment_statusβ”‚ ENUM           β”‚ 'pending', 'completed', etc.    β”‚
β”‚ transaction_idβ”‚ VARCHAR(255)   β”‚ External transaction reference  β”‚
β”‚ created_at   β”‚ TIMESTAMP       β”‚ When payment was made           β”‚
β”‚ updated_at   β”‚ DATETIME        β”‚ Last update time                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

⚠️ Damages Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column     β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ damage_id  β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ bike_id    β”‚ INT (FK)        β”‚ Reference to bikes table        β”‚
β”‚ user_id    β”‚ INT (FK)        β”‚ Reference to users table        β”‚
β”‚ descriptionβ”‚ TEXT            β”‚ Details of the damage           β”‚
β”‚ image_path β”‚ VARCHAR(255)    β”‚ Path to damage photos           β”‚
β”‚ status     β”‚ ENUM            β”‚ 'reported', 'resolved', etc.    β”‚
β”‚ reported_atβ”‚ TIMESTAMP       β”‚ When damage was reported        β”‚
β”‚ updated_at β”‚ DATETIME        β”‚ Last update time                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ Maintenance Table

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Column         β”‚ Type            β”‚ Description                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ maintenance_id β”‚ INT (PK)        β”‚ Unique identifier               β”‚
β”‚ bike_id        β”‚ INT (FK)        β”‚ Reference to bikes table        β”‚
β”‚ description    β”‚ TEXT            β”‚ Maintenance details             β”‚
β”‚ maintenance_typeβ”‚ VARCHAR(50)    β”‚ Type of maintenance             β”‚
β”‚ start_date     β”‚ DATE            β”‚ When maintenance begins         β”‚
β”‚ end_date       β”‚ DATE            β”‚ Expected completion date        β”‚
β”‚ completion_dateβ”‚ DATE            β”‚ Actual completion date          β”‚
β”‚ status         β”‚ ENUM            β”‚ 'scheduled', 'in_progress', etc.β”‚
β”‚ created_at     β”‚ TIMESTAMP       β”‚ When record was created         β”‚
β”‚ updated_at     β”‚ DATETIME        β”‚ Last update time                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Relationships Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Users  │──┐  β”‚ Reservations β”‚  β”Œβ”€β”€β”‚  Bikes  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  └─>β”‚              β”‚<β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
     β”‚                  β”‚                 β”‚
     β”‚                  v                 β”‚
     β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
     β”‚          β”‚   Payments   β”‚          β”‚
     β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
     β”‚                                    β”‚
     β”‚                                    β”‚
     └───────┐                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             v                 v
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚ Damages  β”‚     β”‚ Maintenanceβ”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ‘₯ User Roles

The system has two primary user roles:

  1. Regular Users πŸ§‘β€πŸš²:

    • Browse and book bikes
    • Manage their reservations
    • Report damages
    • View rental history
  2. Administrators πŸ‘¨β€πŸ’Ό:

    • All regular user privileges
    • Manage bike inventory
    • Process reservations
    • Schedule maintenance
    • Handle damage reports
    • Manage user accounts

πŸ”§ Installation

  1. Clone the repository to your local machine or server πŸ“₯
  2. Create a MySQL database and import the db/velo_rapido.sql file πŸ—„οΈ
  3. Configure your database connection in db/db.php βš™οΈ
  4. Ensure your web server has PHP 7.4+ installed 🐘
  5. Navigate to the project URL in your browser 🌐

πŸš€ Deployment

The Velo Rapido project is currently deployed at:

  • Website: https://velo-rapido.wuaze.com/ πŸ”’πŸŒ
  • Host: InfinityFree ☁️
  • Database: FreeSQLDatabase 🏦
  • Security: SSL-secured with HTTPS protocol for data protection

πŸ”‘ Admin Credentials

To access the admin panel, use the following credentials:

🀝 Contributing

Contributions to Velo Rapido are welcome! To contribute:

  1. Fork the repository 🍴
  2. Create a feature branch (git checkout -b feature/AmazingFeature) 🌿
  3. Commit your changes (git commit -m 'Add some AmazingFeature') βœ…
  4. Push to the branch (git push origin feature/AmazingFeature) πŸ“€
  5. Open a Pull Request πŸ”

πŸ“ License

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


Made with ❀️ by petrioteer

Releases

No releases published

Packages

No packages published