Skip to content
PRSINDIA

Engineering

How to Build an Uber-Like Mobile App: A Complete Step-by-Step Guide

Build a powerful Uber-like mobile app with customer and driver apps, real-time GPS tracking, smart driver matching, secure payments, and a scalable admin panel.

PRS Admin 21 min read
How to Build an Uber-Like Mobile App: A Complete Step-by-Step Guide

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>How to Build an Uber-Like Mobile App: A Complete Step-by-Step Guide | PRS India</title>

<meta name="description" content="Learn how to build an Uber-like mobile app with customer and driver apps, GPS tracking, driver matching, payments, admin panel, technology stack and development process.">

<meta name="keywords" content="Uber-like mobile app development, taxi booking app development, ride booking app, on-demand mobile app development, Uber clone app">

<meta name="author" content="PRS India">

<style>

*{box-sizing:border-box}

body{

margin:0;

background:transparent;

color:inherit;

font-family:Arial,Helvetica,sans-serif;

line-height:1.75;

}

.blog-container{

width:min(900px,92%);

margin:0 auto;

padding:45px 0 70px;

}

.category{

display:inline-block;

padding:6px 13px;

border-radius:30px;

background:#eef4ff;

color:#155eef;

font-size:13px;

font-weight:700;

margin-bottom:16px;

}

h1{

font-size:clamp(34px,5vw,58px);

line-height:1.1;

letter-spacing:-1.5px;

margin:0 0 18px;

}

.intro{

color:inherit;

font-size:19px;

line-height:1.6;

margin-bottom:18px;

}

.meta{

color:inherit;

font-size:14px;

margin-bottom:30px;

}

.hero{

margin:0 0 42px;

border-radius:18px;

overflow:hidden;

}

.hero img{

display:block;

width:100%;

height:auto;

}

article p{

font-size:17px;

margin:0 0 20px;

}

.lead{

font-size:20px!important;

color:inherit;

}

h2{

font-size:31px;

line-height:1.25;

margin:48px 0 15px;

letter-spacing:-.4px;

}

h3{

font-size:21px;

line-height:1.35;

margin:30px 0 8px;

}

ul{

padding-left:24px;

margin:8px 0 24px;

}

li{margin:7px 0}

.box{

background:#f7f9fc;

border:1px solid #e5e7eb;

border-left:4px solid #155eef;

border-radius:10px;

padding:18px 20px;

margin:25px 0;

}

.flow{

display:grid;

grid-template-columns:repeat(5,1fr);

gap:10px;

margin:28px 0 35px;

}

.flow div{

text-align:center;

padding:17px 8px;

border:1px solid #e6eaf0;

border-radius:12px;

}

.flow b{

display:block;

color:#155eef;

font-size:12px;

margin-bottom:5px;

}

.flow strong{

display:block;

font-size:14px;

}

.flow span{

display:block;

color:inherit;

font-size:12px;

}

.cards{

display:grid;

grid-template-columns:repeat(3,1fr);

gap:15px;

margin:25px 0 35px;

}

.card{

border:1px solid #e6eaf0;

border-radius:14px;

padding:20px;

}

.card h3{

color:#155eef;

margin:0 0 10px;

}

.card ul{

font-size:14px;

margin:0;

}

.tech{

display:grid;

grid-template-columns:1fr 1fr;

gap:15px;

}

