🚀 Major Features & Improvements
Push Notification System (#1336, #1348, #1349, #1352, #1353, #1354) 🌟 Community Contribution by @cameronr
- Production-Ready Infrastructure: Complete push notification system with Shoutrrr, webhooks, and script providers
- Advanced Reliability: Circuit breakers, health checks, metrics, and rate limiting for DoS protection
- Comprehensive Telemetry: Privacy-first Sentry integration with 15 Prometheus metrics for observability
- Webhook Provider: Multi-endpoint failover, flexible auth (Bearer/Basic/custom headers), templated JSON payloads
- Secure Token Management: Environment variables, file-based secrets (Docker/Kubernetes), runtime resolution
- Multi-Layer DoS Protection: Circuit breakers + rate limiting + retry backoff + timeout protection
- Maintained Fork Migration: Updated from deprecated
containrrr/shoutrrr
to actively maintainednicholas-fedor/shoutrrr
- Impact: Enterprise-grade notification delivery with full operational visibility and automatic failure recovery
Go 1.25 Modernization (#1292, #1289, #1291, #1294, #1295)
- Enhanced Test Organization: T.Attr() metadata for better CI filtering and debugging across test suite
- Modern WaitGroup Patterns: sync.WaitGroup.Go() for cleaner goroutine management
- API v2 Test Improvements: Leverages Go 1.25 features with comprehensive test coverage
- Devcontainer Upgrade: Go 1.25.1 with TensorFlow dependencies
- myaudio Tests: Modernized with Go 1.25 features, fixed test timeouts
- Documentation: Comprehensive Go 1.25 testing features and upgrade infrastructure guide
- Impact: Improved test reliability, maintainability, and developer experience with latest Go features
Audio Capture Enhancements (#1268, #1269)
- Dynamic Capture Length: User-configurable 10-60 seconds (replaces fixed 15-second)
- Pre-Capture Timing: Configurable 0 to 1/2 of capture length for better detection coverage
- Audio Gain Adjustment: -40 to +40 dB using FFmpeg volume filter
- EBU R128 Normalization: Professional loudness normalization (target LUFS, loudness range, true peak)
- Professional UI Controls: Capture length slider, gain slider, normalization controls with progressive disclosure
- Real-Time Validation: Dynamic pre-capture validation prevents misconfiguration
- Impact: Flexible audio processing tailored to various recording environments and bird species
Dashboard User Experience (#1312)
- Sticky Date Selection: Smart 30-minute date retention using hybrid URL + localStorage
- Priority Logic: URL parameters → Recent localStorage → Current date fallback
- Browser Navigation: Proper support for back/forward buttons with date persistence
- Configurable Retention: 15-30 minute retention period (30 minutes default)
- Impact: Seamless dashboard navigation without constantly re-selecting dates
Podman Support (#1248)
- Complete Parallel Support: Full Podman configuration alongside existing Docker functionality
- Docker-to-Podman Migration: Automatic conflict detection, graceful service transition, data preservation
- Rootless Container Support: Enhanced security with rootless Podman containers
- Multi-Platform: Tested on Fedora, Ubuntu, Debian, RHEL family
- Backward Compatible: Existing Docker configurations continue working unchanged
- Impact: Modern container runtime options with enhanced security for advanced users
FFmpeg Version Detection (#1343, #1345)
- Runtime Version Detection: Automatic FFmpeg version detection for intelligent feature decisions
- Spectrogram Optimization: Eliminates unnecessary ffprobe calls on FFmpeg 7.x+
- Bug Workaround: Handles FFmpeg 5.x duration metadata bug automatically
- Zero User Impact: All optimizations happen transparently based on detected version
- Impact: Improved performance and reliability across different FFmpeg versions
Hemisphere-Aware Seasonal Tracking (#1323)
- Smart Hemisphere Detection: Automatic detection from latitude coordinates
- Correct Seasonal Display: Proper "spring" for southern hemisphere users (previously showed "fall")
- Generalized Year-Crossing: Handles any season starting in previous year
- No Configuration Required: Eliminates manual config file editing workaround
- Impact: Accurate seasonal bird tracking for users worldwide
Docker Base Image Upgrade (#1340)
- Debian 13 Trixie: Upgraded from Debian 12 Bookworm to latest stable Debian 13
- Security Updates: Latest system packages and security fixes
- Multi-Platform Verified: linux/amd64 and linux/arm64 tested
- Go 1.25.1 Maintained: Consistent Go build environment
- Impact: Latest security patches and improved platform compatibility
🔧 Bug Fixes & Reliability
Critical Bug Fixes (#1350, #1351, #1341, #1307, #1338, #1344)
- Linter Zero-Error Policy: All golangci-lint errors resolved with improved maintainability (#1350)
- Goroutine Leak Fixed: Toast filter tests now properly clean up goroutines (#1351)
- MinDetections Accuracy: Removed incorrect detection window scaling from minDetections calculation (#1341)
- Temp File Race Conditions: Properly handle temp file race conditions during disk walk (#1307)
- Transaction Isolation: Add isolation to GetSpeciesSummaryData to prevent race conditions (#1338)
- Install Script Cleanup: Clean up parent directory when empty after data removal (#1344)
MQTT Improvements (#1287, #1288, #1229, #1241)
- Reconnection Cooldown: Resolved automatic reconnection cooldown conflict (#1287)
- Node Name in Messages: Added node name to sound level MQTT messages (#1288)
- Occurrence Values: Fixed missing occurrence values in MQTT messages (#1229)
- EOF Error Handling: Improved disconnect timeout handling to prevent EOF errors (#1241)
Database & Query Fixes (#1226, #1326, #1333, #1242, #1309)
- Column Mismatch: Removed non-existent source_safe column from search query (#1226)
- MySQL Syntax: Resolved MySQL syntax error in analytics datetime queries (#1326)
- NULL Handling: Handle NULL species_code values in analytics queries (#1333)
- Timestamp Race Condition: Resolved race condition in species summary endpoint (#1242)
- Grid Sorting: Improved daily summary grid sorting stability (#1309)
Frontend Fixes (#1313, #1310, #1332, #1290, #1219, #1225)
- DatePicker Improvements: Enhanced i18n, types, and accessibility (#1313)
- Spectrogram Alignment: Fixed container alignment and loading states (#1310)
- Form Validation: Removed form validation from support dump fields (#1332)
- iOS Safari Playback: Fixed audio playback through Cloudflare on iOS Safari (#1290)
- Timezone Bugs: Resolved timezone bugs in date string parsing across frontend (#1219)
- Cache Busting: Version-based cache busting for Svelte assets (#1225)
OAuth & Settings (#1195, #1194, #1193)
- OAuth Callback Fix: Resolved callback URL mismatch causing 404 errors with dual-route support (#1195)
- Security Settings API: Enable security settings updates via API (#1194)
- Node Name & Time Format: Allow updates via web UI (fixes persistent settings bug) (#1193)
- Ampersands in RTSP URLs: Allow ampersands in RTSP URL query parameters (#1257)
- URL Parsing: Removed strict RTSP URL parsing to prevent regression (#1222)
Species Tracking (#1205, #1201, #1293)
- Winter Season Bug: Resolved winter season adjustment bug in species tracking (#1205)
- Config Persistence: Resolve zero value omission in species configuration (#1201)
- Package Refactoring: Moved species tracker to dedicated package for better organization (#1293)
Testing & Reliability (#1217, #1238, #1285)
- Imageprovider Tests: Resolved test timeout and goroutine leaks (#1217)
- Wikipedia API: Improved logging and fixed Wikipedia API issues (#1238)
- Disk Manager: Ignore .temp files during directory walk (#1285)
Memory & Performance (#1296)
- Disk Manager Optimization: Optimized memory usage and reduced allocations (#1296)
📦 Installation & Support Improvements
Install Script Enhancements (#1224, #1228, #1247)
- Version Management: Comprehensive version management and rollback system
- Port Validation: Checks all required ports (80, 443, 8080, 8090) before installation
- Process Identification: Shows which processes are using occupied ports with actionable error messages
- GitHub Issue Requirement: Mandatory GitHub issue number for support uploads
- Support Bundle Diagnostics: Comprehensive diagnostic collection including journal logs, file logs, config/system collection
Cockpit Integration (#1243)
- Optional Installation: Cockpit web-based management as final installation step
- Smart Status Tracking: Tracks user choice to avoid repeated prompts
- Existing Installation Detection: Detects if Cockpit already installed
- Impact: Easy system management option for users preferring web-based admin tools
Spectrogram Improvements (#1277, #1310, #1345)
- Generation Resiliency: Improved spectrogram generation reliability (#1277)
- Container Alignment: Fixed alignment and loading states (#1310)
- FFmpeg 7.x Optimization: Optimized generation for FFmpeg 7.x+ (#1345)
Wikipedia Provider (#1240)
- Circuit Breaker: Enhanced with circuit breaker and lazy initialization
- Reliability: Improved failure handling and recovery
- Impact: More reliable species image and information retrieval
Context Propagation (#1334)
- Analytics Functions: Added context propagation to datastore analytics functions
- Better Cancellation: Improved request cancellation and timeout handling
- Impact: More responsive analytics queries with proper timeout handling
📦 Dependencies & Maintenance
Node.js Upgrade (#1311)
- Upgraded from Node.js v20 to v24 across all build environments
- Modern JavaScript features and improved performance
- Enhanced security with latest LTS version
Go Dependencies (#1276 + multiple Dependabot PRs)
- Updated to latest versions of all major dependencies
- github.com/stretchr/testify v1.10.0 → v1.11.1
- google.golang.org/api v0.247.0 → v0.251.0
- github.com/markbates/goth v1.81.0 → v1.82.0
- github.com/eclipse/paho.mqtt.golang v1.5.0 → v1.5.1
- github.com/getsentry/sentry-go v0.35.1 → v0.35.3
- golang.org/x/net v0.43.0 → v0.44.0
- golang.org/x/sync v0.16.0 → v0.17.0
- golang.org/x/time v0.12.0 → v0.13.0
- gorm.io/gorm v1.30.1 → v1.31.0
- go.uber.org/mock v0.5.2 → v0.6.0
Frontend Dependencies (#1280, #1324)
- vite v7.0.6 → v7.1.5
- tar-fs v3.1.0 → v3.1.1 (security update)
License Documentation (#1216, #1256, #1275, #1286, #1322, #1331, #1346, #1251, #1337)
- Multiple dependency license documentation updates
- Automated AUTHORS file updates
Documentation (#1327) 🌟 Community Contribution by @Maarc
- Minor typo fixes in documentation
Full Changelog: nightly-20250825...nightly-20251007