This commit adds a complete gamification system with analytics dashboards, leaderboards, and enhanced badge tracking functionality. Backend Features: - Analytics API with overview, user stats, activity trends, top contributors, and street statistics endpoints - Leaderboard API supporting global, weekly, monthly, and friends views - Profile API for viewing and managing user profiles - Enhanced gamification service with badge progress tracking and user stats - Comprehensive test coverage for analytics and leaderboard endpoints - Profile validation middleware for secure profile updates Frontend Features: - Analytics dashboard with multiple tabs (Overview, Activity, Personal Stats) - Interactive charts for activity trends and street statistics - Leaderboard component with pagination and timeframe filtering - Badge collection display with progress tracking - Personal stats component showing user achievements - Contributors list for top performing users - Profile management components (View/Edit) - Toast notifications integrated throughout - Comprehensive test coverage for Leaderboard component Enhancements: - User model enhanced with stats tracking and badge management - Fixed express.Router() capitalization bug in users route - Badge service improvements for better criteria matching - Removed unused imports in Profile component This feature enables users to track their contributions, view community analytics, compete on leaderboards, and earn badges for achievements. 🤖 Generated with OpenCode Co-Authored-By: AI Assistant <noreply@opencode.ai>
74 lines
1.7 KiB
JSON
74 lines
1.7 KiB
JSON
{
|
|
"name": "frontend",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"dependencies": {
|
|
"@stripe/stripe-js": "^6.0.0",
|
|
"@testing-library/dom": "^10.4.0",
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.2.0",
|
|
"@testing-library/user-event": "^13.5.0",
|
|
"axios": "^1.8.3",
|
|
"caniuse-lite": "^1.0.30001753",
|
|
"leaflet": "^1.9.4",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"react-leaflet": "^5.0.0",
|
|
"react-router-dom": "^6.28.0",
|
|
"react-scripts": "5.0.1",
|
|
"react-toastify": "^11.0.5",
|
|
"recharts": "^3.3.0",
|
|
"socket.io-client": "^4.8.1",
|
|
"web-vitals": "^2.1.4"
|
|
},
|
|
"proxy": "http://localhost:5000",
|
|
"scripts": {
|
|
"start": "react-scripts start",
|
|
"build": "react-scripts build",
|
|
"test": "react-scripts test",
|
|
"test:coverage": "react-scripts test --coverage --watchAll=false",
|
|
"test:watch": "react-scripts test",
|
|
"eject": "react-scripts eject",
|
|
"lint": "echo 'Frontend linting not configured'",
|
|
"dev": "react-scripts start"
|
|
},
|
|
"jest": {
|
|
"collectCoverageFrom": [
|
|
"src/**/*.{js,jsx}",
|
|
"!src/index.js",
|
|
"!src/reportWebVitals.js",
|
|
"!src/setupTests.js",
|
|
"!src/mocks/**"
|
|
],
|
|
"coverageThreshold": {
|
|
"global": {
|
|
"branches": 50,
|
|
"functions": 60,
|
|
"lines": 60,
|
|
"statements": 60
|
|
}
|
|
}
|
|
},
|
|
"eslintConfig": {
|
|
"extends": [
|
|
"react-app",
|
|
"react-app/jest"
|
|
]
|
|
},
|
|
"browserslist": {
|
|
"production": [
|
|
">0.2%",
|
|
"not dead",
|
|
"not op_mini all"
|
|
],
|
|
"development": [
|
|
"last 1 chrome version",
|
|
"last 1 firefox version",
|
|
"last 1 safari version"
|
|
]
|
|
},
|
|
"devDependencies": {
|
|
"msw": "^2.11.6"
|
|
}
|
|
}
|