Challenges
Challenges are time-limited events that drive customer engagement and encourage specific behaviors. Unlike permanent achievements, challenges have defined start and end dates, creating urgency and excitement. This guide covers everything you need to know about creating and managing challenges for your loyalty program.
Understanding Challenges
Challenges are promotional events with a defined duration that encourage customers to complete specific goals. They differ from achievements in key ways:
| Feature | Achievements | Challenges |
|---|---|---|
| Duration | Permanent | Time-limited |
| Availability | Always active | Scheduled start/end |
| Participation | Automatic | Opt-in (join) |
| Progress | Cumulative lifetime | Resets per challenge |
| Urgency | Low | High |
Why Use Challenges?
- Drive Specific Behaviors: Encourage parking in preferred zones, weekend rides, etc.
- Create Urgency: Limited-time events motivate action
- Boost Engagement: Fresh content keeps customers coming back
- Seasonal Promotions: Align with holidays, events, or slow periods
- Community Building: Everyone working toward the same goal
Challenge Types
Challenges support multiple goal types to drive different behaviors:
Complete Rides (rides_count)
Goal: Complete a specific number of rides.
| Example | Target | Duration |
|---|---|---|
| Weekly Rider | 5 rides | 7 days |
| Power Week | 10 rides | 7 days |
| Monthly Marathon | 20 rides | 30 days |
Use case: Increase overall ridership.
Travel Distance (distance_km)
Goal: Accumulate distance traveled.
| Example | Target | Duration |
|---|---|---|
| Quick 10K | 10 km | 7 days |
| Explorer Challenge | 50 km | 14 days |
| Century Challenge | 100 km | 30 days |
Use case: Encourage longer or more frequent rides.
Maintain Streak (streak_days)
Goal: Ride on consecutive days.
| Example | Target | Duration |
|---|---|---|
| 3-Day Streak | 3 days | 7 days |
| Week Streak | 7 days | 14 days |
| Two Week Warrior | 14 days | 21 days |
Use case: Build riding habits.
Consecutive Days (consecutive_days)
Goal: Ride on a specific number of consecutive calendar days.
| Example | Target | Duration |
|---|---|---|
| Commitment Challenge | 5 consecutive days | 7 days |
| Habit Builder | 7 consecutive days | 10 days |
Use case: Drive daily engagement.
Preferred Parking (parking_zone)
Goal: End rides in designated parking zones.
| Example | Target | Duration |
|---|---|---|
| Good Parker | 3 zone ends | 7 days |
| Parking Pro | 10 zone ends | 14 days |
| Zone Master | 25 zone ends | 30 days |
Use case: Improve fleet distribution and parking compliance.
Weekend Warrior (weekend_warrior)
Goal: Complete rides on weekends.
| Example | Target | Duration |
|---|---|---|
| Weekend Starter | 2 weekend rides | 7 days |
| Weekend Champion | 6 weekend rides | 14 days |
Use case: Boost weekend ridership.
Early Bird (early_bird)
Goal: Complete rides in the morning (before 8 AM).
| Example | Target | Duration |
|---|---|---|
| Early Riser | 3 morning rides | 7 days |
| Sunrise Rider | 10 morning rides | 30 days |
Time Definition
A ride is considered "early bird" if it starts before 8:00 AM in the account's timezone.
Use case: Distribute demand to off-peak hours.
Night Owl (night_owl)
Goal: Complete rides in the evening (8 PM or later).
| Example | Target | Duration |
|---|---|---|
| Night Rider | 3 evening rides | 7 days |
| After Dark | 10 evening rides | 30 days |
Time Definition
A ride is considered "night owl" if it starts at 8:00 PM or later in the account's timezone.
Use case: Encourage evening ridership.
Eco Champion (eco_champion)
Goal: Accumulate CO2 savings.
| Example | Target | Duration |
|---|---|---|
| Green Start | 5 kg saved | 7 days |
| Eco Warrior | 25 kg saved | 14 days |
| Planet Saver | 100 kg saved | 30 days |
Use case: Promote environmental consciousness.
Creating a Challenge
Step-by-Step Guide
-
Access Challenges Page
- Navigate to Dashboard > Loyalty > Challenges
- Or go directly to
/dashboard/loyalty/challenges/
-
Click "New Challenge"
- Opens the challenge creation modal
-
Fill in Basic Information
- Name: Catchy challenge name (e.g., "Weekend Warrior")
- Description: What customers need to do
-
Configure Challenge Type
- Challenge Type: Select from available types
- Target: Set the goal to achieve
-
Set Duration
- Start Date: When the challenge begins
- End Date: When the challenge ends
-
Configure Rewards
- Points Reward: Base points for completion
- Bonus Reward Type: Optional additional reward
- Bonus Reward Value: Amount of bonus reward
-
Configure Appearance
- Badge Color: Select accent color
-
Optional Settings
- Max Participants: Limit participation
- Featured: Highlight on mobile app
-
Save Challenge
Challenge Configuration Options
Required Fields
| Field | Description | Validation |
|---|---|---|
| Name | Display name | Max 100 characters |
| Challenge Type | Goal type | Must be valid type |
| Target | Numeric goal | Must be > 0 |
| Start Date | Begin time | Must be valid datetime |
| End Date | End time | Must be after start date |
Optional Fields
| Field | Default | Description |
|---|---|---|
| Description | None | Instructions for customers |
| Points Reward | 0 | Points awarded on completion |
| Bonus Reward Type | None | Additional reward type |
| Bonus Reward Value | None | Amount of bonus |
| Max Participants | Unlimited | Cap on participation |
| Is Featured | No | Highlight on mobile app |
| Badge Color | #10B981 | Accent color |
Example Configuration
Weekend Warrior Challenge:
Name: Weekend Warrior
Description: Complete 5 rides on Saturday or Sunday this month
Challenge Type: Weekend Warrior
Target: 5 rides
Start Date: December 1, 2024 12:00 AM
End Date: December 31, 2024 11:59 PM
Points Reward: 500
Bonus Reward Type: Wallet Credit
Bonus Reward Value: 250 cents ($2.50)
Max Participants: Unlimited
Is Featured: Yes
Badge Color: #F59E0B
Challenge Lifecycle
Challenge States
Challenges move through distinct states:
UPCOMING → ACTIVE → ENDED
| State | Description | Customer Can Join? | Progress Tracked? |
|---|---|---|---|
| Upcoming | Before start date | Yes | No |
| Active | Between start and end | Yes | Yes |
| Ended | After end date | No | No |
Lifecycle Timeline
Day 1 Day 7 Day 14 Day 21 Day 28
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
Created Active Active Active Ended
(Upcoming) Begins Progress Completion Results
───────────────────────────────────────>
What Happens at Each Stage
Upcoming:
- Challenge visible in app with "Coming Soon" badge
- Customers can pre-join
- Progress not yet tracked
Active:
- Challenge appears with countdown timer
- New customers can join
- All activity is tracked toward goal
- Completions trigger rewards
Ended:
- No new joins allowed
- Progress frozen
- Incomplete participants are marked as not completed
- Challenge moves to "Ended" filter
Bonus Rewards
Beyond points, challenges can award bonus rewards:
Wallet Credit (wallet_credit)
Direct credit added to customer wallet.
| Configuration | Result |
|---|---|
| Value: 500 cents | $5.00 added to wallet |
| Value: 250 cents | $2.50 added to wallet |
Use case: Provide immediate, tangible value.
How it works:
- Customer completes challenge
- Points are awarded (if configured)
- Wallet credit is added to balance
- Customer receives notification
Free Unlocks (free_unlock)
Complimentary vehicle unlocks.
| Configuration | Result |
|---|---|
| Value: 1 | 1 free unlock |
| Value: 3 | 3 free unlocks |
Use case: Encourage additional rides.
How it works:
- Customer completes challenge
- Free unlocks added to their balance
- Used automatically on next rides
- Don't expire (unlike tier free unlocks)
Tier Boost (tier_boost)
Temporarily boost the customer's tier benefits.
| Configuration | Result |
|---|---|
| Value: 1 | 1 tier level boost |
| Value: 2 | 2 tier levels boost |
Use case: Give customers a "taste" of higher tier benefits.
How it works:
- Customer completes challenge
- Tier boost applied temporarily
- Customer enjoys higher tier benefits
- Boost expires after a set period
Advanced Feature
Tier boost temporarily elevates the customer's effective tier.
Choosing Bonus Types
| Goal | Recommended Bonus |
|---|---|
| Increase rides | Free Unlocks |
| Increase spending | Wallet Credit |
| New customer activation | Wallet Credit |
| Retention | Free Unlocks |
| Tier promotion | Tier Boost |
Featured Challenges
Featured challenges get prominent placement in the mobile app:
What Featured Means
- Top Position: Appears first in challenge list
- Visual Highlight: Special "Featured" badge
- Push Eligibility: Can be included in push notifications
- Dashboard Visibility: Shows in quick stats
When to Feature
- Major Promotions: Seasonal events, holidays
- Important Goals: Parking compliance, off-peak riding
- Limited Time: High-value rewards with short duration
Feature Limit
Recommend only 1-2 featured challenges at a time. Too many dilutes the effect.
Managing Challenges
Dashboard Overview
The challenges page displays:
Statistics Cards:
- Active Challenges: Currently running
- Total Participants: Sum across all active
- Completion Rate: Completed / Joined percentage
- Top Challenge: Most popular active challenge
Filter Tabs:
- Active: Currently running challenges
- Upcoming: Scheduled for future
- Ended: Past challenges
- All: Complete list
Challenge Cards
Each challenge card shows:
- Name and description
- Status badge (Active/Upcoming/Ended)
- Featured badge (if applicable)
- Goal type and target
- Points reward
- Start and end dates
- Participation stats (X/Y completed)
- Progress bar
Editing a Challenge
- Find the challenge
- Click the pencil (Edit) icon
- Modify settings
- Click "Update"
Important
Changing target or dates may affect customer experience. Communicate changes.
Deleting a Challenge
- Find the challenge
- Click the trash (Delete) icon
- Confirm deletion
What happens:
- Challenge is marked inactive
- Removed from customer view
- Progress records preserved
- Rewards already earned are kept
Mobile App Experience
Discovery
Customers find challenges in the Loyalty section:
Active Challenges Section:
┌─────────────────────────────────┐
│ Active Challenges │
│ 2/3 joined │
├─────────────────────────────────┤
│ Weekend Warrior │
│ Complete 5 weekend rides │
│ [████████░░░░░] 4/5 │
│ +500 pts Ends in 2 days │
├─────────────────────────────────┤
│ Early Bird Special │
│ [Join Challenge] │
│ +300 pts Ends in 5 days │
└─────────────────────────────────┘
Joining a Challenge
- Customer views challenge details
- Taps "Join Challenge" button
- Progress tracking begins immediately
- Challenge appears in "My Challenges"
Progress Tracking
Joined challenges show:
- Progress bar with current/target
- Percentage complete
- Time remaining
- Completion status
Completion
When goal is reached:
- Challenge marked as completed
- Points credited to balance
- Bonus rewards applied (if any)
- Shown in activity feed
Best Practices
Challenge Design
-
Clear Goals
- Specific, measurable targets
- Easy-to-understand requirements
- Achievable within timeframe
-
Appropriate Duration
- 7 days: Quick engagement boost
- 14 days: Balanced challenge
- 30 days: Monthly retention goals
-
Compelling Rewards
- Proportional to difficulty
- Mix of points and bonus rewards
- Consider segment targeting
Duration Guidelines
| Duration | Best For | Example |
|---|---|---|
| 3-5 days | Flash promotions | "Weekend Blitz" |
| 7 days | Weekly engagement | "Weekly Rider" |
| 14 days | Habit formation | "Two Week Streak" |
| 30 days | Monthly goals | "Monthly Explorer" |
Reward Guidelines
| Difficulty | Points | Bonus Suggestion |
|---|---|---|
| Easy (3-5 rides) | 200-300 | 1 free unlock |
| Medium (10-15 rides) | 400-600 | $2-3 credit |
| Hard (20+ rides) | 800-1200 | $5+ credit |
| Extreme (50+ rides) | 1500-2500 | $10+ credit |
Timing Strategies
| Scenario | Timing |
|---|---|
| Slow weekends | Launch Friday, end Sunday |
| Monthly engagement | 1st to 30th/31st |
| Holiday periods | Week before through day after |
| Summer slump | 2-week challenges |
| New market launch | 30-day introductory |
Recommended Calendar
Monthly Rotation:
| Week | Challenge Type | Goal |
|---|---|---|
| Week 1 | Rides count | Complete X rides |
| Week 2 | Parking zone | End in zone X times |
| Week 3 | Distance | Travel X km |
| Week 4 | Special/Seasonal | Varies |
Frequently Asked Questions
Participation
Q: Can customers join an ended challenge? A: No, once a challenge ends, no new participants can join.
Q: Can a customer leave a challenge after joining? A: Currently no. Once joined, they're committed until it ends.
Q: What if a customer doesn't complete a challenge? A: No rewards are given. Their progress is preserved in records.
Progress
Q: Does progress from before joining count? A: No, only activity after joining counts toward the goal.
Q: What happens to progress if I edit the challenge target? A: Existing progress is compared against the new target.
Q: Can customers see each other's progress? A: Currently no, challenges are individual progress only.
Rewards
Q: When are rewards credited? A: Immediately upon completion of the challenge goal.
Q: What if the challenge ends while a customer is mid-progress? A: They don't receive rewards. Only completion before end time counts.
Q: Can rewards be revoked? A: Not automatically. Manual adjustments are needed by an admin.
Technical
Q: What timezone is used for start/end times? A: The account's configured timezone.
Q: How often is progress updated? A: After every ride completion, challenge progress is recalculated.
Q: Is there a limit on concurrent challenges? A: No technical limit, but 3-5 active is recommended for UX.
Technical Reference
Challenge Type Mapping
| UI Name | API Value | Description |
|---|---|---|
| Complete Rides | rides_count | Total rides in period |
| Travel Distance | distance_km | Cumulative km |
| Maintain Streak | streak_days | Consecutive days |
| Consecutive Days | consecutive_days | Calendar day streak |
| Preferred Parking | parking_zone | Zone end count |
| Weekend Warrior | weekend_warrior | Sat/Sun rides |
| Early Bird | early_bird | Pre-9 AM rides |
| Night Owl | night_owl | Post-8 PM rides |
| Eco Champion | eco_champion | CO2 saved |
Database Schema
challenges table:
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| account_id | uuid | Parent account |
| name | text | Display name |
| description | text | How to complete |
| challenge_type | text | Goal type |
| target_value | int | Numeric goal |
| target_metadata | jsonb | Additional config |
| points_reward | int | Points on completion |
| bonus_reward_type | text | Extra reward type |
| bonus_reward_value | int | Extra reward amount |
| badge_icon_url | text | Custom icon |
| badge_color | text | Hex color |
| starts_at | timestamp | Begin time |
| ends_at | timestamp | End time |
| max_participants | int | Participation cap |
| is_featured | boolean | Highlight flag |
| is_active | boolean | Enabled status |
| created_at | timestamp | Creation date |
| updated_at | timestamp | Last update |
customer_challenge_progress table:
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| customer_id | uuid | Participant |
| challenge_id | uuid | Challenge reference |
| account_id | uuid | Parent account |
| current_progress | int | Progress toward goal |
| joined_at | timestamp | Join time |
| completed_at | timestamp | Completion time (null if not) |
| rewards_granted | boolean | Rewards given flag |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/loyalty/challenges | GET | List challenges |
/api/loyalty/challenges | POST | Create challenge |
/api/loyalty/challenges/[id] | GET | Get challenge |
/api/loyalty/challenges/[id] | PUT | Update challenge |
/api/loyalty/challenges/[id] | DELETE | Delete challenge |
/api/mobile/loyalty | POST | Join challenge (action=join_challenge) |
Need Help?
For challenges configuration assistance, contact support@levyelectric.com.