Commit graph

98 commits

Author SHA1 Message Date
Tim Zöller
1e833d52b6 Add a font 2026-01-05 11:07:15 +01:00
Tim Zöller
4b166c0637 Process activities without GPS better 2026-01-05 10:42:06 +01:00
Tim Zöller
4fe283f246 Account >D
eletion
2026-01-04 08:18:21 +01:00
Tim Zöller
b5164c9617 Fix Weather API access 2026-01-04 07:46:07 +01:00
Tim Zöller
9f13e89632 Fix Weather API access 2026-01-04 07:37:42 +01:00
Tim Zöller
054fa58290 More Logging 2026-01-04 07:31:57 +01:00
Tim Zöller
73dc2e1c15 More Logging 2026-01-04 07:28:44 +01:00
Tim Zöller
fa5c04377c Fix Logging 2026-01-03 22:40:29 +01:00
Tim Zöller
0fe0810f51 Quality of Life, Security 2026-01-03 22:30:04 +01:00
Tim Zöller
5455f8cd36 Fix dark mode contrast issues on notifications page
- Active tab (ALL/UNREAD): Light text on dark background instead of white-on-white
- Unread notifications: Cyan-tinted semi-transparent background for visibility
- Actor names: Light color (#e8e8f0) for proper contrast in dark mode
- Hover states: Dark purple background (#301550) instead of white
- Notification icons: Semi-transparent backgrounds with bright neon colors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-03 21:03:58 +01:00
Tim Zöller
bc63e0f16d Moar Fixes 2026-01-03 20:39:57 +01:00
Tim Zöller
c9b982890a Fix federated follow counts 2026-01-03 20:25:17 +01:00
Tim Zöller
3b18e30cee Undo für Batch Import 2026-01-03 14:57:34 +01:00
Tim Zöller
a19d4870f7 Batch Import 2026-01-03 08:56:57 +01:00
Tim Zöller
7ecb5456cc Fix integration test: Add sourceFileFormat to test activity builder
ActivityControllerIntegrationTest was failing because the helper method
createTestActivity() didn't set the source_file_format field, which
became required after migration V15.

Added sourceFileFormat("FIT") to the Activity builder in the test helper.

Test Results:
-  128 tests passing
-  0 failures
-  0 errors
- 4 tests skipped (expected)

All integration tests now pass with Docker/Testcontainers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 18:03:23 +01:00
Tim Zöller
534d55d6f3 Add Maven profile to skip integration tests when Docker unavailable
Integration tests using Testcontainers require Docker. This profile allows
running unit tests in CI/CD environments or local setups without Docker.

Usage:
  mvn test -P skip-integration-tests

Results:
- 97 unit tests pass
- 18 integration tests skipped (require Docker)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 17:50:06 +01:00
Tim Zöller
f4be439002 Add GPX file support for activity imports
This commit adds comprehensive GPX file support alongside existing FIT file support, enabling users to import activities from Strava, Komoot, and other GPS apps.

## Key Features

### Core Components
- **GpxParser**: Full GPX 1.1 parsing with Garmin TrackPointExtension support
- **GpxFileValidator**: Validation for GPX file format and structure
- **ActivityFileService**: Unified service with automatic format detection (FIT/GPX)
- **ParsedActivityData**: Common data structure for both FIT and GPX files

### GPX Parsing Capabilities
- GPS track point extraction (latitude, longitude, elevation, timestamp)
- Garmin extension data (heart rate, cadence, temperature)
- Activity type detection from GPX metadata
- Distance calculation using Haversine formula
- Elevation gain/loss calculation
- Speed calculation from consecutive GPS points
- Speed smoothing to remove GPS artifacts
- Timezone detection from GPS coordinates
- Moving time vs. stopped time analysis

### Database Changes
- Migration V15: Renamed raw_fit_file → raw_activity_file
- Added source_file_format column (FIT/GPX) with constraint
- Index on source_file_format for performance
- Updated Activity entity with new fields

### Controller & UI Updates
- ActivityController: Now handles both FIT and GPX uploads
- Upload form: Updated to accept .fit and .gpx files
- Help text: Clarified both formats are supported

### Testing
- GpxParserIntegrationTest: 9 comprehensive tests with real GPX file
- Tests cover: parsing, validation, heart rate extraction, distance calculation,
  elevation metrics, speed calculation, chronological ordering, smoothing
- Fixed TrainingLoadServiceTest date issue (testDate outside 30-day window)
- All 97 unit tests passing (integration tests require Docker)

### Technical Details
- Supports GPX 1.0 and 1.1 specifications
- Handles multiple track segments
- Processes Garmin TrackPointExtension v1 and v2
- Same track simplification as FIT (Douglas-Peucker algorithm)
- Consistent JSONB storage format for track points
- Compatible with existing analytics, heatmaps, and image generation

## Testing Summary
-  9/9 GpxParserIntegrationTest tests passing
-  4/4 FitParserIntegrationTest tests passing
-  14/14 FitFileServiceTest tests passing
-  97/97 total unit tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 13:31:05 +01:00
Tim Zöller
66b14ebf7f Add on-demand heatmap rebuild and remove nightly scheduler
- Added rebuild button to heatmap page with loading states
- Added POST /api/heatmap/me/rebuild endpoint for on-demand recalculation
- Removed HeatmapRecalculationScheduler (nightly 3 AM cron job)
- Removed @EnableScheduling annotation since no schedulers remain
- Users can now rebuild their heatmap manually instead of relying on automatic nightly recalculation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 09:21:52 +01:00
Tim Zöller
f391028061 Added Heatmaps 2026-01-01 23:48:05 +01:00
Tim Zöller
c8b37f4720 Darkmode 2025-12-16 15:29:29 +01:00
Tim Zöller
0e092e670b Smoothen Speed 2025-12-16 15:01:20 +01:00
Tim Zöller
75a4f6524c Better Federation Support 2025-12-15 21:59:44 +01:00
Tim Zöller
5b687883b0 Better Federation Support 2025-12-15 21:55:17 +01:00
Tim Zöller
15b420b87a Make webfinger discovery case insensitive 2025-12-15 10:53:51 +01:00
Tim Zöller
fe05e2ffa4 Follow Users on the instance 2025-12-15 10:25:40 +01:00
Tim Zöller
cc59701337 Small visual fixes 2025-12-15 09:07:15 +01:00
Tim Zöller
566fc90249 Small visual fixes 2025-12-15 09:03:15 +01:00
Tim Zöller
7c957e5135 Chart Rendering fixed for analytics 2025-12-15 08:42:39 +01:00
Tim Zöller
6158707daa Fixes 2025-12-14 17:29:33 +01:00
Tim Zöller
1569114593 Quality of Life Improvements 2025-12-14 17:22:36 +01:00
Tim Zöller
114d92c453 Optical improvements, don't duplicate initially created entries 2025-12-14 17:11:24 +01:00
Tim Zöller
ecb9e1f540 Don't duplicated updates activities 2025-12-14 16:12:20 +01:00
Tim Zöller
769e05ee0e Tests 2025-12-05 20:42:20 +01:00
Tim Zöller
cbf4060441 Tests 2025-12-05 20:38:54 +01:00
Tim Zöller
d3dbf8e80a Tests 2025-12-05 20:38:53 +01:00
Tim Zöller
0e81a65d62 Good stuff 2025-12-05 10:21:45 +01:00
Tim Zöller
9e428a0499 Nicer sharepics 2025-12-04 22:39:15 +01:00
Tim Zöller
a32b9e99e0 Nicer sharepics 2025-12-04 22:08:56 +01:00
Tim Zöller
74137a3395 Stuff 2025-12-04 20:23:39 +01:00
Tim Zöller
7b575ff7e4 Stuff 2025-12-04 18:52:58 +01:00
Tim Zöller
5b0648f0d0 Stuff 2025-12-04 18:46:20 +01:00
Tim Zöller
7d07653d2a Stuff 2025-12-04 18:39:01 +01:00
Tim Zöller
1d7000d592 Stuff 2025-12-04 13:22:23 +01:00
Tim Zöller
ac04dbf352 Nice things 2025-12-04 13:14:30 +01:00
Tim Zöller
7e4b1d50d7 Nice things 2025-12-04 13:04:08 +01:00
Tim Zöller
67a8aad4f1 Nice things 2025-12-04 12:53:12 +01:00
Tim Zöller
d06a0d769a Nice things 2025-12-04 12:49:35 +01:00
Tim Zöller
362680f774 Nice things 2025-12-04 12:44:18 +01:00
Tim Zöller
6dccf87aec Nice things 2025-12-04 12:17:14 +01:00
Tim Zöller
da7d58b548 Nice things 2025-12-04 09:09:12 +01:00