.tech .card{background:#fafbfc}

.cta{

margin:50px 0;

padding:30px;

background:#172033;

color:#fff;

border-radius:18px;

}

.cta h2{

color:#fff;

margin:0 0 10px;

}

.cta p{

color:#d9e2f2;

}

.cta a{

display:inline-block;

margin-top:8px;

padding:11px 18px;

border-radius:8px;

background:#fff;

color:#172033;

text-decoration:none;

font-weight:700;

}

.faq{

border-top:1px solid #e6eaf0;

padding:18px 0;

}

.faq h3{

margin:0 0 5px;

font-size:19px;

}

.faq p{margin:0;color:#475467}

/* Adaptive text colors:

JavaScript below detects the effective background behind each text element.

It makes text light on dark/black backgrounds and dark on white/light boxes.

*/

.prs-adaptive-text,

.prs-adaptive-text * {

transition: color .12s ease;

}

@media(max-width:750px){

.blog-container{padding-top:30px}

.cards{grid-template-columns:1fr}

.tech{grid-template-columns:1fr}

.flow{grid-template-columns:repeat(2,1fr)}

h2{font-size:27px}

article p{font-size:16px}

}

</style>

<style id="prs-blog-final-theme">

/* PRS India blog: black page background */

.blog-container,

.blog-container article {

background: transparent !important;

color: #FFFFFF !important;

}

/* All normal article content on the black page */

.blog-container article p,

.blog-container article h1,

.blog-container article h2,

.blog-container article h3,

.blog-container article li,

.blog-container article strong,

.blog-container .intro,

.blog-container .meta {

color: #FFFFFF !important;

}

/* Light/white boxes: black text */

.blog-container .box,

.blog-container .card,

.blog-container .faq {

background: #FFFFFF !important;

color: #000000 !important;

}

.blog-container .box *,

.blog-container .card *,

.blog-container .faq * {

color: #000000 !important;

}

/* Category pill */

.blog-container .category {

background: #FFFFFF !important;

color: #000000 !important;

}

/* Flow boxes are light, so their text must be black */

.blog-container .flow div {

background: #FFFFFF !important;

color: #000000 !important;

border-color: #FFFFFF !important;

}

.blog-container .flow div *,

.blog-container .flow strong,

.blog-container .flow span,

.blog-container .flow b {

color: #000000 !important;

}

/* Dark CTA: white text */

.blog-container .cta {

background: #172033 !important;

color: #FFFFFF !important;

}

.blog-container .cta h2,

.blog-container .cta p {

color: #FFFFFF !important;

}

/* White CTA button: black text */

.blog-container .cta a {

background: #FFFFFF !important;

color: #000000 !important;

}

/* Any white/light button or link-style button in this blog */

.blog-container a[style*="background:#fff"],

.blog-container a[style*="background: #fff"],

.blog-container button {

color: #000000 !important;

}

/* Preserve the image without adding a white page behind it */

.blog-container .hero {

background: transparent !important;

}

/* FAQ text stays black inside its white panel */

.blog-container .faq p {

color: #000000 !important;

}

</style>

<style id="prs-professional-blog-design">

/* ===== PRS INDIA PROFESSIONAL BLOG LAYOUT ===== */

.blog-container{

max-width:980px !important;

width:min(92%,980px) !important;

margin:0 auto !important;

padding:55px 0 90px !important;

position:relative;

}

.blog-container article{

max-width:900px;

margin:0 auto;

}

.blog-container .category{

padding:8px 15px !important;

border:1px solid rgba(21,94,239,.25) !important;

border-radius:999px !important;

font-size:12px !important;

letter-spacing:.08em;

text-transform:uppercase;

font-weight:800 !important;

margin-bottom:20px !important;

}

.blog-container h1{

font-size:clamp(38px,6vw,64px) !important;

line-height:1.04 !important;

letter-spacing:-2.2px !important;

max-width:900px;

margin-bottom:22px !important;

}

.blog-container .intro{

max-width:780px;

font-size:20px !important;

line-height:1.65 !important;

opacity:.78;

}

.blog-container .meta{

display:flex;

align-items:center;

gap:8px;

margin:20px 0 34px !important;

font-size:13px !important;

opacity:.65;

}

.blog-container .hero{

position:relative;

margin:0 0 52px !important;

border-radius:22px !important;

overflow:hidden;

box-shadow:0 20px 60px rgba(0,0,0,.30);

}

.blog-container .hero img{

width:100%;

display:block;

aspect-ratio:16/9;

object-fit:cover;

}

.blog-container article p{

font-size:17px !important;

line-height:1.85 !important;

margin-bottom:22px !important;

}

.blog-container article .lead{

font-size:21px !important;

line-height:1.75 !important;

font-weight:500;

padding:26px 28px;

margin:0 0 30px;

border-left:4px solid #155eef;

background:rgba(255,255,255,.055);

border-radius:0 14px 14px 0;

}

.blog-container h2{

font-size:32px !important;

line-height:1.2 !important;

letter-spacing:-.7px !important;

margin:64px 0 18px !important;

padding-bottom:13px;

border-bottom:1px solid rgba(255,255,255,.13);

}

.blog-container h3{

font-size:21px !important;

margin:30px 0 9px !important;

}

.blog-container ul{

margin:18px 0 28px !important;

padding:0;

list-style:none;

}

.blog-container article li{

position:relative;

padding:9px 14px 9px 30px;

margin:5px 0;

background:rgba(255,255,255,.035);

border-radius:8px;

}

.blog-container article li:before{

content:"✓";

position:absolute;

left:11px;

top:8px;

color:#4f8cff;

font-weight:800;

}

/* Highlight boxes */

.blog-container .box{

padding:23px 25px !important;

margin:28px 0 !important;

border:1px solid rgba(255,255,255,.14) !important;

border-left:4px solid #155eef !important;

border-radius:14px !important;

box-shadow:0 10px 35px rgba(0,0,0,.12);

}

/* Numbered process flow */

.blog-container .flow{

display:grid !important;

grid-template-columns:repeat(5,1fr) !important;

gap:12px !important;

margin:32px 0 42px !important;

}

.blog-container .flow div{

position:relative;

min-height:105px;

padding:18px 10px !important;

display:flex;

flex-direction:column;

justify-content:center;

border-radius:14px !important;

box-shadow:0 8px 25px rgba(0,0,0,.12);

}

.blog-container .flow b{

font-size:11px !important;

letter-spacing:.1em;

}

.blog-container .flow strong{

font-size:15px !important;

}

/* Feature cards */

.blog-container .cards,

.blog-container .tech{

gap:18px !important;

margin:28px 0 40px !important;

}

.blog-container .card{

border-radius:16px !important;

padding:24px !important;

box-shadow:0 10px 35px rgba(0,0,0,.13);

transition:transform .2s ease, box-shadow .2s ease;

}

.blog-container .card:hover{

transform:translateY(-4px);

box-shadow:0 18px 45px rgba(0,0,0,.2);

}

.blog-container .card h3{

font-size:20px !important;

margin:0 0 14px !important;

}

/* FAQ */

.blog-container .faq{

padding:22px 24px !important;

margin:0 !important;

border:1px solid rgba(255,255,255,.13) !important;

border-radius:12px !important;

}

.blog-container .faq + .faq{

margin-top:10px !important;

}

.blog-container .faq h3{

margin:0 0 7px !important;

font-size:18px !important;

}

/* CTA */

.blog-container .cta{

margin:70px 0 !important;

padding:42px !important;

border-radius:22px !important;

background:linear-gradient(135deg,#172033,#0d1b36) !important;

border:1px solid rgba(255,255,255,.13);

box-shadow:0 20px 55px rgba(0,0,0,.28);

}

.blog-container .cta h2{

border:0 !important;

padding:0 !important;

margin:0 0 12px !important;

font-size:34px !important;

}

.blog-container .cta a{

display:inline-flex !important;

align-items:center;

gap:8px;

margin-top:14px;

padding:13px 21px !important;

border-radius:9px !important;

font-weight:800 !important;

text-decoration:none;

transition:transform .2s ease, opacity .2s ease;

}

.blog-container .cta a:hover{

transform:translateY(-2px);

opacity:.9;

}

/* Better spacing before final FAQ */

.blog-container article > h2:last-of-type{

margin-top:70px !important;

}

/* Mobile */

@media(max-width:800px){

.blog-container{

padding:35px 0 65px !important;

}

.blog-container h1{

font-size:40px !important;

letter-spacing:-1.3px !important;

}

.blog-container .flow{

grid-template-columns:repeat(2,1fr) !important;

}

.blog-container .cta{

padding:30px !important;

}

}

@media(max-width:520px){

.blog-container{

width:90% !important;

}

.blog-container h1{

font-size:34px !important;

}

.blog-container .intro{

font-size:17px !important;

}

.blog-container article p{

font-size:16px !important;

line-height:1.75 !important;

}

.blog-container article .lead{

font-size:18px !important;

padding:20px !important;

}

.blog-container h2{

font-size:27px !important;

margin-top:48px !important;

}

.blog-container .flow{

grid-template-columns:1fr 1fr !important;

}

.blog-container .cta h2{

font-size:28px !important;

}

}

</style>

<link rel="canonical" href="https://prsindia.in/blog/how-to-build-an-uber-like-mobile-app-a-complete-step-by-step-guide">

<meta property="og:type" content="article">

<meta property="og:title" content="How to Build an Uber-Like Mobile App | PRS India">

<meta property="og:description" content="Learn how to build an Uber-like mobile app with ride booking, GPS tracking, driver matching, payments, admin panel, technology stack, cost, and development process.">

<meta property="og:url" content="https://prsindia.in/blog/how-to-build-an-uber-like-mobile-app-a-complete-step-by-step-guide">

<meta property="og:image" content="https://prsindia.in/blog/assets/uber-like-mobile-app-og.png">

<meta property="og:image:alt" content="How to Build an Uber-Like Mobile App - PRS India">

</head>

<body>

<main class="blog-container">

<div class="category">Engineering</div>

<h1>How to Build an Uber-Like Mobile App: A Complete Step-by-Step Guide</h1>

<p class="intro">

A practical guide to building a ride-booking and on-demand mobile application,

covering customer and driver apps, GPS tracking, payments, technology,

development process, cost and scalability.

</p>

<div class="meta">By PRS India &nbsp; • &nbsp; 10–12 min read</div>

<div class="hero">

<img src="images/uber-like-mobile-app.png"

alt="Uber-like mobile app development, ride booking and GPS tracking">

</div>

<article>

<p class="lead">

Uber changed the way people book rides. Instead of standing on the road

looking for a taxi, users can open an app, enter their destination,

see an estimated fare, book a ride, and track their driver in real time.

</p>

<p>

That simple experience has created a much bigger opportunity for businesses.

Today, companies are building their own ride-booking and on-demand platforms

for taxis, bikes, car rentals, delivery services, logistics, and even home services.

</p>

<p>

But building an app like Uber is not simply about creating two mobile apps

and connecting them to a map. Behind the simple booking screen is a complete

software system that manages users, drivers, locations, pricing, payments,

notifications, bookings, and much more.

</p>

<h2>What Is an Uber-Like Mobile App?</h2>

<p>

An Uber-like app is an on-demand platform that connects customers with

drivers or service providers.

</p>

<p>The basic concept is simple:</p>

<div class="box">

<strong>

Customer requests a service → System finds a suitable driver →

Driver accepts → Service is completed → Customer pays and gives feedback.

</strong>

</div>

<p>

Although Uber is best known for ride booking, the same technology model

can be used for taxi booking, bike taxi, car rental, courier booking,

delivery services, logistics, moving services, home services and other

on-demand businesses.

</p>

<h2>How Does an Uber-Like App Actually Work?</h2>

<p>

A customer selects a pickup location and destination, chooses a vehicle

and sees an estimated fare. Once the customer confirms the ride, the backend

checks nearby available drivers and sends the request to a suitable driver.

</p>

<p>

After the driver accepts the booking, the customer can see the driver's

location and estimated arrival time. The driver reaches the pickup point,

starts the ride, completes the trip and the final fare is calculated.

The customer then pays and can rate the driver.

</p>

<div class="flow">

<div><b>01</b><strong>Request</strong><span>Pickup & destination</span></div>

<div><b>02</b><strong>Match</strong><span>Find driver</span></div>

<div><b>03</b><strong>Track</strong><span>Live GPS</span></div>

<div><b>04</b><strong>Complete</strong><span>Finish ride</span></div>

<div><b>05</b><strong>Pay</strong><span>Payment & rating</span></div>

</div>

<h2>You Need More Than One Application</h2>

<p>

An Uber-like platform normally has three major components:

the customer application, driver application and admin panel.

</p>

<div class="cards">

<div class="card">

<h3>Customer App</h3>

<ul>

<li>Registration and login</li>

<li>Pickup and destination</li>

<li>Vehicle selection</li>

<li>Fare estimate</li>

<li>Ride booking</li>

<li>Live driver tracking</li>

<li>Payments and invoices</li>

<li>Ratings and reviews</li>

</ul>

</div>

<div class="card">

<h3>Driver App</h3>

<ul>

<li>Driver registration</li>

<li>Document upload</li>

<li>Vehicle details</li>

<li>Online/offline status</li>

<li>Booking requests</li>

<li>Navigation</li>

<li>Earnings and history</li>

<li>Notifications</li>

</ul>

</div>

<div class="card">

<h3>Admin Panel</h3>

<ul>

<li>Dashboard and reports</li>

<li>Customer management</li>

<li>Driver management</li>

<li>Booking management</li>

<li>Pricing configuration</li>

<li>Payment monitoring</li>

<li>Complaints and ratings</li>

<li>Coupons and analytics</li>

</ul>

</div>

</div>

<h2>Real-Time GPS Tracking</h2>

<p>

If there is one feature that makes an Uber-like application different

from a normal booking app, it is real-time location tracking.

</p>

<p>

GPS and mapping services can provide current location, pickup location,

destination, driver location, distance, route and estimated arrival time.

The backend also needs to handle frequent location updates efficiently

so that the experience remains smooth without unnecessarily consuming

device battery or server resources.

</p>

<h2>How Does Driver Matching Work?</h2>

<p>

When a customer requests a ride, the system needs to find an available driver.

The nearest driver isn't always automatically the right driver.

</p>

<p>

The matching system may consider distance from the pickup point,

driver availability, vehicle category, service area, current driver status,

existing bookings and other business rules.

</p>

<h2>How Should the Fare Be Calculated?</h2>

<p>A basic fare structure can include:</p>

<div class="box">

<strong>Base Fare + Distance Charge + Time Charge + Additional Charges</strong>

</div>

<p>

Real businesses often need different pricing for cities, vehicle categories,

peak hours, night rides, airport pickups, minimum fares, waiting time,

toll charges, platform fees and taxes.

</p>

<p>

These rules should ideally be manageable through the admin panel so the

business team can update pricing without changing the application code.

</p>

<h2>Online Payments and Cash</h2>

<p>

Depending on the business model, customers can be offered UPI, credit cards,

debit cards, net banking, digital wallets or cash.

</p>

<p>

The payment gateway should communicate with the backend so booking and

payment status remain synchronized. The system should also handle failed

payments, cancellations and refunds.

</p>

<h2>Push Notifications</h2>

<p>

Notifications keep customers and drivers informed throughout the booking process.

</p>

<div class="box">

<strong>

Booking Confirmed → Driver Assigned → Driver Is Arriving →

Ride Started → Ride Completed → Payment Successful

</strong>

</div>

<h2>In-App Chat and Calling</h2>

<p>

Drivers and customers sometimes need to communicate about pickup points.

In-app communication or masked calling can make this easier while giving

the business more control over customer-driver interactions.

</p>

<h2>Ratings and Reviews</h2>

<p>

After a ride is completed, customers can rate their experience using a

five-star system and optionally leave written feedback.

</p>

<p>

The admin team can monitor low ratings and complaints and take action

when required. Driver ratings can also become part of the platform's

quality-management process.

</p>

<h2>What Technology Should You Use?</h2>

<p>

There isn't one technology stack that is perfect for every project.

The right choice depends on business requirements, expected users,

budget, development team and future plans.

</p>

<div class="tech">

<div class="card">

<h3>Mobile Application</h3>

<ul>

<li>Flutter</li>

<li>React Native</li>

<li>Native Android</li>

<li>Native iOS</li>

</ul>

</div>

<div class="card">

<h3>Backend & Database</h3>

<ul>

<li>Node.js</li>

<li>Laravel / PHP</li>

<li>Python / Java / .NET</li>

<li>PostgreSQL / MySQL / MongoDB</li>

</ul>

</div>

</div>

<p>

For maps and location services, a mapping platform such as Google Maps

Platform can be integrated. The important thing is to choose an architecture

that fits the actual product requirements rather than selecting technology

simply because it is popular.

</p>

<h2>What Does the Development Process Look Like?</h2>

<h3>Step 1: Understand the Business</h3>

<p>

Define your service, customers, drivers or service providers, operating

cities, pricing model and revenue model.

</p>

<h3>Step 2: Plan the User Journey</h3>

<p>

Map out what happens from the moment a user opens the app until the

service is completed.

</p>

<h3>Step 3: Design the UI/UX</h3>

<p>

Design the customer app, driver app and admin panel around their

real workflows.

</p>

<h3>Step 4: Develop the Backend</h3>

<p>

The backend manages users, drivers, bookings, locations, pricing,

payments, notifications and APIs.

</p>

<h3>Step 5: Build the Mobile Applications</h3>

<p>

Develop the customer and driver applications and connect them to the backend.

</p>

<h3>Step 6: Testing</h3>

<p>

Test booking, GPS, driver matching, payments, notifications,

cancellations, performance and security.

</p>

<h3>Step 7: Deployment</h3>

<p>

After testing, deploy the backend and publish the applications

on the relevant app stores.

</p>

<h2>How Much Does It Cost to Build an Uber-Like App?</h2>

<p>

There is no single price for an Uber-like application. The cost depends

on the features, platforms, design, backend architecture, integrations

and expected scale.

</p>

<p>

A basic MVP with essential booking functionality will cost less than

a full-scale multi-city platform with advanced pricing, wallets,

subscriptions, analytics and complex driver-management features.

</p>

<h2>How Long Does It Take?</h2>

<p>

Development time depends on the scope. A focused MVP can be developed

much faster than a full-scale platform with dozens of advanced features.

</p>

<p>

A typical project follows:

<strong>Planning → UI/UX → Backend → Customer App → Driver App →

Admin Panel → Testing → Deployment</strong>.

</p>

<h2>Start With an MVP</h2>

<p>

If you're starting a new business, you don't necessarily need every

possible feature on day one.

</p>

<p>A practical MVP can include:</p>

<ul>

<li>Customer and driver registration</li>

<li>Location selection</li>

<li>Ride booking</li>

<li>Driver matching</li>

<li>Fare calculation</li>

<li>Live tracking</li>

<li>Payment</li>

<li>Notifications</li>

<li>Booking history</li>

<li>Admin dashboard</li>

</ul>

<p>

Once the platform starts getting real users, you can add wallets,

coupons, referral systems, driver incentives, subscription plans,

corporate accounts, multiple cities, multiple languages,

advanced analytics and dynamic pricing.

</p>

<h2>Security Matters From Day One</h2>

<p>

An on-demand application handles customer information, driver documents,

phone numbers, location data, payment transactions and business information.

</p>

<p>

The application should be designed with HTTPS, secure authentication,

API protection, role-based access, input validation, database security,

backups, server monitoring and secure payment integration.

</p>

<h2>Build Your Own Uber-Like App With PRS India</h2>

<p>

At <strong>PRS India</strong>, we build customized mobile and web solutions

for businesses that want to turn an idea into a working digital product.

</p>

<p>

If you are planning a taxi booking app, logistics platform, delivery

application, bike-booking service or another on-demand platform,

the system can be designed around your business model.

</p>

<div class="box">

<strong>

Customer App + Driver App + Admin Panel + Backend APIs +

GPS Tracking + Payments + Notifications + Reports

</strong>

</div>

<p>

The goal isn't to simply copy another application. The goal is to

understand how your business works and build technology that supports it.

</p>

<div class="cta">

<h2>Ready to Build Your Uber-Like App?</h2>

<p>

Have an idea for a taxi booking, delivery, logistics, or

on-demand mobile application?

</p>

<a href="https://prsindia.in/">Visit PRS India</a>

</div>

<h2>Frequently Asked Questions</h2>

<div class="faq">

<h3>How much does it cost to build an Uber-like app?</h3>

<p>

The cost depends on the features, platforms, design, backend

architecture, integrations and scale of the application.

</p>

</div>

<div class="faq">

<h3>Can I build an Uber-like app for my own business?</h3>

<p>

Yes. The same on-demand model can be customized for taxi booking,

delivery, logistics, bike rides, car rentals and many other businesses.

</p>

</div>

<div class="faq">

<h3>Do I need separate apps for customers and drivers?</h3>

<p>

For most ride-booking platforms, separate customer and driver

applications provide a better experience because their workflows are different.

</p>

</div>

<div class="faq">

<h3>Can the app support multiple cities?</h3>

<p>

Yes. The backend and admin panel can be designed to support

multiple cities, service areas, pricing rules and vehicle categories.

</p>

</div>

<div class="faq">

<h3>Can I add new features after launching the app?</h3>

<p>

Yes. Starting with an MVP allows you to launch the core product

first and add advanced features as the business grows.

</p>

</div>

<div class="faq">

<h3>Does an Uber-like app require GPS tracking?</h3>

<p>

For a real-time ride-booking experience, GPS and location services

are usually essential for driver matching, navigation, tracking,

distance calculation and ETA.

</p>

</div>

</article>

</main>

</body>

</html>

Written by

PRS Admin

Building software at PRS India.