Achievements
Achievements are milestone badges that reward customers for specific accomplishments. They create memorable moments of recognition and provide additional points rewards. This guide covers everything you need to know about creating and managing achievements for your loyalty program.
Understanding Achievements
Achievements are permanent badges that customers earn by completing specific milestones. Unlike challenges, achievements don't expire and are always available for customers to work toward.
Key Characteristics
- Permanent: Once earned, achievements remain on the customer's profile
- Trigger-Based: Automatically awarded when conditions are met
- Points Rewards: Each achievement can award bonus points
- Visual Recognition: Displayed as badges in the mobile app
- One-Time or Repeatable: Can be earned once or multiple times
Purpose of Achievements
- Celebrate Milestones: Mark significant customer accomplishments
- Encourage Exploration: Motivate customers to try new behaviors
- Boost Engagement: Provide collection/completion goals
- Reward Loyalty: Give tangible recognition for continued usage
Achievement Trigger Types
Achievements are awarded when specific triggers are met. The system supports these trigger types:
Total Rides (rides_count)
Award based on cumulative lifetime ride count.
| Example Achievement | Trigger Value |
|---|---|
| First Timer | 1 ride |
| Regular Rider | 10 rides |
| Century Club | 100 rides |
| Road Warrior | 500 rides |
Use case: Reward overall usage milestones.
Distance Traveled (distance_km)
Award based on cumulative kilometers traveled.
| Example Achievement | Trigger Value |
|---|---|
| First Mile | 1 km |
| Explorer | 50 km |
| Marathoner | 100 km |
| Globetrotter | 1000 km |
Use case: Reward distance-based milestones.
Streak Days (streak_days)
Award for maintaining consecutive riding days.
| Example Achievement | Trigger Value |
|---|---|
| On a Roll | 3 days |
| Week Warrior | 7 days |
| Streak Master | 14 days |
| Unstoppable | 30 days |
Use case: Encourage daily ridership habits.
First Ride (first_ride)
Award for completing the very first ride.
| Example Achievement | Trigger Value |
|---|---|
| Welcome Aboard | 1 |
Use case: Celebrate new customer onboarding.
Note
Trigger value is always 1 for this type.
Parking Zone Ends (parking_zone)
Award for ending rides in designated parking zones.
| Example Achievement | Trigger Value |
|---|---|
| Good Parker | 5 zone ends |
| Parking Pro | 25 zone ends |
| Parking Champion | 100 zone ends |
Use case: Encourage proper parking behavior.
Weekend Rides (weekend_rides)
Award for rides taken on weekends (Saturday/Sunday).
| Example Achievement | Trigger Value |
|---|---|
| Weekend Explorer | 5 weekend rides |
| Weekend Regular | 20 weekend rides |
| Weekend Champion | 50 weekend rides |
Use case: Drive weekend usage.
Points Earned (points_earned)
Award based on cumulative loyalty points earned.
| Example Achievement | Trigger Value |
|---|---|
| Point Starter | 100 points |
| Point Collector | 1000 points |
| Point Master | 10000 points |
Use case: Reward overall program engagement.
Eco Distance (eco_distance)
Award based on estimated CO2 savings from rides.
| Example Achievement | Trigger Value |
|---|---|
| Eco Friend | 10 kg CO2 saved |
| Green Rider | 50 kg CO2 saved |
| Planet Protector | 100 kg CO2 saved |
CO2 Calculation: The system estimates CO2 savings using the formula:
CO2 Saved (kg) = Distance (km) × 0.12
This assumes replacing a car trip with an electric vehicle ride saves approximately 120 grams of CO2 per kilometer.
Use case: Promote environmental consciousness.
Time of Day (time_of_day)
Award for rides completed during specific hours.
| Example Achievement | Trigger Value |
|---|---|
| Early Bird | Rides before 8 AM |
| Night Owl | Rides after 8 PM |
| Lunch Rush | Rides between 11 AM - 1 PM |
Use case: Recognize off-peak riders or specific time-based behaviors.
Tier Reached (tier_reached)
Award when a customer reaches a specific loyalty tier.
| Example Achievement | Trigger Value |
|---|---|
| Silver Status | Reach Silver tier |
| Gold Status | Reach Gold tier |
| Champion Status | Reach Champion tier |
Use case: Celebrate tier milestones with additional recognition.
Monthly Rides (monthly_rides)
Award for completing a certain number of rides within a calendar month.
| Example Achievement | Trigger Value |
|---|---|
| Monthly Rider | 10 rides/month |
| Power User | 25 rides/month |
| Super Commuter | 50 rides/month |
Use case: Encourage consistent monthly usage.
Referrals (referrals)
Award based on successful referral count.
| Example Achievement | Trigger Value |
|---|---|
| First Referral | 1 referral |
| Social Butterfly | 5 referrals |
| Influencer | 10 referrals |
Use case: Recognize top referrers.
Creating Achievements
Step-by-Step Guide
-
Access Achievements Page
- Navigate to Dashboard > Loyalty > Achievements
- Or go directly to
/dashboard/loyalty/achievements/
-
Click "New Achievement"
- Opens the achievement creation modal
-
Fill in Basic Information
- Name: Customer-facing achievement name (e.g., "First Ride")
- Description: How to earn this achievement (e.g., "Complete your first ride")
-
Configure Trigger
- Trigger Type: Select from available types
- Target Value: Set the threshold to earn
-
Set Reward
- Points Reward: Bonus points awarded when earned
-
Configure Appearance
- Badge Color: Select a hex color for the badge
-
Optional Settings
- Repeatable: Allow earning multiple times
- Cooldown Days: Minimum days between repeated earnings
- Secret: Hide until earned
-
Save Achievement
Configuring Achievement Settings
Form Fields Explained
Basic Information
| Field | Required | Description |
|---|---|---|
| Name | Yes | Display name shown to customers (max 50 chars) |
| Description | No | Instructions on how to earn (max 200 chars) |
Trigger Configuration
| Field | Required | Description |
|---|---|---|
| Trigger Type | Yes | What action triggers the achievement |
| Target Value | Yes | Numeric threshold to reach |
| Trigger Metadata | No | Additional JSON data for complex triggers |
Reward Configuration
| Field | Default | Range |
|---|---|---|
| Points Reward | 0 | 0 - 100,000 |
Appearance
| Field | Default | Description |
|---|---|---|
| Badge Color | #6366F1 | Hex color code |
| Badge Icon URL | None | Optional custom icon URL |
Behavior Settings
| Field | Default | Description |
|---|---|---|
| Repeatable | No | Can be earned multiple times |
| Repeat Cooldown Days | None | Days before re-earning |
| Secret | No | Hidden until earned |
| Active | Yes | Whether achievement is enabled |
| Sort Order | 0 | Display order in lists |
Example Configuration
Century Club Achievement:
Name: Century Club
Description: Complete 100 rides and join an elite group of riders
Trigger Type: Total Rides (rides_count)
Target Value: 100
Points Reward: 1000
Badge Color: #F59E0B (Gold)
Repeatable: No
Secret: No
Repeatable Achievements
Some achievements can be earned multiple times. This is useful for ongoing rewards:
How Repeatable Achievements Work
- Customer earns achievement for the first time
- Counter resets (if cooldown is set, must wait)
- Customer can work toward earning again
- Each earning awards the points reward again
Cooldown Period
Set a minimum time between earnings to prevent exploitation:
| Cooldown | Use Case |
|---|---|
| 0 days | No limit (earn immediately after) |
| 1 day | Daily achievement caps |
| 7 days | Weekly achievements |
| 30 days | Monthly achievements |
Example: Weekly Warrior
Name: Weekly Warrior
Description: Complete 5 rides in a week
Trigger Type: Total Rides (rides_count)
Target Value: 5 (weekly count)
Points Reward: 50
Repeatable: Yes
Repeat Cooldown Days: 7
Tracking
The system tracks "times earned" for repeatable achievements.
Secret Achievements
Secret achievements add an element of surprise and discovery:
Characteristics
- Not shown in the achievement list until earned
- Create "surprise and delight" moments
- Encourage sharing and word-of-mouth
- Great for special or rare accomplishments
When to Use Secret Achievements
| Scenario | Example |
|---|---|
| Rare milestones | 1000th ride, 1 year anniversary |
| Easter eggs | Ride on company anniversary date |
| Special behaviors | Perfect parking score |
| Exclusive clubs | Top 1% of riders |
Example: Secret Achievement
Name: Night Owl
Description: Complete a ride after midnight
Trigger Type: Time of Day (time_of_day)
Target Value: 0 (midnight)
Points Reward: 100
Secret: Yes
Managing Achievements
Viewing All Achievements
The achievements page shows:
-
Statistics Cards:
- Total Achievements (active count)
- Total Earned (sum of all customer earnings)
- Most Popular (highest earned achievement)
-
Achievement Cards:
- Name and description
- Trigger type and value
- Points reward
- Times earned count
- Repeatable/Inactive badges
Editing an Achievement
- Find the achievement card
- Click the pencil (Edit) icon
- Modify settings
- Click "Update"
Note
Changes to trigger values won't affect already-earned achievements.
Deactivating an Achievement
- Find the achievement card
- Click the trash (Delete) icon
- Confirm deactivation
What happens:
- Achievement is marked inactive
- No longer shown to new customers
- Existing earned records are preserved
- Can be reactivated by editing
Viewing Earning Statistics
Each achievement card shows:
- Times Earned: Total number of times earned by all customers
- Helps identify popular vs. rarely-achieved goals
Mobile App Experience
Achievement Display
The mobile app shows achievements in a horizontal scrolling gallery:
Earned Achievements:
- Full-color badge icon
- Achievement name
- Points earned displayed
Locked Achievements:
- Grayed-out badge icon
- Lock overlay
- Achievement name (unless secret)
- Points available
Achievement Summary
The app header shows:
Achievements: 8/15 earned
Where:
- 8 = Achievements earned by customer
- 15 = Total available achievements (non-secret)
Earning Notification
When a customer earns an achievement:
- Achievement unlocks visually
- Points are added to balance
- Achievement appears in recent activity
Best Practices
Achievement Design
-
Create a Progression
- Design achievements that build on each other
- Example: 10 rides → 25 rides → 50 rides → 100 rides
-
Balance Difficulty
- Mix of easy, medium, and hard achievements
- Most customers should earn 3-5 within first month
- Some should be truly aspirational
-
Reward Proportionally
- Easy: 50-100 points
- Medium: 100-500 points
- Hard: 500-2000 points
- Legendary: 2000+ points
Recommended Starter Set
| Achievement | Type | Value | Points | Difficulty |
|---|---|---|---|---|
| Welcome Aboard | first_ride | 1 | 100 | Easy |
| Regular Rider | rides_count | 10 | 200 | Easy |
| Weekend Explorer | weekend_rides | 5 | 150 | Easy |
| Good Parker | parking_zone | 10 | 200 | Medium |
| Century Club | rides_count | 100 | 1000 | Hard |
| Streak Master | streak_days | 7 | 500 | Hard |
| Road Warrior | rides_count | 500 | 2500 | Legendary |
Tips for Success
- Launch with 8-12 achievements - Enough variety without overwhelming
- Add 1-2 new achievements monthly - Keep it fresh
- Use secret achievements sparingly - 2-3 is enough
- Track earning rates - Adjust difficulty if too easy or hard
- Promote difficult achievements - Highlight customers who earn rare badges
Frequently Asked Questions
General Questions
Q: Can customers lose achievements they've earned? A: No, once earned, achievements are permanent.
Q: Are achievements account-specific? A: Yes, each account/fleet can have its own achievements.
Q: Can I create the same achievement for multiple subaccounts? A: Yes, you'll need to create it separately for each subaccount.
Trigger Questions
Q: When are achievements checked? A: After every ride completion, the system checks all applicable triggers.
Q: What if a customer meets multiple achievement criteria at once? A: All applicable achievements are awarded simultaneously.
Q: Can I use custom trigger logic? A: Not currently. Contact support for complex trigger requirements.
Reward Questions
Q: Do achievement points count toward tier qualification? A: No, only ride spending counts toward tier progress. Achievement points are bonus.
Q: Can I award something other than points? A: Currently, achievements only award points. Wallet credits can be done through challenges.
Q: Is there a limit to points I can award? A: Technically no, but we recommend keeping individual achievements under 10,000 points.
Technical Questions
Q: What happens to achievements if I delete them? A: They're deactivated but customer earning records are preserved.
Q: Can I edit an achievement's trigger after creation? A: Yes, but it won't retroactively award or revoke from customers.
Q: How do I make achievements available to all subaccounts? A: Create them for each subaccount individually, or contact support for bulk creation.
Technical Reference
Trigger Type Mapping
| UI Name | API Value | Description |
|---|---|---|
| Total Rides | rides_count | Lifetime ride count |
| Distance (km) | distance_km | Cumulative distance |
| Streak Days | streak_days | Consecutive riding days |
| First Ride | first_ride | Completion of first ride |
| Parking Zone Ends | parking_zone | Rides ending in preferred zones |
| Weekend Rides | weekend_rides | Saturday/Sunday rides |
| Points Earned | points_earned | Cumulative points |
| CO2 Saved | eco_distance | Environmental impact (km × 0.12) |
| Time of Day | time_of_day | Specific hour triggers |
| Tier Reached | tier_reached | Tier upgrade triggers |
| Referrals | referrals | Successful referral count |
| Monthly Rides | monthly_rides | Rides within calendar month |
Database Schema
achievements table:
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| account_id | uuid | Parent account |
| name | text | Display name |
| description | text | How to earn |
| trigger_type | text | Trigger identifier |
| trigger_value | int | Numeric threshold |
| trigger_metadata | jsonb | Additional config |
| points_reward | int | Points awarded |
| badge_icon_url | text | Custom icon |
| badge_color | text | Hex color |
| is_repeatable | boolean | Multiple earnings |
| repeat_cooldown_days | int | Days between earnings |
| is_secret | boolean | Hidden until earned |
| is_active | boolean | Enabled status |
| sort_order | int | Display order |
| created_at | timestamp | Creation date |
| updated_at | timestamp | Last update |
customer_achievements table:
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| customer_id | uuid | Customer reference |
| achievement_id | uuid | Achievement reference |
| account_id | uuid | Parent account |
| times_earned | int | Earning count |
| first_earned_at | timestamp | Initial earning |
| last_earned_at | timestamp | Most recent earning |
| total_points_earned | int | Cumulative points |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/loyalty/achievements | GET | List achievements |
/api/loyalty/achievements | POST | Create achievement |
/api/loyalty/achievements/[id] | GET | Get achievement |
/api/loyalty/achievements/[id] | PUT | Update achievement |
/api/loyalty/achievements/[id] | DELETE | Deactivate achievement |
Need Help?
For achievements configuration assistance, contact support@levyelectric.com.