Built to order

Bike Rental Web App with Hourly Pricing and Live Availability

This project builds a bike rental web app where riders browse five two-wheelers, see live availability for their hours, and book by the hour with a refundable deposit. It covers the rental loop — hourly price calculation, a double-booking guard, OTP pickup with key handover, and return billing — plus an owner dashboard for earnings and fleet status. Suitable for B.E./B.Tech final-year projects in Computer Science, Information Technology and Web Development.

Web Development Razorpay test-mode paymentsMySQLHTML5 · CSS3 · JavaScriptNode.js · ExpressReact · ViteJWT authentication bcryptGit GitHubChart.js owner dashboardSoftware
Bike Rental Web App with Hourly Pricing and Live Availability — project thumbnail preview
More project photos (3)

The problem

Renting a bike in an Indian city still runs on phone calls and a paper register, so two riders can arrive for the same bike. The Bike Rental Web App with Hourly Pricing and Live Availability replaces that guesswork with a live catalogue of five two-wheelers whose availability updates for the exact hours picked. A rider picks a bike, chooses pickup and return times, sees the price before paying, and collects it with a 4-digit OTP and a driving licence check, while the owner watches earnings, bikes out and utilisation on a dashboard. While building the demo, one real gotcha surfaced: datetime-local returns wall-clock local time with no zone, so storing a slot through UTC shifts every booking by 5 hours 30 minutes — the demo keeps slots as local wall-clock strings. The demo holds five bikes with three seed bookings for today, and its dashboard opens at ₹1,686 of rental earnings computed from the demo's own data.

How it works

A rider opens the app, sees the fleet for the chosen hours, and the booking is complete five steps later. First, the frontend reads the bookings table for the selected pickup and return times and marks each bike available or booked for that exact slot, so the catalogue never shows a bike that is already taken. The rider picks a bike and the calculator shows the bill — started hours times the hourly rate plus the refundable deposit — before any payment is taken. Confirming the booking re-checks the bike inside a database transaction and writes the booking with its payment record and a 4-digit OTP. At the hub the rider shows a driving licence and the OTP, the keys are handed over, and the ride begins. At return the system compares the actual return time with the booked end time, adds ₹50 per extra started hour if late, and refunds the deposit after inspection.

  1. The rider opens the app and picks pickup and return date-and-times; the frontend requests availability for that exact slot from the REST API.
  2. The backend queries the bookings table and returns the status of all 5 bikes, which the catalogue renders with green available badges and red booked badges showing the taken hours.
  3. The rider clicks an available bike, and the booking panel fills in its rate, deposit and a live price breakdown for the chosen hours.
  4. The rider enters a name and driving licence number and confirms; the system re-checks the bike's status at that exact moment and rejects the booking if it was just taken.
  5. A confirmed booking is stored with a booking reference and a 4-digit OTP and appears in the My Bookings list and on the owner dashboard.
  6. At the hub the rider shows a driving licence and the OTP, collects the keys, and at return the system settles the final bill — rental plus any late fee — and refunds the deposit after inspection.

Tech stack:

  • React · Vite
  • Node.js · Express
  • MySQL
  • JWT authentication · bcrypt
  • Razorpay test-mode payments
  • Chart.js owner dashboard
  • HTML5 · CSS3 · JavaScript
  • Git · GitHub

Requirements

  • Software: Node.js, MySQL 8, React with Vite for the frontend, a modern browser, and MySQL Workbench for the database.
  • For the demo: No server is needed — the single-file demo runs directly in the browser and holds its 5-bike dataset in the page.
  • For deployment: A Node.js hosting account with a MySQL database; the operator configures the fleet, hourly rates, deposits and late-fee rules before launch.
  • Optional: A Razorpay account if online payment is required; the demo runs payments in test mode instead.
