Docs / Mobile app & interfaces▾

Clients

Mobile app & interfaces

One Expo React Native codebase for Android and iOS. Drivers and hosts use the same app; host features appear once an account becomes a host.

Interfaces#

The four core screens, recreated in HTML for the web (the same previews as on our home page).

₹40/hr
⚡ ₹65/hr
₹30/hr
9:41
3 Spots within 1.0 km of you
📍 140m away

Indiranagar Metro Hub

100 Feet Rd, HAL 2nd Stage

₹40/hr● 4 bays free
Explore
Bookings
Host
Account

Explore

Map and list of nearby spots with price, distance and free slots

9:41
Spot Details
Instant Hold
Parking Bay
1/4 Photos
Active Facility

Indiranagar Metro Hub

₹40/hr

100 Feet Rd, HAL 2nd Stage, Bengaluru

4.9(184 reviews)
·CCTV & Covered
Select Parking Bay
Bay A-04Ground Level · Car
Bay E-02EV Fast 22kW (₹65)
Parking Duration

Today, 2:00 PM – 5:00 PM

3 Hours Duration

Change
Base Rate (3h × ₹40)₹120.00
Platform GST (18%)₹21.60
Total Amount₹141.60

Book

Server-quoted price breakdown, then pay or pay at the venue

9:41
Active Pass
Checked in
1h 48mleft

You’re parked

Until 5:00 PM today. Bay A-04 at Indiranagar Metro Hub.

Show at the entrance

or tell the host your PIN

8
4
1
9
0
2
Works 100% offline in underground basements

Access pass

Live QR code that refreshes itself, plus the offline PIN

9:41

Host

3 live spots

Earned in the last 14 days
₹34,850.00
Oct 03Today
3Active
18Upcoming
2Requests
Manage Slots (3 active)Edit

Bay 1 (Driveway)

Standard · ₹40/h

● Active · AvailableBooked 4h today

Bay 2 (EV Port)

Fast DC 50kW · ₹75/h

● Occupied until 4:30 PM₹300 collected
Explore
Bookings
Host
Account

Host

Earnings, requests to approve and the gate scanner

Screen map#

Routes are files (Expo Router). Groups in parentheses share a layout without adding to the URL.

mobile/src/apptext
(auth)/ sign-in · sign-up · forgot-password # email + password, or Google via Clerk
(app)/(tabs)/ index (explore) · bookings · host · account
(app)/listing/[id] listing detail, reviews, book
(app)/booking/[id] booking detail, payment, live QR pass, extend, check-out
(app)/report/[id] dispute with photos
(app)/host/ new-listing · listing/[id] · bookings · scan (camera)
(app)/account/ profile · password · delete
(app)/notifications in-app inbox
legal/[doc] · support · verify-email · sso-callback

Talking to the API#

ConcernHow the app handles it
Server stateTanStack Query caches responses, refetches live screens (the booking screen every 20 s while a session is active)
AuthAccess token in memory only; refresh token in the Keychain / Keystore (SecureStore)
Expired tokenOn a 401 the client refreshes once (concurrent requests share one refresh) and retries
ErrorsEvery API error has the same JSON shape, so screens show the server's message and field errors
Slow starts60 s request timeout: the hosted API sleeps when idle and can take ~55 s to wake
RulesPrices, GST and booking limits come from GET /v1/config, never hard-coded in the app
DeviceA random per-install id sent only when signing in, so a known phone gets less friction
mobile/src/api/client.tsts
/** Concurrent 401s share one refresh call. */
private refreshOnce(): Promise<string | null> {
if (!this.tokens) return Promise.resolve(null);
this.refreshing ??= this.tokens.refresh().finally(() => {
this.refreshing = null;
});
return this.refreshing;
}

Photo uploads go straight to storage#

Presigned upload sequenceHost appParkezy APIBackblaze B2POST /v1/uploads (type, purpose)presigned PUT URL (15 min)PUT image bytesPOST /uploads/{id}/completeHEAD: check size + typeready to attach to a listing

Swipe sideways to see the whole figure.

The API never handles image bytes. It hands out a short-lived presigned URL, then verifies the stored object's size and type before a listing may use it.

Builds and quality checks#

  • Android APKs are built on EAS; API keys live in EAS environment variables, not in the repository.
  • Every change passes tsc --noEmit (strict TypeScript), ESLint and expo-doctor (21/21 checks).
  • Payments use the native Razorpay SDK, so they need the real app build; in Expo Go the app explains this instead of crashing.