Driver Privacy Policy

At TruCost, we value your privacy and are committed to protecting the personal information you share with us. This Privacy Policy explains how we collect, use, store, disclose, and safeguard your information when you visit our website, submit an inquiry, request our services, or otherwise interact with us.

By using our website, you agree to the practices described in this Privacy Policy.


1. Personal Data the App Actually Collects

1.1 Identity & Account Data
  • Phone number — stored in User.phoneNumber (unique), collected at registration/login via OTP
  • First name — stored in User.firstName, collected at registration (DetailsInput screen)
  • Last name — stored in User.lastName, collected at registration (DetailsInput screen)
  • Email (optional) — stored in User.email, collected at registration (DetailsInput screen)
1.2 Driver Profile & Licensing Data
  • Driver's license number — stored in DriverProfile.licenseNumber
  • Driver's license expiry — stored in DriverProfile.licenseExpiry
  • Insurance number — stored in DriverProfile.insurance
  • Insurance expiry — stored in DriverProfile.insuranceExpiry
  • Background check status — stored in DriverProfile.backgroundCheckDone
  • Rejection reason — stored in DriverProfile.rejectionReason
  • Earnings — stored in DriverProfile.earnings
1.3 Vehicle Data
  • - Vehicle model — stored in Vehicle.model, collected at driver application (DriverApply screen)
  • - Vehicle year — stored in Vehicle.year, collected at driver application
  • - Vehicle color — stored in Vehicle.color, collected at driver application
  • - License plate — stored in Vehicle.licensePlate, collected at driver application
  • - Registration number — stored in Vehicle.registrationNumber, collected at driver application
  • - Vehicle type — stored in Vehicle.vehicleType (TRUGO / TRUXL), selected at driver application
  • - Seating capacity — stored in Vehicle.capacity, collected at driver application
1.4 Identity Documents (Uploaded to Cloudinary)
  • Driver's License — uploaded via upload-documents screen
  • Aadhaar Card — uploaded via upload-documents screen
  • Vehicle Registration (RC) — uploaded via upload-documents screen
  • Insurance Certificate — uploaded via upload-documents screen
  • Profile Photo — uploaded via upload-documents screen
Optional documents:
  • - Vehicle Photo — photo uploaded via upload-documents screen
  • - PAN Card — photo/PDF uploaded via upload-documents screen
  • - Police Verification — photo/PDF uploaded via upload-documents screen
  • All document images/PDFs are stored on Cloudinary (cloudinary.com). Document metadata (URL, status, number, expiry, rejection reason) is stored in DriverDocument table.
1.5 Location Data
  • - Real-time GPS coordinates — held in app state (app-slice.ts) via watchPosition, continuously tracked while app is open (enableHighAccuracy: true, 1s interval, 1m distance filter)
  • - Background location tracking — during active rides, react-native-background-actions runs a foreground service that continuously sends GPS (lat, lng, speed, heading) to the backend via WebSocket even when the app is backgrounded
  • - Driver live location — sent via WebSocket (DRIVERS_LOCATION_UPDATE event), stored transiently in Redis geo-set for rider matching
  • - Ride pickup/dropoff coordinates — stored in Ride table per ride
  • - Ride tracking breadcrumbs — stored in RideTracking.latitude, .longitude, .speed with timestamps during active rides