Parameter Value
Bikes in demo fleet 5 (Activa 6G · Splendor Plus · Classic 350 · Access 125 · Pulsar 150)
Hourly rate card ₹49–₹199 per hour by bike (listed rate card)
Refundable deposit ₹1,000–₹3,000 by bike (listed)
Billing unit Per started hour — 2 h 10 min billed as 3 h (listed rule)
Demo seed bookings today 3 bookings — ₹1,686 rental earnings (measured from the demo build)
Rider booking journey 5 steps to confirmed booking: browse → slot → price → deposit → OTP pickup (counted from the build)
Pickup verification 4-digit OTP + driving licence check (design)
Late-return charge ₹50 per extra started hour past booked end (listed rule)
Database tables 8 (users · bikes · bookings · payments · deposits · pickups · returns · owners)
Concurrent users Approximately 50 (design target)

Project features

The app is built around four capabilities a real rental operator needs every day. First, the live bike catalogue shows five two-wheelers — a Honda Activa 6G, Hero Splendor Plus, Royal Enfield Classic 350, Suzuki Access 125 and Bajaj Pulsar 150 — each with its hourly rate, refundable deposit, engine size and fuel-tank capacity, and an availability badge that updates the moment the pickup and return times change. Second, the hourly price calculator turns a chosen slot into an exact bill before payment: hours are rounded up to started hours, the rental is multiplied out, and the refundable deposit is shown separately so the rider knows what is a charge and what comes back. Third, the booking guard re-checks a bike at the exact moment of confirmation, so two riders can never hold the same bike for the same hours. Fourth, the owner dashboard converts bookings into decisions, showing today's earnings, bikes out, fleet utilisation and revenue by bike.

  • [Live availability for the exact slot] The catalogue checks every bike against the bookings table for the chosen pickup and return times, so a bike shows as available only when no existing booking overlaps any part of the slot, and a booked bike shows the hours it is taken.
  • [Hourly price calculator with per-started-hour billing] Choosing a slot fills in the bill immediately: started hours times the hourly rate, plus the refundable deposit shown as a separate line, so the total payable now is visible before any payment is taken.
  • [Double-booking guard with race simulation] Confirming a booking re-checks the bike's live status at that exact moment and refuses the second attempt with a clear message, and the demo includes a "Simulate another rider" button so the guard can be watched working instead of only described.
  • [OTP pickup with driving licence check] Every confirmed booking issues a booking reference and a 4-digit OTP; at the hub the rider shows a driving licence and the OTP, and only then are the keys handed over.
  • [Return billing with late-return fee] Returning a bike compares the actual return time with the booked end time and adds ₹50 per extra started hour when late, and the deposit is refunded in full after the bike passes inspection.
  • [Owner dashboard with earnings and utilisation] The operator sees today's rental earnings, bikes out now, fleet utilisation, active bookings, revenue by bike and a table of today's bookings with slots, riders and rental values.
  • [My Bookings list] Every confirmed booking appears with its reference, bike, slot, rental and OTP, and the rider marks the bike returned from the same list, which settles the final bill.
  • [Date and time picker with slot validation] Pickup and return use date-and-time pickers that refuse a return time at or before pickup, and changing the slot re-checks every bike's availability immediately.

What is included

  • Complete source code (React frontend + Node.js/Express API)
  • MySQL schema with seed data (5 bikes, rate card, deposits, sample riders and bookings)
  • Working single-file demo of the catalogue, hourly price calculator, OTP pickup and owner dashboard
  • Admin owner dashboard with earnings, utilisation and revenue by bike
  • Project report PDF (background, problem statement, methodology, system design, testing and results)
  • PPT presentation for final review
  • Viva Q&A preparation document (REST APIs, JWT authentication, transactions, billing logic, OTP verification)

Limitations & prerequisites

  • Payments run in Razorpay test mode in the delivered build — no real money moves until live keys and production approval are added.
  • The demo holds its data in the page, so bookings made in the demo do not persist after a refresh; the full React and MySQL build stores everything in the database.
  • A booking is blocked only for the same bike and overlapping hours; the system does not yet prevent one rider booking two different bikes for the same slot.
  • The OTP is a pickup check, not a vehicle immobiliser — the physical handover still depends on the hub attendant verifying the licence.
  • Mileage figures in the demo are labelled expected, not measured, and vary with riding conditions; they are not part of any performance claim.
  • No native mobile app is included; the web app is responsive and works on mobile browsers.

