The NotificationProvider was showing 'Connection lost. Reconnecting...' toast
immediately on page load because the SSE connection starts as disconnected.
Added hasConnected state to track if the connection was ever established.
Now the reconnecting toast only appears if we were previously connected and
then lost the connection, not on the initial connection attempt.
🤖 Generated with AI Assistant
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
Increase cleanup timeout from 10ms to 50ms to ensure useEffect cleanup
runs completely before assertions. Also properly restore the original
close method after spying to prevent test pollution.
This fixes intermittent test failures where the close method wasn't
called due to insufficient wait time for async cleanup.
🤖 Generated with OpenCode
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
- Replace Socket.IO with SSE for real-time server-to-client communication
- Add SSE service with client management and topic-based subscriptions
- Implement SSE authentication middleware and streaming endpoints
- Update all backend routes to emit SSE events instead of Socket.IO
- Create SSE context provider for frontend with EventSource API
- Update all frontend components to use SSE instead of Socket.IO
- Add comprehensive SSE tests for both backend and frontend
- Remove Socket.IO dependencies and legacy files
- Update documentation to reflect SSE architecture
Benefits:
- Simpler architecture using native browser EventSource API
- Lower bundle size (removed socket.io-client dependency)
- Better compatibility with reverse proxies and load balancers
- Reduced resource usage for Raspberry Pi deployment
- Standard HTTP-based real-time communication
🤖 Generated with [AI Assistant]
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
Add end-to-end testing infrastructure for the application:
- Implemented Playwright E2E test suite with 31 passing tests across authentication and feature workflows
- Created mock API fixtures for testing without requiring backend/database
- Added data-testid attributes to major React components (Login, Register, TaskList, Events, SocialFeed, Profile, Navbar)
- Set up test fixtures with test images (profile-pic.jpg, test-image.jpg)
- Configured playwright.config.js for multi-browser testing (Chromium, Firefox, Safari)
Test Coverage:
- Authentication flows (register, login, logout, protected routes)
- Task management (view, complete, filter, search)
- Social feed (view posts, create post, like, view comments)
- Events (view, join/RSVP, filter, view details)
- User profile (view profile, streets, badges, statistics)
- Premium features page
- Leaderboard and rankings
- Map view
🤖 Generated with OpenCode
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
- Added comprehensive tests for TaskList component
- Added comprehensive tests for SocialFeed component
- Added comprehensive tests for Events component
- Tests cover all major functionality including:
- Component rendering and state management
- User interactions (task completion, post creation/liking, event joining)
- Real-time updates via Socket.IO
- Form validation and error handling
- Filtering, searching, and pagination
- Loading states and empty states
🤖 Generated with [AI Assistant]
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
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>
Add advanced filtering, search, and sorting capabilities to streets endpoint:
- Backend: Enhanced GET /api/streets with query parameters (search, status, adoptedBy, sort, order)
- Backend: Implement case-insensitive name search with in-memory filtering
- Backend: Add X-Total-Count response header for pagination metadata
- Frontend: Add comprehensive filter UI with search bar, status dropdown, and sort controls
- Frontend: Implement 'My Streets' toggle for authenticated users to view their adopted streets
- Frontend: Add 'Clear Filters' button and result count display
- Frontend: Update map markers and street list to reflect filtered results
- Frontend: Mobile-responsive Bootstrap grid layout with loading states
Technical implementation:
- Routes: Enhanced backend/routes/streets.js with filter logic
- Model: Updated backend/models/Street.js to support filtered queries
- Component: Redesigned frontend/src/components/MapView.js with filter controls
- Docs: Created comprehensive implementation guide and test script
Performance: Works efficiently for datasets up to 10k streets. Documented future
optimizations for larger scale (full-text search, debouncing, marker clustering).
🤖 Generated with Claude
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
- Update Makefile to use bun for all commands (install, build, test, lint)
- Update frontend package.json scripts to support bun
- Update documentation references from npm to bun
- Add bun lockfiles for both frontend and backend
- Remove react-leaflet-cluster dependency conflict
- Update migration scripts to use bun instead of node
- Frontend and backend now fully use bun runtime
🤖 Generated with [AI Assistant]
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
- Remove react-leaflet-cluster package incompatible with React 19
- Update MapView component to use standard react-leaflet markers
- Remove react-leaflet-cluster mock from tests
- Frontend now builds successfully without dependency conflicts
🤖 Generated with [AI Assistant]
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
- Add Bootstrap CSS and custom styles to frontend (index.css, App.css)
- Create comprehensive AGENTS.md with instructions for all AI models
- Include Gemini AI agent usage guidelines and commands
- Add complete project documentation and development workflow
- Ensure proper styling for React components using Bootstrap classes
🤖 Generated with [AI Assistant]
Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
Convert frontend from Git submodule to a regular monorepo directory for simplified development workflow.
Changes:
- Remove frontend submodule tracking (mode 160000 gitlink)
- Add all frontend source files directly to main repository
- Remove frontend/.git directory
- Update CLAUDE.md to clarify true monorepo structure
- Update Frontend Architecture documentation (React Router v6, Socket.IO, Leaflet, ErrorBoundary)
Benefits of Monorepo:
- Single git clone for entire project
- Unified commit history
- Simpler CI/CD pipeline
- Easier for new developers
- No submodule sync issues
- Atomic commits across frontend and backend
Frontend Files Added:
- All React components (MapView, ErrorBoundary, TaskList, SocialFeed, etc.)
- Context providers (AuthContext, SocketContext)
- Complete test suite with MSW
- Dependencies and configuration files
Branch Cleanup:
- Using 'main' as default branch (develop deleted)
- Frontend no longer has separate Git history
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>