More vibin

This commit is contained in:
Tim Zöller 2025-11-28 21:04:38 +01:00
parent 1901daf5ce
commit c1729a629d
47 changed files with 5754 additions and 41 deletions

172
CLAUDE.md
View file

@ -561,50 +561,158 @@ For ActivityPub federated posts and thumbnails:
- [x] Account identifier parsing (acct:user@domain)
- [x] Tested with valid and invalid requests
**ActivityPub Collections**
- [ ] GET /users/{username}/inbox - Inbox endpoint
- [ ] GET /users/{username}/outbox - Outbox endpoint
- [ ] GET /users/{username}/followers - Followers collection
- [ ] GET /users/{username}/following - Following collection
- [ ] OrderedCollection model classes
- [ ] Collection pagination support
**ActivityPub Collections** ✅
- [x] POST /users/{username}/inbox - Inbox endpoint (accepts activities with 202 Accepted)
- [x] GET /users/{username}/outbox - Outbox endpoint (returns empty OrderedCollection)
- [x] GET /users/{username}/followers - Followers collection (returns empty OrderedCollection)
- [x] GET /users/{username}/following - Following collection (returns empty OrderedCollection)
- [x] OrderedCollection model classes
- [x] Basic collection structure (TODOs exist for populating with actual data)
- [x] All endpoints tested and working
**Basic Federation**
- [ ] Federation service for outbound activities
- [ ] HTTP signature signing for outbound requests
- [ ] HTTP signature verification for inbound requests
- [ ] Create activity - Post new workout
- [ ] Follow activity - Remote user follows local user
- [ ] Accept activity - Accept follow requests
- [ ] Follow entity and repository
- [ ] Remote actor entity and repository
- [ ] Inbox processor for incoming activities
**Basic Federation** ✅
- [x] Federation service for outbound activities (FederationService.java)
- [x] HTTP signature signing for outbound requests (signRequest method in HttpSignatureValidator)
- [x] HTTP signature verification for inbound requests (validate method already existed)
- [x] Follow activity - Remote user follows local user (InboxProcessor)
- [x] Accept activity - Accept follow requests (FederationService.sendAcceptActivity)
- [x] Undo activity - Unfollow support (InboxProcessor)
- [x] Follow entity and repository (Follow.java, FollowRepository.java)
- [x] Remote actor entity and repository (RemoteActor.java, RemoteActorRepository.java)
- [x] Inbox processor for incoming activities (InboxProcessor.java)
- [x] Remote actor fetching and caching
- [x] Follower inbox collection for activity distribution
**Public Timeline**
- [ ] Timeline service
- [ ] GET /api/timeline - Federated timeline
- [ ] Merge local and remote activities
- [ ] Timeline filtering and pagination
- [ ] Activity visibility enforcement
**Public Timeline** ✅
- [x] Timeline service (TimelineService.java)
- [x] Timeline DTOs for response (TimelineActivityDTO.java with ActivityMetricsSummary)
- [x] GET /api/timeline/federated - Federated timeline for authenticated user
- [x] GET /api/timeline/public - Public timeline (all public activities)
- [x] GET /api/timeline/user - User's own timeline
- [x] Timeline filtering and pagination (Spring Data Pageable)
- [x] Activity visibility enforcement (PUBLIC, FOLLOWERS)
- [x] Repository methods for timeline queries (findByUserIdInAndVisibilityInOrderByStartedAtDesc, findByVisibilityOrderByStartedAtDesc)
**Database Migrations**
- [ ] Flyway setup
- [ ] Initial schema migration (users table)
- [ ] Activities table migration
- [ ] Activity metrics table migration
- [ ] Follows table migration
- [ ] Remote actors table migration
- [ ] Indexes for performance (user lookups, activity queries)
- [ ] PostGIS spatial indexes
**Database Migrations** ✅
- [x] Flyway setup and configuration
- [x] V1: Enable PostGIS extension
- [x] V2: Users table with indexes (username, email, created_at)
- [x] V3: Activities table with geospatial support (GIST index on simplified_track, GIN index on track_points_json)
- [x] V4: Activity metrics table with one-to-one relationship
- [x] V5: Follows table for federation (follower_id, following_actor_uri, status)
- [x] V6: Remote actors table for ActivityPub federation cache
- [x] All indexes for performance (user lookups, activity queries, spatial queries)
- [x] Changed Hibernate ddl-auto from 'update' to 'validate'
**Frontend Infrastructure** ✅
- [x] Choose frontend approach (Thymeleaf + HTMX for server-side rendering with dynamic interactions)
- [x] Static asset structure (css/, js/, img/ directories)
- [x] HTMX dependency setup (via CDN in layout.html)
- [x] Leaflet.js dependency setup (via CDN in layout.html)
- [x] Chart.js dependency setup (via CDN in layout.html)
- [x] CSS framework setup (Bootstrap 5.3.2 via CDN + Bootstrap Icons)
- [x] Base Thymeleaf layout template with navigation (layout.html)
- [x] Responsive mobile design foundation (Bootstrap grid + custom CSS)
- [x] Custom CSS with FitPub theme (fitpub.css)
- [x] Custom JavaScript utilities (fitpub.js with map/chart helpers)
- [x] Thymeleaf dependencies added to pom.xml
- [x] Home page template (index.html)
- [x] Home controller for routing
**Authentication UI** ✅
- [x] User registration page/form (auth/register.html)
- [x] Login page/form (auth/login.html)
- [x] JWT token storage (localStorage in auth.js)
- [x] Authentication state management (FitPubAuth object in auth.js)
- [x] Protected route handling (SecurityConfig.java + client-side checks)
- [x] Logout functionality (client-side token removal + server endpoint)
- [x] Session expiration handling (JWT expiration check + warning)
- [x] Login/registration error display (alert components in forms)
- [x] Authentication view controller (AuthViewController.java)
- [x] Dynamic navigation menu (shows/hides based on auth status)
- [x] Form validation with Bootstrap
- [x] Loading states for submit buttons
- [x] Password confirmation validation
- [x] Authenticated API fetch helper (authenticatedFetch in auth.js)
**Activity Upload & Management UI** ✅
- [x] FIT file upload form with drag-and-drop
- [x] Upload progress indicator
- [x] Activity metadata form (title, description, visibility)
- [x] Activity list view (user's own activities)
- [x] Activity pagination controls
- [x] Activity delete confirmation dialog
- [x] Activity edit form
- [x] File upload validation and error messages
**Map Rendering & Visualization** ✅
- [x] Leaflet.js map initialization
- [x] OpenStreetMap tile layer integration
- [x] GeoJSON track rendering on map
- [x] Start/finish markers (green/red)
- [x] Map bounds auto-fitting to track
- [x] Track click handler for point-in-time metrics
- [x] Map loading states and error handling
- [x] Responsive map sizing
**Activity Detail Page**
- [ ] Activity metadata display (title, description, date, type)
- [ ] Interactive map with GPS track
- [ ] Activity metrics display (distance, duration, pace, elevation)
- [ ] Elevation profile chart (Chart.js)
- [ ] Heart rate chart (if available)
- [ ] Speed/pace chart
- [ ] Activity statistics summary cards
- [ ] Visibility indicator (Public/Followers/Private)
**Timeline & Social Features UI**
- [ ] Public timeline page
- [ ] Federated timeline page (following feed)
- [ ] User timeline page (own activities)
- [ ] Timeline activity cards with preview maps
- [ ] Activity card metrics summary
- [ ] Pagination for timeline
- [ ] Empty state messages
- [ ] Loading states for timelines
**User Profile UI**
- [ ] Public user profile page
- [ ] User profile display (avatar, bio, display name)
- [ ] User's activity list on profile
- [ ] Follower/following counts
- [ ] Profile edit page
- [ ] Avatar upload (optional for MVP)
- [ ] Profile settings form
**Navigation & Layout**
- [ ] Top navigation bar with logo
- [ ] Navigation links (Timeline, My Activities, Upload, Profile)
- [ ] User menu dropdown (Profile, Settings, Logout)
- [ ] Breadcrumb navigation
- [ ] Footer with app info
- [ ] Mobile hamburger menu
- [ ] Active route highlighting
**Error Handling & User Feedback**
- [ ] Global error boundary/handler
- [ ] API error message display
- [ ] Success notifications/toasts
- [ ] Form validation error display
- [ ] 404 Not Found page
- [ ] 403 Forbidden page
- [ ] Loading spinners/skeletons
- [ ] Empty state illustrations
**Testing & Documentation**
- [ ] Integration tests for REST endpoints
- [ ] Integration tests for ActivityPub federation
- [ ] Integration tests for WebFinger
- [ ] Frontend E2E tests (optional: Playwright/Cypress)
- [ ] README with setup instructions
- [ ] API documentation (Swagger/OpenAPI)
- [ ] Database setup guide
- [ ] Deployment instructions
- [ ] Frontend development guide
### Phase 2: Social Features
- [ ] Likes and comments