Project timeline

  • Week 1: Requirement study, database design (bikes, bookings, payments, deposits, users) and catalogue wireframe.
  • Week 2: Booking flow, hourly price calculator and the double-booking guard, with live availability.
  • Week 3: OTP pickup, return billing with late fee, My Bookings list and owner dashboard.
  • Week 4: Razorpay test-mode payments, testing, report and presentation.
  • Total: Approximately 4 weeks for the base build (expected timeline for a single developer).

Support

  • Setup help: Step-by-step Node.js and MySQL setup and database import instructions are included, with the demo runnable directly in the browser for reference.
  • Customisation: Fleet size, hourly rates, deposit rules and late-fee rates are configurable; extra modules such as SMS reminders or multi-hub support can be developed based on requirements, technical feasibility and timeline.
  • Documentation: Report, PPT and viva Q&A are included with the build.

Frequently Asked Questions

How does live availability work?

You pick a pickup and return time, and every bike is checked against the bookings table for those exact hours: a bike is shown as available only if no existing booking overlaps any part of your slot, and a booked bike shows the hours it is already taken. Changing the pickup or return time re-checks all five bikes immediately, so the catalogue always reflects the hours you actually want, and a bike booked for only part of your slot still shows as booked.

How is the hourly price calculated?

The rental is the bike's hourly rate multiplied by the number of started hours, so 2 hours 10 minutes is billed as 3 hours, and the refundable deposit is added as a separate line to give the total payable now. For example, a Suzuki Access 125 at ₹69 per hour for 4 hours costs ₹276 in rental plus a ₹1,500 refundable deposit, a total of ₹1,776 payable now, and the deposit comes back in full after an on-time return and inspection.

How does the OTP pickup work?

Confirming a booking issues a booking reference and a 4-digit OTP, and at the hub you show your driving licence and the OTP before the keys are handed over, so only the person who made the booking can collect the bike. The same reference is used at return, when the final bill is settled and the deposit is refunded after inspection.

Does it include payment integration?

Yes, in test mode. Rentals and deposits go through Razorpay test keys, so the checkout flow, payment record and receipt all work end to end without moving real money, and every test payment still produces a payment record in the database. Switching to live payments needs the operator's own Razorpay account and production keys, which is a setup step in the delivered guide rather than a code change.

What does the owner dashboard show?

The owner dashboard shows today's rental earnings, bikes out now, fleet utilisation, active bookings, revenue by bike, and a table of today's bookings with slots, riders and rental values, so the operator can see at a glance which bikes are earning and which are sitting idle. In the demo the dashboard opens at ₹1,686 of rental earnings from 3 seed bookings, with 2 bikes out and 60% fleet utilisation, and refundable deposits are excluded from earnings because they are not revenue.

Is this project suitable for a final-year project?

Yes — it fits Computer Science, Information Technology and Web Development submissions. It demonstrates database design, REST APIs, authentication, transactions that prevent double booking, and time-based billing with a real owner dashboard, all of which give a review panel concrete design decisions to ask about, and the working demo can be shown live in the review.

Components & software requirements
  • React · Vite
  • Node.js · Express
  • MySQL
  • JWT authentication · bcrypt
  • Razorpay test-mode payments
  • Chart.js owner dashboard
  • HTML5 · CSS3 · JavaScript
  • Git · GitHub

Requirements

  • Software: Node.js, MySQL 8, React with Vite for the frontend, a modern browser, and MySQL Workbench for the database.
  • For the demo: No server is needed — the single-file demo runs directly in the browser and holds its 5-bike dataset in the page.
  • For deployment: A Node.js hosting account with a MySQL database; the operator configures the fleet, hourly rates, deposits and late-fee rules before launch.
  • Optional: A Razorpay account if online payment is required; the demo runs payments in test mode instead.
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download free synopsis (PDF)

Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.

Get a quotation