1.6 Device & Push Notification Data
  • - FCM token — stored in User.fcmToken, updated on each login for push notifications
  • - Headrest tablet devices — stored in Device.deviceId, .deviceName, .deviceModel, .status, .lastActiveAt — linked to driver profile, managed in MyDevices screen
  • - Device authorization — via deep link (ctccab://register), device tokens signed as JWT with 365-day expiry
1.7 Financial & Earnings Data
  • - Driver fare per ride — stored in Ride.driverFare
  • Total earnings — computed from completed rides
  • - Withdrawal requests — stored in Withdrawal table (amount, status, timestamps)
  • - Ride payment status — stored per ride (PENDING / COMPLETED / FAILED / REFUNDED)
1.8 Support & Feedback Data
  • - Support ticket content — stored in SupportTicket.subject, .description, .category, driver-submitted tickets
  • - Ride ratings received — stored in Rating.rating (1-5), Rating.comment
1.9 Crashlytics / Diagnostics
  • - Geolocation errors — recorded via crashlytics().recordError() in app.tsx when getCurrentPosition fails
  • - Crash stack traces — sent to Firebase Crashlytics automatically

2. Android Permissions Requested

  • - INTERNET — network access for API calls, WebSocket, maps
  • - ACCESS_FINE_LOCATION — high-accuracy GPS for ride navigation, live location sharing
  • - ACCESS_COARSE_LOCATION — approximate location (fallback)
  • - ACCESS_BACKGROUND_LOCATION — location tracking when app is backgrounded (ride in progress)
  • - POST_NOTIFICATIONS — Firebase push notifications (ride requests, alerts)
  • - FOREGROUND_SERVICE — required to run the background location service during active rides
  • - FOREGROUND_SERVICE_LOCATION — declares the foreground service type as location
  • - WAKE_LOCK — prevents device from sleeping during active ride tracking

3. Third-Party SDKs Used

  • - Firebase Messaging (@react-native-firebase/messaging) — push notifications — sends FCM token, device identity
  • - Firebase Crashlytics (@react-native-firebase/crashlytics) — crash reporting — sends crash logs, geolocation errors, device info
  • - Firebase App (@react-native-firebase/app) — Firebase core — sends project config
  • - MSG91 SendOTP (@msg91comm/sendotp-react-native) — OTP-based phone auth — sends phone number
  • - Google Maps (react-native-maps) — map rendering during rides — sends driver's viewport/coordinates
  • - Google Maps Directions (react-native-maps-directions) — route rendering — sends pickup/dropoff coordinates
  • - React Native Geolocation (@react-native-community/geolocation) — GPS access — sends latitude, longitude, speed, heading
  • - React Native NetInfo (@react-native-community/netinfo) — connectivity detection — sends network state (no PII)
  • - React Native Background Actions (react-native-background-actions) — keeps JS thread alive during rides for continuous location updates
  • - React Native Image Picker (react-native-image-picker) — photo selection for document uploads — accesses device gallery
  • - React Native Keychain (react-native-keychain) — secure token storage — JWT tokens stored locally on device
  • - Socket.IO Client (socket.io-client) — real-time ride events, location streaming — sends auth token, GPS data
  • - Axios (axios) — HTTP client — sends API requests with auth headers

4. Data Retention & Account Deletion

- Drivers can delete all their data via DELETE /api/account/delete-account endpoint

  • - Upon deletion, the following data is permanently removed in a single transaction:
  • - User account (User record, including phone number, name, email, FCM token)
  • - Driver profile (DriverProfile, including license info, earnings, background check status)
  • - Vehicle record (model, year, color, plate, registration)
  • - All uploaded documents (DriverDocument records — Cloudinary URLs become orphaned)
  • - All linked headrest devices (Device records)
  • - All rides where the driver was assigned (pickup/dropoff coordinates, addresses, fares)
  • - All ride tracking records (GPS breadcrumbs with speed)
  • - All transactions
  • - All ratings given and received
  • - All promo redemptions
  • - All survey responses linked to the driver's rides
  • - All support tickets
  • - Emergency contacts
  • Note: document files stored on Cloudinary are NOT automatically deleted when the account is deleted — only the database references are removed.

5. Data Shared With Service Providers

  • - MSG91 (msg91.com) — shares phone number, OTP delivery status — purpose: SMS OTP authentication — retention: per MSG91's privacy policy
  • - Cloudinary (cloudinary.com) — shares driver identity documents (license, Aadhaar, PAN, profile photo, vehicle photo, insurance, police verification) — purpose: cloud media storage — retention: stored until explicitly deleted
  • - Firebase / Google — shares FCM tokens, crash stack traces, geolocation errors, device metadata — purpose: push notifications + crash analytics — retention: per Google Firebase privacy policy
  • - Google Maps Platform — shares driver location, pickup/dropoff coordinates — purpose: route rendering, turn-by-turn navigation — retention: per Google Cloud privacy terms