GoodCommit Feature Request: Comprehensive Achievement & Badge System
Project Context
GoodCommit is a Web3 habit accountability platform built on the Celo blockchain.
Users:
- Stake G$ tokens
- Complete verified workouts
- Complete verified academic quizzes
- Earn points
- Grow virtual plants
- Harvest rewards
- Build streaks
A streak system has already been implemented.
The next feature is a complete Achievement and Badge System.
The goal is to increase motivation, user retention, habit consistency, and long-term engagement through meaningful milestones and rewards.
This system must be designed as a core platform feature and should be expandable for future gamification systems such as XP, Levels, Leaderboards, Seasonal Challenges, and Social Competitions.
Objective
Create a production-ready badge and achievement system.
Users should automatically earn badges when predefined milestones are reached.
Badges should be permanent achievements once unlocked.
The system must be extensible and data-driven.
Avoid hardcoded badge checks scattered throughout the codebase.
High-Level Architecture
Implement:
- Badge Definitions
- Badge Evaluation Engine
- Badge Awarding Service
- Badge Storage
- Badge API
- Badge Notifications
- Frontend Badge Display
- Badge Testing Suite
The architecture should support future badge additions without major code changes.
Badge Categories
Implement support for multiple categories.
Suggested categories:
- Streak Badges
- Workout Badges
- Academic Badges
- Point Badges
- Plant Growth Badges
- Harvest Badges
- Staking Badges
- Community Badges
- Special Event Badges
Each badge should belong to a category.
Required Initial Badge Set
Streak Badges
First Step
Requirement:
Reach a 1-day streak
Reward:
Badge only
Consistency Builder
Requirement:
Reach a 7-day streak
Habit Warrior
Requirement:
Reach a 30-day streak
Unstoppable
Requirement:
Reach a 100-day streak
Legend
Requirement:
Reach a 365-day streak
Workout Badges
First Workout
Requirement:
Complete first verified workout
Fitness Enthusiast
Requirement:
Complete 25 workouts
Fitness Champion
Requirement:
Complete 100 workouts
Fitness Legend
Requirement:
Complete 500 workouts
Academic Badges
First Quiz
Requirement:
Complete first verified quiz
Scholar
Requirement:
Complete 25 quizzes
Master Scholar
Requirement:
Complete 100 quizzes
Knowledge Legend
Requirement:
Complete 500 quizzes
Plant Growth Badges
Seed Planter
Requirement:
Plant first seed
Growing Strong
Requirement:
Reach Growing stage
Mature Gardener
Requirement:
Reach Mature stage
Master Gardener
Requirement:
Reach Fruiting stage
Staking Badges
First Commitment
Requirement:
Create first stake
Committed
Requirement:
Stake total 500 G$
Dedicated
Requirement:
Stake total 5000 G$
Whale of Commitment
Requirement:
Stake total 25000 G$
Harvest Badges
First Harvest
Requirement:
Perform first harvest
Fruit Collector
Requirement:
Harvest 10 times
Master Harvester
Requirement:
Harvest 100 times
Point Badges
100 Points Earned
Requirement:
Earn 100 total points
1000 Points Earned
Requirement:
Earn 1000 total points
10000 Points Earned
Requirement:
Earn 10000 total points
Badge Data Structure
Create a reusable badge schema.
Suggested structure:
{
id: string,
slug: string,
title: string,
description: string,
category: string,
icon: string,
rarity: string,
requirementType: string,
requirementValue: number,
rewardType: string | null,
rewardValue: number | null
}
User Badge Storage
Each user should have:
{
walletAddress: string,
badges: [
{
badgeId: string,
unlockedAt: Date
}
]
}
Badges can only be unlocked once.
Duplicate awards must be prevented.
Achievement Evaluation Engine
Create a centralized service.
Example:
AchievementService.evaluateUser(walletAddress)
This service should:
- Load user statistics
- Evaluate all badge requirements
- Award newly earned badges
- Return newly unlocked badges
The evaluation engine should be reusable and callable from any feature.
Trigger Points
Badge evaluation should run automatically after:
Workout completed
Quiz completed
Stake created
Harvest completed
Plant stage changed
Streak updated
Point rewards earned
Future activities
Badge Notification System
When a badge is earned:
Display:
🏆 Achievement Unlocked!
Badge Name
Badge Description
Notification should appear immediately.
Frontend should support toast/modal notifications.
Frontend Requirements
Create:
Achievements Page
Badge Collection Page
Profile Badge Section
Recent Achievements Widget
Locked Achievements Section
Badge Display
Each badge should show:
Icon
Name
Description
Unlock Date
Category
Rarity
Status
Locked or Unlocked
Badge Rarity System
Implement rarity levels:
Common
Rare
Epic
Legendary
Mythic
Each badge should have rarity metadata.
This will be useful for future leaderboards and profile displays.
Progress Tracking
Users should see progress toward locked badges.
Examples:
7 Day Streak Badge
Current Progress:
5 / 7 Days
Fitness Champion
Current Progress:
72 / 100 Workouts
This should be exposed through API endpoints.
API Requirements
GET /api/achievements/
Returns:
- unlocked badges
- locked badges
- progress percentages
- achievement statistics
GET /api/achievements/recent
Returns recently earned achievements.
Future XP Integration
Design the system so XP rewards can be attached later.
Example:
{
rewardType: "XP",
rewardValue: 100
}
Do not hardcode XP logic yet.
Just prepare for future compatibility.
Future Leaderboard Compatibility
Design badge metadata so future leaderboards can rank users by:
- Total Badges
- Rare Badges
- Legendary Badges
- Achievement Score
Testing Requirements
Create comprehensive tests for:
Badge unlocks
Duplicate prevention
Progress tracking
Category filtering
Notification triggering
API responses
Existing users
New users
Edge cases
Race conditions
Database persistence
Deliverables
- Badge schema
- User badge storage
- Achievement evaluation engine
- Badge awarding service
- API endpoints
- Notification system
- Frontend achievements page
- Progress tracking
- Unit tests
- Integration tests
- Architecture documentation
- Migration strategy for existing users
The implementation must be scalable, maintainable, production-ready, and capable of supporting thousands of users and future gamification systems without requiring architectural redesign.
GoodCommit Feature Request: Comprehensive Achievement & Badge System
Project Context
GoodCommit is a Web3 habit accountability platform built on the Celo blockchain.
Users:
A streak system has already been implemented.
The next feature is a complete Achievement and Badge System.
The goal is to increase motivation, user retention, habit consistency, and long-term engagement through meaningful milestones and rewards.
This system must be designed as a core platform feature and should be expandable for future gamification systems such as XP, Levels, Leaderboards, Seasonal Challenges, and Social Competitions.
Objective
Create a production-ready badge and achievement system.
Users should automatically earn badges when predefined milestones are reached.
Badges should be permanent achievements once unlocked.
The system must be extensible and data-driven.
Avoid hardcoded badge checks scattered throughout the codebase.
High-Level Architecture
Implement:
The architecture should support future badge additions without major code changes.
Badge Categories
Implement support for multiple categories.
Suggested categories:
Each badge should belong to a category.
Required Initial Badge Set
Streak Badges
First Step
Requirement:
Reach a 1-day streak
Reward:
Badge only
Consistency Builder
Requirement:
Reach a 7-day streak
Habit Warrior
Requirement:
Reach a 30-day streak
Unstoppable
Requirement:
Reach a 100-day streak
Legend
Requirement:
Reach a 365-day streak
Workout Badges
First Workout
Requirement:
Complete first verified workout
Fitness Enthusiast
Requirement:
Complete 25 workouts
Fitness Champion
Requirement:
Complete 100 workouts
Fitness Legend
Requirement:
Complete 500 workouts
Academic Badges
First Quiz
Requirement:
Complete first verified quiz
Scholar
Requirement:
Complete 25 quizzes
Master Scholar
Requirement:
Complete 100 quizzes
Knowledge Legend
Requirement:
Complete 500 quizzes
Plant Growth Badges
Seed Planter
Requirement:
Plant first seed
Growing Strong
Requirement:
Reach Growing stage
Mature Gardener
Requirement:
Reach Mature stage
Master Gardener
Requirement:
Reach Fruiting stage
Staking Badges
First Commitment
Requirement:
Create first stake
Committed
Requirement:
Stake total 500 G$
Dedicated
Requirement:
Stake total 5000 G$
Whale of Commitment
Requirement:
Stake total 25000 G$
Harvest Badges
First Harvest
Requirement:
Perform first harvest
Fruit Collector
Requirement:
Harvest 10 times
Master Harvester
Requirement:
Harvest 100 times
Point Badges
100 Points Earned
Requirement:
Earn 100 total points
1000 Points Earned
Requirement:
Earn 1000 total points
10000 Points Earned
Requirement:
Earn 10000 total points
Badge Data Structure
Create a reusable badge schema.
Suggested structure:
{
id: string,
slug: string,
title: string,
description: string,
category: string,
icon: string,
rarity: string,
requirementType: string,
requirementValue: number,
rewardType: string | null,
rewardValue: number | null
}
User Badge Storage
Each user should have:
{
walletAddress: string,
badges: [
{
badgeId: string,
unlockedAt: Date
}
]
}
Badges can only be unlocked once.
Duplicate awards must be prevented.
Achievement Evaluation Engine
Create a centralized service.
Example:
AchievementService.evaluateUser(walletAddress)
This service should:
The evaluation engine should be reusable and callable from any feature.
Trigger Points
Badge evaluation should run automatically after:
Workout completed
Quiz completed
Stake created
Harvest completed
Plant stage changed
Streak updated
Point rewards earned
Future activities
Badge Notification System
When a badge is earned:
Display:
🏆 Achievement Unlocked!
Badge Name
Badge Description
Notification should appear immediately.
Frontend should support toast/modal notifications.
Frontend Requirements
Create:
Achievements Page
Badge Collection Page
Profile Badge Section
Recent Achievements Widget
Locked Achievements Section
Badge Display
Each badge should show:
Icon
Name
Description
Unlock Date
Category
Rarity
Status
Locked or Unlocked
Badge Rarity System
Implement rarity levels:
Common
Rare
Epic
Legendary
Mythic
Each badge should have rarity metadata.
This will be useful for future leaderboards and profile displays.
Progress Tracking
Users should see progress toward locked badges.
Examples:
7 Day Streak Badge
Current Progress:
5 / 7 Days
Fitness Champion
Current Progress:
72 / 100 Workouts
This should be exposed through API endpoints.
API Requirements
GET /api/achievements/
Returns:
GET /api/achievements/recent
Returns recently earned achievements.
Future XP Integration
Design the system so XP rewards can be attached later.
Example:
{
rewardType: "XP",
rewardValue: 100
}
Do not hardcode XP logic yet.
Just prepare for future compatibility.
Future Leaderboard Compatibility
Design badge metadata so future leaderboards can rank users by:
Testing Requirements
Create comprehensive tests for:
Badge unlocks
Duplicate prevention
Progress tracking
Category filtering
Notification triggering
API responses
Existing users
New users
Edge cases
Race conditions
Database persistence
Deliverables
The implementation must be scalable, maintainable, production-ready, and capable of supporting thousands of users and future gamification systems without requiring architectural redesign.