Parking Zone Rewards
Parking zone rewards incentivize customers to park vehicles in designated areas by awarding loyalty points. This helps improve fleet distribution, reduce rebalancing costs, and create a better experience for the next rider.
Overview
When customers end their ride in a preferred parking zone, they automatically receive loyalty points as a reward. The system checks the vehicle's GPS location at ride end and awards points if it falls within a configured parking zone.
Key Features
- Automatic point awards - Points given automatically at ride end
- Configurable base points - Set how many points each zone awards
- Rebalancing multiplier - Boost rewards during high-demand times
- Custom messages - Display zone-specific messages to customers
- Multiple zone support - Create many reward zones per location
- Real-time GPS check - Accurate location verification at ride end
How It Works
Ride Ends
↓
System checks GPS location
↓
Is vehicle in a preferred parking zone?
├── Yes → Award points (base × multiplier)
│ Update ride record
│ Customer sees reward in app
└── No → No parking reward
Normal ride completion
Creating a Reward Zone
Navigate to Zones
Go to Dashboard → Zones.
Create or Edit Zone
Click Add Zone or edit an existing parking zone.
Set Zone Type
Select Parking or Bonus as the zone type.
Draw the Zone
Use the map tool to draw the polygon boundary.
Configure Rewards
- Toggle Preferred Parking on
- Set Reward Points (e.g., 50)
- Set Rebalancing Multiplier (e.g., 1.0 or 2.0)
- Add optional Reward Message
Save Zone
Click Save to activate the zone.
Zone Configuration
Preferred Parking Toggle
Marks the zone as a reward zone.
| Setting | Behavior |
|---|---|
| On | Zone awards points when customers park here |
| Off | Zone is informational only, no rewards |
Required for Rewards
Both the toggle must be ON and reward points must be greater than 0 for the zone to award points.
Reward Points
The base number of loyalty points to award.
| Points | Example Use Case |
|---|---|
| 10-25 | Minor convenience zones |
| 50-100 | Standard designated parking |
| 100-200 | High-priority rebalancing areas |
| 200+ | Critical zone incentives |
Tips:
- Consider your loyalty tier thresholds when setting points
- Higher points = stronger incentive
- Balance against time/distance points earned during rides
Rebalancing Multiplier
Dynamically boost rewards for specific zones.
| Multiplier | Effect | Use Case |
|---|---|---|
| 0.5x | Half points | Zone is well-stocked |
| 1.0x | Normal points | Default |
| 1.5x | 50% bonus | Moderate demand |
| 2.0x | Double points | High demand |
| 3.0x | Triple points | Critical shortage |
The multiplier allows real-time adjustment of incentives based on fleet distribution needs.
Reward Message
Optional message displayed to customers when they park in the zone.
Examples:
- "Thanks for parking at Central Station!"
- "You earned bonus points for parking in a high-demand area!"
- "Great choice! This location helps other riders."
If not set, a default message with the zone name is shown.
Zone Types for Rewards
Parking rewards work with these zone types:
| Zone Type | Supports Rewards | Typical Use |
|---|---|---|
| Parking | Yes | Designated parking areas |
| Bonus | Yes | High-priority incentive zones |
| Service Area | No | Operational boundary |
| Speed Limit | No | Safety zones |
| No Ride | No | Restricted areas |
How Points Are Calculated
Points Awarded = Base Points × Rebalancing Multiplier
Example:
- Base Points: 50
- Multiplier: 2.0
- Points Awarded: 50 × 2.0 = 100 points
The calculation happens automatically when:
- Ride status changes to "completed"
- Vehicle GPS falls within a reward zone boundary
- Zone has
is_preferred_parking = true - Zone has
parking_reward_points > 0
Database Schema
Zones Table (Reward Fields)
| Column | Type | Description |
|---|---|---|
is_preferred_parking | Boolean | Zone awards parking rewards |
parking_reward_points | Integer | Base points to award (0+) |
rebalancing_multiplier | Decimal | Point multiplier (0.5-5.0) |
parking_reward_message | Text | Custom message for customers |
Rides Table (Tracking)
| Column | Type | Description |
|---|---|---|
ended_in_preferred_zone | Boolean | Ride ended in reward zone |
parking_zone_id | UUID | Which zone was matched |
parking_reward_points | Integer | Points actually awarded |
Mobile App Display
During Ride
Customers see reward zones on the map:
- Visual indicator for parking zones
- Points available shown on zone
- Current multiplier if > 1.0
At Ride End
When ending in a reward zone:
- Confirmation message displayed
- Points awarded shown
- Zone-specific message (if configured)
- Updated loyalty points balance
In Loyalty Section
- Transaction history shows parking rewards
- "Parked in [Zone Name]" description
- Points awarded amount
Best Practices
Zone Placement
- High-traffic destinations - Transit hubs, shopping centers
- Charging stations - Encourage parking near chargers
- Safe locations - Well-lit, accessible areas
- Operational convenience - Easy for staff to service
Point Values
- Start conservative - Begin with moderate point values
- Monitor effectiveness - Track if customers are responding
- Adjust seasonally - More points in slow periods
- Balance budget - Consider loyalty program costs
Multiplier Strategy
- Real-time adjustment - Update multipliers based on fleet data
- Peak hour boost - Higher multipliers during rush hour
- Weekend incentives - Boost for underserved weekend zones
- Event-based - Special multipliers for local events
Troubleshooting
Points Not Being Awarded
-
Check zone configuration:
is_preferred_parkingmust betrueparking_reward_pointsmust be > 0- Zone type must be
parkingorbonus
-
Check ride data:
- Verify GPS coordinates at ride end
- Confirm ride completed successfully
- Check for overlapping zones
-
Check zone boundaries:
- Ensure polygon is valid GeoJSON
- Verify zone covers intended area
- Check for gaps in coverage
Wrong Points Awarded
- Verify multiplier setting - Check current rebalancing_multiplier
- Check for zone overlap - Multiple zones at same location
- Review calculation - Points = base × multiplier
Customer Not Seeing Rewards
- Check ride history - Verify
ended_in_preferred_zoneis true - Check loyalty transactions - Look for "parking" type entries
- Verify customer account - Loyalty points should be updated
API Reference
Get Parking Zones (Mobile)
GET /api/mobile/referrals
# Response includes parking_zones array with reward info
Award Parking Reward (Internal)
import { awardParkingReward } from '@/lib/referrals'
const result = await awardParkingReward(admin, {
customerId: 'uuid',
rideId: 'uuid',
zoneId: 'uuid',
zoneName: 'Central Station',
basePoints: 50,
multiplier: 2.0
})
// Returns: { success: boolean, pointsAwarded: number }
Zone Data Structure
{
"id": "uuid",
"name": "Central Station Parking",
"type": "parking",
"is_preferred_parking": true,
"parking_reward_points": 50,
"rebalancing_multiplier": 1.5,
"parking_reward_message": "Thanks for parking at Central Station!",
"geojson": { /* polygon coordinates */ }
}
Improve Fleet Distribution
Parking zone rewards create a win-win: customers earn points for convenient parking choices, while your fleet stays well-distributed for the next rider. Monitor your zone analytics to optimize reward levels over time.