alexjustesen/speedtest-tracker
61.0
Adequate · 19 September 2026
15.4k
lines of production code
PHP
primary language
1
measurement over time
What this system is
This system is a self-hosted network performance monitoring application that automates the execution of Ookla speedtests and tracks the resulting download, upload, and latency metrics. It provides a Filament-based admin interface for configuring scheduled tests, setting performance thresholds, and managing user access, while offering a public dashboard for visualizing historical data through interactive charts. The platform supports extensive external integrations, including InfluxDB and Prometheus for metrics storage, and a wide array of notification channels for alerting on test completions or threshold breaches.
How it got here
2022 — Framework migration and feature expansion
31 changes.
The project underwent a major upgrade to Laravel 11/12 and Filament v3/v4, restructuring the codebase to use modern framework conventions and simplified configuration. This period introduced significant new features, including Prometheus metrics, role-based access control, and expanded notification and data integration settings. The work also involved refactoring core models, jobs, and middleware to support these enhancements while standardizing network speed units and improving developer onboarding.
2023–2024 — Filament v3/v4 migration and notification overhaul
36 changes.
The project upgraded its admin panel to Filament v3 and v4, integrating Tailwind CSS v4 and restructuring the UI with new layout components and chart widgets. Simultaneously, the notification system was significantly expanded with new listeners for services like Slack and Ntfy, while deprecated channels were marked for migration to Apprise. Underlying infrastructure improvements included refactoring speedtest jobs into a multi-stage pipeline and adding InfluxDB v2 support.
2025–2026 — API v1 launch and Filament v4 migration
42 changes.
This period focused on launching a comprehensive API v1 for speedtest data management and introducing multi-language support for French, Spanish, Dutch, and German. The admin interface was significantly upgraded by migrating to Filament v4, which included restructuring settings for data integration, notifications, and thresholds, alongside adding new tools for server management and API token administration.
Features
API documentation and schema definitions added
The API now includes formal OpenAPI documentation and schema definitions for the Results, Speedtests, and Stats endpoints. This introduces structured request/response schemas (such as Result, ResultsCollection, and Stats) and explicitly documents query parameters for filtering (e.g., by ping, download, upload, date ranges) and sorting. It also clarifies that the API requires an Accept header set to application/json and defines standard error response formats for authentication and validation issues.
app/OpenApi · high confidence
Add Apprise notification channel
Introduces a new Apprise notification channel that sends notifications to an Apprise server via HTTP POST. The channel retrieves the server URL and SSL verification settings from the application's notification settings, constructs a JSON payload with the notification's URLs, title, body, type, format, and tags, and handles errors by logging details and re-throwing exceptions for queue handling.
app/Notifications · high confidence
Add server name and ID display to result tables
A new Filament table column component has been introduced to display the associated server's name and ID within result tables. This change adds a dedicated Blade view and PHP column class that render the server name alongside its ID in parentheses, providing users with immediate context about the server linked to each result entry.
app/Filament/Tables, resources/views/filament/tables · high confidence
Added Brazilian Portuguese (pt\_BR) translations
Added a new Brazilian Portuguese (pt\_BR) localization, providing translated strings for the application's interface. This includes translations for authentication, dashboard widgets, speedtest results, API token management, user settings, notification channels (Apprise, Webhook, Mail), data integrations (InfluxDB, Prometheus), and validation messages.
_lang/pt\BR · high confidence
Added Dutch (nl\_NL) language support
This change introduces a complete set of Dutch translation files for the application, enabling users to switch the interface language to Dutch. The new locale covers all major areas including authentication, dashboard widgets, speedtest results and metrics, API token management, user settings, and system validation messages. This allows Dutch-speaking users to interact with the platform in their native language.
_lang/nl\NL · high confidence
Added Dutch translations for Data Integration, Notifications, and Thresholds settings
The application now includes Dutch (nl\_NL) localization for three previously untranslated settings sections. Users can now configure and view Data Integration options (including InfluxDB v2 and Prometheus endpoints), Notification channels (Database, Mail, Apprise, and Webhooks), and Speedtest Thresholds (absolute limits for download, upload, and ping) in Dutch.
_lang/nl\NL/settings · high confidence
Added French language support
The application now includes a complete French (fr\_FR) localization, allowing users to switch their interface language to French. This update adds translation files for all core areas, including authentication, dashboard widgets, speedtest results, API token management, user settings, and validation error messages.
_lang/fr\FR · high confidence
Added Ntfy, Pushover, and Slack listeners for speedtest notifications
New event listeners have been added for the Ntfy, Pushover, and Slack notification channels to handle speedtest completion and threshold-failure events. These listeners check the respective channel settings and, when enabled, dispatch notifications containing speedtest metrics (such as download, upload, and ping) or details about breached absolute thresholds. This extends the application's notification capabilities to include these three additional services.
app/Listeners/Ntfy, app/Listeners/Pushover, app/Listeners/Slack · high confidence
Added Spanish (es\_ES) localization
The application now supports Spanish (es\_ES) for its user interface. This update adds translation files covering authentication, dashboard widgets, API token management, speed test results, server settings, user management, and validation messages, allowing Spanish-speaking users to interact with the platform in their native language.
_lang/es\ES · high confidence
Added speedtest action to the topbar
The topbar now includes a speedtest action button alongside the dashboard action. This new component renders the speedtest action unconditionally and conditionally renders the dashboard action based on the $showDashboard flag, providing users with direct access to run a speedtest from the main navigation area.
resources/views/livewire/topbar · high confidence
Added speedtest email notification templates
New Blade templates have been added to the mail views to handle speedtest-related notifications. Users will now receive structured emails for completed speedtests (including metrics like ping, download, upload, and packet loss) and for threshold breaches (showing benchmark comparisons). A basic test email template is also included for verifying the notification system.
resources/views/mail · high confidence
Added speedtest lifecycle event classes
New event classes have been introduced to track the full lifecycle of speedtest operations, including SpeedtestStarted, SpeedtestRunning, SpeedtestCompleted, SpeedtestFailed, SpeedtestSkipped, SpeedtestChecking, SpeedtestBenchmarking, SpeedtestBenchmarkHealthy, and SpeedtestBenchmarkUnhealthy. Each event carries a Result model instance, enabling listeners to react to specific phases of the speedtest process.
app/Events · high confidence
Admin-only API token management via Filament
Administrators can now manage API tokens through a new Filament resource under Settings. Access to this area is restricted to admin users via the is\_admin check. The interface allows admins to create tokens with specific abilities (results:read, speedtests:run, ookla:list-servers) and expiration dates, view a list of tokens with filtering options, and edit or delete existing tokens.
app/Filament/Resources/ApiTokens · high confidence
Automated creation of testing database in MariaDB container
The MariaDB Docker setup now automatically creates a 'testing' database and grants privileges to the configured user upon initialization. This eliminates the need for manual database setup before running application tests, streamlining the local development and CI/CD workflows for Laravel applications using Sail.
docker/mariadb · high confidence
Automated creation of testing database in MySQL and PostgreSQL containers
The Docker images for MySQL and PostgreSQL now automatically provision a dedicated 'testing' database and, in the case of MySQL, grant the necessary privileges to the configured user upon initialization. This eliminates the need for manual database setup before running tests, streamlining the local development and CI/CD workflows for database-driven applications.
docker/mysql, docker/pgsql · high confidence
Expanded notification channels and data integration settings
The application's settings database has been extended to support a wider variety of notification targets and data integrations. New settings migrations introduce configuration options for Apprise, Prometheus, Discord, Gotify, Ntfy, Pushover, Slack, Webhook, and Healthcheck notifications, allowing users to receive alerts via these platforms. Additionally, InfluxDB settings have been migrated under a new 'dataintegration' namespace, and Prometheus integration settings have been added to enable exporting speedtest data.
database/settings · high confidence
German localization for settings, notifications, and thresholds
Added German translations for the Data Integration settings (including InfluxDB v2 and Prometheus configuration), Notification channels (Database, Mail, Apprise, Webhook), and Thresholds configuration pages, enabling users to interact with these product features in German.
_lang/de\DE/settings · high confidence
InfluxDB v2 integration with expanded metrics and client configuration
The application now supports writing speedtest results to InfluxDB v2, introducing a new client configuration class that reads connection details (URL, token, bucket, org) from settings and a data builder that maps result attributes to InfluxDB points. This change adds specific quantitative fields for download and upload bytes, elapsed times, and latency statistics (average, high, low, jitter) alongside existing metrics, while also including qualitative tags for server details, ISP, and health status to provide more granular monitoring data.
app/Actions/Influxdb · high confidence
Introduce API v1 controllers for results, speedtests, stats, and Ookla servers
The API now includes dedicated v1 controllers that expose new endpoints for managing and viewing speedtest data. Users can list and filter results with pagination and date ranges, retrieve the latest result, fetch aggregated statistics, and trigger new Ookla speedtests via the API. The Ookla controller also allows listing available speedtest servers. These endpoints enforce token-based permissions and return structured JSON responses using the new v1 resource classes.
app/Http/Controllers/Api · high confidence
Introduced client-side Filament notification system
Added a new JavaScript module (\public/js/filament/notifications/notifications.js\) that registers an Alpine.js plugin for rendering notifications. This component handles the display lifecycle, including CSS transitions and animations (with support for reduced-motion preferences), and exposes global JavaScript APIs (\FilamentNotification\, \FilamentNotificationAction\, \FilamentNotificationActionGroup\) to allow applications to programmatically trigger, style, and manage notification events.
public/js/filament/notifications · high confidence
Introduction of Prometheus metrics endpoint and simplified controller base
Users can now access application metrics via a Prometheus-compatible endpoint, controlled by a new 'prometheus\_enabled' setting in the data integration configuration; if disabled, the endpoint returns a 404. Additionally, the base Controller class has been simplified by removing Laravel's default trait inclusions (AuthorizesRequests, DispatchesJobs, ValidatesRequests), meaning any controller relying on these traits for authorization, job dispatching, or request validation must now explicitly import and use them.
app/Http/Controllers · high confidence
Introduction of reusable layout components for application and guest views
The application now provides dedicated view components, AppLayout and GuestLayout, which allow pages to easily render against the main application shell or the guest (unauthenticated) shell respectively. These components accept an optional title parameter and delegate rendering to the underlying 'layouts.app' and 'layouts.guest' Blade templates, standardizing how page headers and layouts are structured across the dashboard and other public-facing pages.
app/View · high confidence
New 'List Ookla Servers' tool page
A new page has been added under the Tools section that allows users to fetch and view a list of Ookla speedtest servers. The page automatically loads the server list on mount and displays the results in a read-only, monospaced text area. Users can manually refresh the list via a header action and copy the JSON output to their clipboard with a single click, with notifications provided for success or error states.
app/Filament/Pages/Tools · high confidence
New API v1 endpoints for results, speedtests, Ookla servers, and stats
The application now exposes a new API v1 route configuration that consolidates access to speedtest data and infrastructure metrics. Users can retrieve a list of results, fetch the most recent result, or view a specific result by ID. Additionally, the API allows triggering new speedtests, fetching the list of available Ookla servers, and accessing aggregated statistics.
routes/api · high confidence
New CSV export for network test results
A new ResultExporter class has been added to the Filament admin panel, enabling users to export network test results as CSV files. The export includes core metadata such as ID, service, status, scheduling flag, health status, timestamps, and comments. Additionally, it dynamically flattens nested JSON data from individual results into separate columns, ensuring that variable data points (like latency or packet loss) are included in the output without requiring a fixed schema.
app/Filament/Exports · high confidence
New Filament v4 chart widgets with latency breakdowns and averages
The dashboard now uses new Filament v4 chart widgets for recent speed test results. Download, upload, and ping charts now display a solid red average line alongside the primary metric, while download and upload latency charts show separate lines for average, high, and low latency values. Jitter charts now display download, upload, and ping jitter on a single axis. All charts support 24-hour, week, and month time ranges, use configurable datetime formatting and timezone settings, and respect the 'begin at zero' and 'grace' scale options.
app/Filament/Widgets · high confidence
New JavaScript module for Filament schema component logic
A new JavaScript file, public/js/filament/schemas/schemas.js, has been added to the distribution. This module registers Alpine.js components (filamentSchema, filamentSchemaComponent, filamentActionsSchemaComponent) and Livewire message interceptors to handle schema-specific behaviors such as form validation error scrolling, client-side state resets, and dynamic schema component loading.
public/js/filament/schemas · high confidence
New Ookla Servers listing page in Tools
A new Filament page has been added to the Tools section for listing Ookla servers. The view displays a loading state while data is fetched and renders a form component once loaded, allowing users to interact with the server list within the admin panel.
resources/views/filament/pages/tools · high confidence
New ResultDataAttributes trait exposes detailed network metrics
A new \ResultDataAttributes\ trait has been added to the \app/Models/Traits\ directory, providing convenient accessors for detailed network test results. This trait extracts and formats specific data points from the underlying result payload, including download and upload speeds (converted to bits), latency metrics (high, low, IQM), jitter, packet loss, ping jitter, and server information such as host, ID, name, and location. It also exposes the external IP address, ISP, and any error messages associated with the test result.
app/Models/Traits · high confidence
New authorization policies for Results and Users
This change introduces new policy classes for the Result and User models, defining specific access rules for administrative actions. For Results, only administrators can bulk delete or delete individual items, while viewing and updating are allowed for all users. For Users, access is restricted to administrators for viewing, creating, and updating (with a safeguard preventing self-update), and deleting users is prohibited for non-admins and protected against deleting other admins. These policies enforce role-based access control within the application's authorization layer.
app/Policies · high confidence
New client-side table component for record selection and grouping
A new JavaScript module has been introduced at public/js/filament/tables/components/table.js to handle table interactions on the client side. This component manages the state for selected records, supports bulk selection via checkbox clicks (including shift-click ranges), and handles the toggling of collapsed groups. It integrates with Livewire to sync selection state and trigger table actions, providing the frontend logic for the Filament tables interface.
public/js/filament/tables/components · high confidence
New dashboard and getting started pages replace default Laravel welcome view
The application now features a dedicated dashboard view that displays recent speedtest metrics (download, upload, ping, jitter, and latency) via Filament widgets, along with banners for deprecated notification channels and upcoming scheduled tests. A new 'Getting Started' page provides guided links to the admin panel, documentation, and community resources, while the previous default Laravel welcome page has been removed.
resources/views · high confidence
New dedicated Telegram notification classes for speedtest results and channel testing
Users can now receive structured Telegram notifications for speedtest results and verify their Telegram integration via a dedicated test message. This change introduces two new notification classes, SpeedtestNotification and TestNotification, which handle delivery to specific Telegram chat IDs. The SpeedtestNotification allows for configurable content and silent notifications, while the TestNotification sends a standard 'Testing the Telegram notification channel' message, leveraging existing notification settings for options like disabling notifications.
app/Notifications/Telegram · high confidence
New helper classes for speedtest calculations and Ookla CLI integration
This change introduces several new helper classes in app/Helpers to support speedtest functionality. Average.php provides static methods to calculate average download, upload, and ping speeds from result collections. Benchmark.php adds validation logic to check if bitrate and ping values meet defined thresholds. Bitrate.php handles unit conversions between bytes and bits, normalizes bitrate strings, and formats bits into human-readable strings. Network.php includes a utility to check if an IP address falls within a specific network range. Number.php extends Laravel's Number helper with methods to cast types and convert bit values to specific magnitudes or human-readable bit rates. Ookla.php adds utilities to parse error messages from the Ookla CLI, clamp negative metric values returned by the CLI to zero, and retrieve configured speedtest servers.
app/Helpers · high confidence
New services for version checking, scheduled test timing, and Prometheus metrics
This change introduces several new service classes in the application layer. The new GitHub Repository service enables the application to check for available updates by fetching the latest version tag from the GitHub API. The ScheduledSpeedtestService provides logic to calculate the next scheduled test time based on the configured cron expression. The PrometheusMetricsService exports speedtest results (download/upload speeds, ping, jitter, etc.) as Prometheus-compatible metrics, including handling for failed tests. Additionally, a SpeedtestFakeResultGenerator service is added to produce mock speedtest result data, likely for testing or demonstration purposes.
app/Services · high confidence
New settings classes for data integration, notifications, and thresholds
The application introduces three new configuration classes—DataIntegrationSettings, NotificationSettings, and ThresholdSettings—to manage user preferences for external integrations and alerting. DataIntegrationSettings adds support for configuring InfluxDB v2 and Prometheus connections. NotificationSettings centralizes control for a wide range of notification channels (including mail, Telegram, Discord, Ntfy, Pushover, Healthchecks, Slack, Gotify, and Apprise), allowing users to enable/disable specific channels and define triggers for speedtest runs or threshold failures. ThresholdSettings provides configuration for absolute performance thresholds for download, upload, and ping metrics.
app/Settings · high confidence
New settings translations for Data Integration, Notifications, and Thresholds
Added English translation strings for the Data Integration, Notifications, and Thresholds settings sections. This includes configuration labels and help text for InfluxDB v2 and Prometheus integrations, notification channels (Database, Mail, Apprise, Webhook), and absolute threshold metrics, enabling users to configure and test these features in the UI.
lang/en/settings · high confidence
New speedtest notification emails for completed and unhealthy results
Users will now receive queued email notifications for speedtest events. A 'Completed' email is sent when a speedtest finishes, displaying the result ID, service, server details, ISP, ping, download/upload speeds, and packet loss. An 'Unhealthy' email is triggered when speedtest metrics breach configured thresholds, listing the specific metrics (download, upload, ping) that failed, their actual values, and the benchmark limits. A simple 'Test' mail class is also included for verification purposes.
app/Mail · high confidence
Behavioural changes
Added Spanish translations for data integration, notifications, and thresholds settings
Spanish (es\_ES) language files have been added for the Data Integration, Notifications, and Thresholds settings sections. Users can now see the interface labels, descriptions, and helper text for configuring InfluxDB and Prometheus integrations, setting up notification channels (Database, Mail, Apprise, Webhook), and defining speed test thresholds in Spanish.
_lang/es\ES/settings · high confidence
Added async-alpine.js and updated support.js with MD5 and Popper.js
The public/js/filament/support directory now includes a new async-alpine.js file that enables lazy loading of Alpine.js components using strategies like eager, event, idle, media query, and visibility. The support.js file has been updated to bundle the js-md5 library for client-side hashing and the Popper.js library for positioning floating elements, replacing previous implementations.
public/js/filament/support · high confidence
Admin panel configuration migrated to Filament v3 PanelProvider
The admin panel is now configured via a dedicated \AdminPanelProvider\ class, reflecting an upgrade to Filament v3. This change introduces a new user profile interface (non-simple mode), enables database-driven notifications with a 5-second polling interval, and ensures the sidebar remains collapsible on desktop devices. The primary color theme is set to Amber, and the panel path is explicitly defined as 'admin'.
app/Providers/Filament · high confidence
Admin panel resources migrated to Filament v4
The admin panel's Results and Users resources have been rewritten to align with Filament v4, introducing a new structural approach where resources delegate form and table definitions to dedicated schema and table classes. This change updates the UI components for managing users and results, including the addition of a dedicated Users resource with role-based access controls and improved table filtering, while ensuring all labels are translatable via localization keys.
app/Filament/Resources/Results, app/Filament/Resources/Users · high confidence
Apprise notification channel now uses markdown and prevents retry on timeout
The Apprise notification implementation has been updated to send messages in markdown format by default, replacing the previous plain-text approach. Additionally, the notification jobs are now configured with a single retry attempt ($tries = 1) to prevent duplicate notifications when Apprise experiences long response times or timeouts, ensuring that slow but successful deliveries are not retried unnecessarily.
app/Notifications/Apprise · high confidence
Apprise notifications now use Markdown formatting
The Apprise notification templates for speed test completions and threshold breaches have been switched to Markdown. Users will now see structured notifications with bold text, headers, and bullet points for metrics like ping, download/upload speeds, and packet loss, along with clickable links to view results and the dashboard.
resources/views/apprise · high confidence
Bootstrap updated to Laravel 11 application configuration style
The application bootstrap has been refactored to use Laravel 11's new application configuration API. The traditional bootstrap/app.php file is replaced by a fluent builder pattern that explicitly configures providers, routes, middleware, and exceptions. This change introduces new middleware aliases (getting-started, public-dashboard, accept-json), adds AllowedIpAddressesMiddleware to both web and api groups, configures guest/user redirections, sets up proxy trust headers, and enables API throttling, while a new bootstrap/providers.php file explicitly lists the application service providers.
bootstrap · high confidence
Custom 500 Server Error Page
Users encountering a critical server error (HTTP 500) will now see a dedicated, branded error page instead of the default framework response. This new view displays a prominent '500' indicator, a localized message ('Oops, server error'), and a direct link to the documentation's FAQ section for troubleshooting assistance.
resources/views/errors · high confidence
Custom Filament v4 Dashboard page with localized labels
The application now uses a dedicated Dashboard page class in the Filament admin panel (v4) that extends the base Filament Dashboard. This change allows the dashboard title and navigation label to be dynamically retrieved from translation keys (dashboard.title), enabling localization support for the admin interface.
app/Filament/Pages · high confidence
Customized Filament v3 admin theme styling
The admin interface now uses a new Filament v3 theme configuration that hides dashboard and speedtest action labels on mobile screens while keeping them visible on larger displays, and applies bold, underlined styling to helper and hint text links.
resources/css/filament · high confidence
Dashboard UI enhancements and deprecated notification warnings
The dashboard now displays a banner warning users if they have deprecated notification channels (Discord, Gotify, Healthchecks, Ntfy, Pushover, Slack, or Telegram) enabled, helping them migrate away from unsupported integrations. Additionally, a new speedtest button has been added to the topbar, allowing users to manually trigger Ookla speedtests with server selection, while the button size adapts to the current context. The dashboard also features new statistics components showing the latest completed result and platform-wide result counts (total, completed, failed), along with a banner indicating the time of the next scheduled speedtest.
app/Livewire · high confidence
Dashboard UI overhaul with new stats components and deprecation warnings
The dashboard now features several new Livewire view components that change how users interact with and view their data. A new 'Latest Result Stats' component displays the most recent speed test results, including download, upload, ping (rounded to two decimal places), and packet loss, along with benchmark pass/fail indicators and a 'View' button for authenticated users. A 'Next Speedtest Banner' informs users of their upcoming scheduled test time, respecting the configured display timezone and datetime format. Additionally, a 'Deprecated Notification Channels' banner warns users if they are using channels that will be removed in January 2026, prompting migration to Apprise. The 'Platform Stats' component provides a summary of total, completed, and failed tests.
resources/views/livewire · high confidence
Database schema updates for results, settings, and new infrastructure tables
This release updates the database schema to support new application features and infrastructure requirements. The results table now includes columns for benchmarks, health status, download/upload bytes, and the user who dispatched the test, while the settings table has been updated with a unique constraint and a default value for the locked column. New tables have been added to support session storage, application settings, database notifications, caching, job batching, and data import/export operations. Additionally, the users table now supports role-based access control with an initial admin user creation, and the password resets table has been renamed to password\_reset\_tokens to align with framework standards.
database/migrations · high confidence
Default time-range filters added to chart widgets
Chart widgets now include a default set of time-range filters (last 24 hours, last week, last month) via the new HasChartFilters trait, allowing users to quickly select common date ranges without manual configuration.
app/Filament/Widgets/Concerns · high confidence
Deprecation notice added to Telegram and Discord notification templates
The Telegram and Discord notification view templates now display a prominent deprecation warning stating that these notification channels will stop working at the end of January 2026. Users are advised to migrate to Apprise, which supports both Telegram and Discord along with many other services. This change affects the visual output of speedtest completion and threshold breach notifications sent via these channels.
resources/views/telegram · high confidence
Deprecation notices added to Ntfy, Pushover, and Slack notification templates
The notification templates for Ntfy, Pushover, and Slack now include a prominent deprecation notice informing users that these channels will stop working at the end of January 2026. Users are advised to migrate to Apprise, which supports these services and many others. This change affects the visual output of speedtest completion and threshold breach notifications for these specific channels.
resources/views/ntfy, resources/views/pushover, resources/views/slack · high confidence
English localization files restructured and expanded
The English language pack has been significantly reorganized: new translation files have been added for API tokens, the dashboard, enums, errors, general UI elements, results, settings, tools, and users, while existing files for authentication, passwords, and validation have been updated. This change introduces specific strings for token management, dashboard widgets, and result metrics, and refines validation messages (such as password requirements) and attribute labels to improve clarity for end users.
lang/en · high confidence
French localization for settings, notifications, and thresholds
Added French translations for the Data Integration (InfluxDB, Prometheus), Notifications (Database, Mail, Apprise, Webhook), and Thresholds settings pages, enabling users to configure and understand these features in French.
_lang/fr\FR/settings · high confidence
Gotify notification templates now include deprecation warning
The Gotify notification templates for speedtest completion and threshold breaches now display a prominent deprecation notice informing users that the channel will cease to function at the end of January 2026 and recommending a migration to Apprise. This change affects the visual content of Gotify notifications, ensuring users are alerted to the upcoming discontinuation while still receiving the standard speedtest metrics and links.
resources/views/gotify · high confidence
Gotify notifications now render as Markdown
Speedtest completion and threshold-failure notifications sent via Gotify now include the \client::display.contentType\ set to \text/markdown\. This change allows Gotify clients to render the notification body as formatted Markdown rather than plain text, improving readability of the speedtest results and threshold details.
app/Listeners/Gotify · high confidence
Horizon dark theme CSS removed
The pre-built dark theme stylesheet (\app-dark.css\) for the Horizon dashboard has been removed from the public vendor assets. This change eliminates the bundled dark mode styling, meaning the dashboard will no longer load this specific visual theme by default.
public/vendor/horizon · high confidence
Introduces structured enums for result services, statuses, and user roles
The application now uses dedicated PHP enums to manage core domain concepts, replacing previous string-based or hardcoded approaches. ResultService defines the supported speedtest providers (Faker, Ookla), while ResultStatus provides a comprehensive lifecycle for test results (e.g., benchmarking, checking, completed, failed, skipped) with associated UI colors and translatable labels. UserRole similarly standardizes user types (Admin, User) with distinct visual indicators. These enums ensure consistent labeling, color coding, and translation support across the Filament-based UI.
app/Enums · high confidence
Introduction of new application and guest layout templates
The application now uses newly created \app.blade.php\ and \guest.blade.php\ layout files to structure the user interface. The main application layout includes a responsive main content area, includes header and footer partials, and integrates Livewire notifications via \@livewire('notifications')\. Both layouts enforce a consistent dark-mode theme strategy by checking local storage and system preferences, and they load the Inter font from the Filament assets directory alongside the Vite-compiled CSS and Filament scripts.
resources/views/layouts · high confidence
Laravel 11.x Shift: Removal of legacy Console and Exception handlers
The application has been upgraded to Laravel 11.x, which involves removing the traditional \app/Console/Kernel.php\ and \app/Exceptions/Handler.php\ files. In Laravel 11, console scheduling is now defined directly in \bootstrap/app.php\ via the \withSchedule\ method, and exception handling is managed through the new application bootstrap configuration rather than a dedicated handler class. This change simplifies the application structure by consolidating these configurations into the main entry point.
app/Console · high confidence
Laravel 11.x configuration shift and application-specific settings
The application has been upgraded to Laravel 11.x, which involves replacing several default framework configuration files (auth, broadcasting, cache, cors, filesystems, hashing, queue, view) with application-specific configuration files (api, filament, json-api-paginate, settings, speedtest, webhook-server). Key behavioral changes include the default database connection switching from MySQL to SQLite, the default session driver changing from file to database, and the default session lifetime increasing from 120 minutes to 1 week (10800 minutes). The application name is now defaulted to 'Speedtest Tracker', and the default log channel is set to stderr. Additionally, the mail configuration has been simplified to use a single SMTP mailer with SSL verification enabled by default, and the services configuration now only includes the Telegram Bot API.
config · high confidence
Middleware stack refactored for Laravel 11 and new access controls
The middleware layer has been significantly restructured to align with Laravel 11 conventions and introduce new access controls. Several default Laravel middleware classes (Authenticate, EncryptCookies, PreventRequestsDuringMaintenance, TrimStrings, TrustHosts, TrustProxies, ValidateSignature, VerifyCsrfToken) have been removed, indicating a shift to framework defaults or different configuration strategies. New middleware has been added: AcceptJsonMiddleware enforces JSON-only API responses; AllowedIpAddressesMiddleware restricts general application access via a config list; PrometheusAllowedIpMiddleware restricts Prometheus metrics endpoints using settings-based IP/CIDR allowlists; and GettingStarted redirects users to an onboarding flow if no results exist. Additionally, the RedirectIfAuthenticated middleware was renamed to PublicDashboard and repurposed to gate dashboard access using a 'view-dashboard' gate, redirecting unauthorized users to the Filament admin login.
app/Http/Middleware · high confidence
Migrate to Filament v3 and consolidate service providers
The application has upgraded to Filament v3, introducing a new FilamentServiceProvider that configures the admin panel's global search hook and notification alignment, while removing the legacy AuthServiceProvider, BroadcastServiceProvider, EventServiceProvider, and RouteServiceProvider. In AppServiceProvider, the home route constant is now '/', custom Blade directives (blank, filled) are registered, and new gates control access to the admin panel and dashboard. Additionally, an Apprise notification channel is added, HTTPS is enforced in non-local environments, and API rate limiting is now configurable via the app settings.
app/Providers · high confidence
Migrated to Laravel 12 and Filament v4 with updated development environment
The application has been upgraded to Laravel 12 and Filament v4, bringing modern framework features and UI improvements. The development environment now uses PHP 8.4 via the new compose.yaml file, replacing the previous Docker setup. The API documentation has been standardized to OpenAPI 3.0, and the default database connection for local development has shifted from MySQL to SQLite for easier setup. Additionally, the project now includes a Crowdin configuration for community translations and a CONTRIBUTING guide to streamline developer onboarding.
(repo-wide) · high confidence
New API resource classes for Results and Stats expose detailed bandwidth metrics
The V1 API now includes dedicated resource classes (ResultResource and StatResource) that structure the JSON output for result and statistics endpoints. For individual results, the response now includes raw download/upload bytes alongside human-readable byte sizes and bitrates (bits per second). For statistics, the response provides aggregated ping, download, and upload metrics (average, minimum, maximum) with corresponding bit-rate conversions. These resources also expose the \dispatched\_by\ field on results.
app/Http/Resources · high confidence
New CLI commands for user management and result status correction; removed startup command
Administrators now have new Artisan commands to manage users and fix data: \app:user-change-role\ allows updating a user's role via interactive prompts, \app:user-reset-password\ lets you set a new password for a user, and \app:result-fix-statuses\ corrects the status of existing Ookla results based on their data payload. The previous \app:startup\ command has been removed, and the \app:speedtest\ command has been replaced by \app:ookla-list-servers\, which now lists available Ookla servers instead of running a test.
app/Console/Commands · high confidence
New Filament v3 Dashboard Page
The dashboard has been migrated to Filament v3, replacing the previous implementation with a new Blade view that utilizes Filament components. The updated layout features a banner for deprecated notification channels, a banner for the next scheduled speedtest, and dedicated sections for platform statistics and latest results. Additionally, the dashboard now includes informational sections for documentation, donations, and Speedtest Tracker version details, with a badge indicating if a new version is available on GitHub.
resources/views/filament/pages · high confidence
New JavaScript implementations for Filament schema components
The application now includes dedicated JavaScript modules for the Filament schema components: actions, tabs, and wizard. These new files introduce client-side logic for managing component state and interactions, including sticky action positioning with resize observation, tab navigation with URL query string persistence and dropdown overflow handling, and multi-step wizard navigation with step persistence and auto-focus capabilities. This change represents a shift towards explicit JavaScript-driven behavior for these UI elements within the Filament schema system.
public/js/filament/schemas/components · high confidence
New Ookla speedtest execution action with dispatch tracking
A new RunSpeedtest action class has been introduced in app/Actions/Ookla to orchestrate the Ookla speedtest process. This action creates a new Result record with a 'dispatched\_by' field to track the origin of the test, emits a SpeedtestWaiting event, and executes a batch of background jobs (including server selection, running the test, and benchmarking) under the name 'Ookla Speedtest'.
app/Actions/Ookla · high confidence
New client-side logic for table checkbox and select columns
The table UI now includes dedicated JavaScript components for Checkbox and Select columns. The new checkbox component synchronizes its state with the server via Livewire, updating the column state on change and reflecting server-side updates. The new select component bundles the Popper.js library to handle floating element positioning and includes the Sortable.js library to enable drag-and-drop reordering of options within the select dropdown.
public/js/filament/tables/components/columns · high confidence
New dedicated test notification actions for all channels
The notification settings now use specific action classes (e.g., SendDiscordTestNotification, SendWebhookTestNotification) to handle test sends for each channel. This change ensures that webhook tests (Discord, Gotify, HealthCheck.io, ntfy, Pushover, Slack, and generic webhooks) use the Spatie WebhookServer for dispatching, with ntfy now supporting optional Basic authentication. The generic webhook test now sends a realistic payload including server name, server ID, and speedtest metrics, while the Apprise test action provides clearer, user-friendly error messages for connection issues.
app/Actions/Notifications · high confidence
New layout partials with theme switching and version display
The application now includes dedicated header and footer layout partials. The new header provides users with controls to switch between light, dark, and system themes, persisting their preference in local storage, and displays authentication-specific navigation (Admin or Sign In). The new footer displays the current application build version and shows a badge indicating if a software update is available.
resources/views/layouts/partials · high confidence
New scheduled speedtest checks, SQLite maintenance, and refactored preflight actions
This change introduces a new CheckForScheduledSpeedtests action that evaluates a configured cron schedule to determine if a speedtest should run, and a new VacuumDatabase action that performs SQLite maintenance (PRAGMA optimize and VACUUM) when not inside a transaction. It also refactors preflight logic into dedicated actions: GetExternalIpAddress now uses Laravel HTTP with retries and returns structured results, GetOoklaSpeedtestServers provides both UI-friendly and API-structured server lists with graceful error handling, and PingHostname wraps the Spatie Ping library with protocol stripping and debug logging.
app/Actions · high confidence
New validation rules for Apprise URLs, string containment, and cron expressions
Three new validation rules have been added to the application to enforce stricter input constraints. The AppriseScheme rule now rejects URLs that start with 'http', ensuring only valid Apprise channel formats are accepted. The ContainsString rule allows fields to be validated for the presence of a specific substring, with optional case-sensitivity. The Cron rule validates that cron expression inputs are syntactically correct using the underlying Cron library. These changes improve data integrity for notification settings, custom string filters, and scheduled tasks.
app/Rules · high confidence
Panel toolbar button styling and responsive label visibility
The panel CSS has been updated to hide button labels in the top bar on smaller screens and reveal them on viewports 768px and wider, ensuring a cleaner interface on mobile devices. Additionally, helper and hint text links within the panel are now styled as bold and underlined for better visibility.
public/css · high confidence
Redesigned Settings UI with Filament v4 and new configuration pages
The Settings interface has been rebuilt using Filament v4, introducing dedicated pages for Data Integration, Notifications, and Thresholds. The Data Integration page now allows users to configure InfluxDB v2 connections (including bulk data export and connection testing) and manage Prometheus access via allowed IPs. The Notifications page has been restructured into tabs for Database, Mail, and Webhook channels, each supporting configurable triggers (e.g., on speedtest run or threshold failure) and dedicated test actions. The new Thresholds page enables users to set absolute limits for download, upload, and ping metrics. This change also includes fixes for outbound URL protocol validation and various UI text improvements.
app/Filament/Pages/Settings · high confidence
Refactored Discord and HealthCheck notifications into dedicated listeners
Discord and HealthCheck notification logic has been moved into dedicated listener classes (SendSpeedtestCompletedNotification and SendSpeedtestThresholdNotification) to improve code organization. The Discord notifications now include the ISP value, application URL, and packet loss metrics in their payloads. Additionally, the threshold-based notifications now correctly skip sending alerts when absolute thresholds are disabled, preventing empty or unnecessary notifications.
app/Listeners/Discord · high confidence
Refactored InfluxDB integration with new v2 queue jobs
The InfluxDB integration has been updated to version 2, introducing new queue-based jobs for handling data operations. A new BulkWriteResults job now processes completed results in chunks for efficient bulk imports, while a dedicated TestConnectionJob allows users to verify their InfluxDB connection by writing test data points. Additionally, a WriteResult job handles individual result writes. These changes replace the previous implementation, shifting the connection testing mechanism away from factory-based approaches to a direct write-test method.
app/Jobs/Influxdb · high confidence
Refactored result factory to include bandwidth and byte metrics with error simulation
The database factories have been updated to support the new result data structure. The ResultFactory now generates test data that includes download and upload bandwidth as well as byte counts, aligning with the expanded speedtest results. It also introduces a mechanism to simulate failed test runs by randomly generating error logs, allowing developers to test failure states. Additionally, the UserFactory has been updated to ensure unique email addresses for generated users, and the removed SpeedtestFactory has been deleted.
database/factories · high confidence
Refactored routing structure and added health check endpoint
The application's routing has been reorganized to support new features and improved maintainability. A new health check endpoint is now available at /healthcheck to verify API status. The legacy /speedtest/latest route has been updated to use a dedicated controller and enforce JSON responses, with a deprecation notice for older dashboard integrations. Web routes now utilize specific controllers for the home page (with middleware for getting-started and public dashboard states) and Prometheus metrics (restricted by IP), alongside a dedicated getting-started view and a login redirect to the admin panel. Additionally, the broadcast channels file has been removed, and a test route file is conditionally loaded in local environments.
routes · high confidence
Refactored speedtest execution and internet connectivity checks
The application now uses a new CheckForInternetConnectionJob to verify connectivity before running speedtests, employing a ping command with an HTTP fallback if ping fails or is unavailable. The previous ExecSpeedtest and SearchForSpeedtests jobs have been removed, indicating a shift in how speedtests are triggered and executed, likely integrating with a new batchable, queue-based workflow that handles status updates and error logging more robustly.
app/Jobs · high confidence
Refactored speedtest execution into a multi-stage job pipeline with benchmarking and health checks
The Ookla speedtest process has been restructured from a single monolithic job into a sequence of distinct queue jobs (StartSpeedtestJob, SelectSpeedtestServerJob, RunSpeedtestJob, BenchmarkSpeedtestJob, CompleteSpeedtestJob, and SkipSpeedtestJob) to improve reliability and observability. This change introduces a dedicated benchmarking stage that evaluates download, upload, and ping metrics against configurable absolute thresholds, updating the result's 'healthy' status and dispatching specific health events. The execution now supports specifying a network interface and server ID, includes logic to skip tests based on external IP ranges, and enforces a 'SkipIfBatchCancelled' middleware to prevent overlapping or redundant work when batches are cancelled.
app/Jobs/Ookla · high confidence
Refactored speedtest notification and integration listeners
The notification and integration logic in app/Listeners has been restructured into dedicated event listeners. ProcessCompletedSpeedtest and ProcessUnhealthySpeedtest now handle notifications for successful and threshold-failing speedtests respectively, sending alerts via Apprise (switched to markdown formatting), database, mail, and webhooks. A new UserNotificationSubscriber ensures that users who manually triggered a speedtest receive Filament database notifications for completion, failure, and benchmark breaches. ProcessSpeedtestDataIntegrations now explicitly dispatches InfluxDB v2 writes and caches the latest Prometheus result ID. Additionally, LogWebhookFailure was added to log errors when webhook deliveries fail.
app/Listeners · high confidence
Refactored user roles and speedtest result model structure
The application now enforces user roles (Admin/User) via the \UserRole\ enum, with the \User\ model implementing Filament's \FilamentUser\ interface to grant panel access and exposing \isAdmin\/\isUser\ attributes. The \Speedtest\ model has been removed, consolidating scheduling logic into the \Result\ model, which now tracks \service\, \status\, \healthy\, and \scheduled\ states, supports automatic pruning of old records, and links to the user who dispatched the test via a \dispatchedBy\ relationship.
app/Models · high confidence
Removal of legacy Docker deployment scripts and configuration
The Docker deployment configuration in the \docker/deploy\ directory has been cleaned up by removing several obsolete files. The custom \entrypoint\ script, which previously handled Laravel optimization and database migrations before starting Supervisor, has been deleted. The \supervisord.conf\ file, which managed the cron job and queue worker processes, has been removed. Additionally, the \cron/scheduler\ file containing the cron schedule for running Laravel tasks and the \cont-init.d/50-speedtest-automations\ script, which performed initial setup like creating the app data directory and generating the app key, have also been deleted. These changes indicate a shift away from this specific set of initialization and process management scripts.
docker/deploy · high confidence
Removal of legacy HTTP Kernel configuration
The application no longer uses the traditional \app/Http/Kernel.php\ file for defining middleware stacks and route middleware groups. This change reflects a shift in the framework's request handling architecture, likely aligning with Laravel 11.x conventions where middleware registration is handled differently (e.g., via service providers or automatic discovery), removing the explicit configuration of global, web, API, and route-specific middleware lists previously managed in this class.
app/Http · high confidence
Removal of legacy JavaScript bootstrap configuration
The \resources/js/app.js\ and \resources/js/bootstrap.js\ files have been deleted, removing the default Laravel JavaScript setup that previously imported Lodash and Axios and configured CSRF token handling for HTTP requests. This change eliminates the client-side JavaScript bootstrap layer from the application.
resources/js · high confidence
Removed cron scheduler configuration file
The cron scheduler configuration file located at docker/8.1/cron/scheduler has been removed. This file previously contained a crontab entry to run the Laravel scheduler every minute, redirecting output to /dev/null. Its removal indicates that the scheduled task execution is no longer managed via this specific cron configuration in the Docker environment.
docker/8.1/cron · high confidence
Results list page and Inter font assets added for Filament v4
The application now includes a dedicated ListResults page for the Results resource, which displays records and integrates header widgets defined in the ResultResource. Additionally, the Inter Variable font assets (CSS and WOFF2 files) have been added to the public fonts directory to support the updated Filament v4 UI styling.
app/Filament/Resources/Results/Pages, public/fonts · high confidence
Results table and detail form restructured for Filament v4
The Results resource has been refactored to align with Filament v4, introducing a new ResultForm schema for the detail view and a rewritten ResultTable for the listing. The table now uses a dedicated ResultServerColumn to combine server information, removes the high and low latency columns from the default view, and adds reorderable columns. The detail form organizes data into collapsible sections for download/upload latency and ping details, while also correcting the server ID filter to function correctly on SQLite.
app/Filament/Resources/Results/Tables · high confidence
Standardized network speed unit conversion and threshold logic
The application now consistently reports network speeds in megabits per second (Mbps) rather than bytes, ensuring that speed charts and threshold alerts use the correct decimal-based unit (powers of 1000) for accurate performance monitoring. This change introduces helper functions to convert byte-based data into bits and applies this conversion when evaluating download, upload, and ping thresholds, preventing false positives or negatives caused by previous unit mismatches.
app · high confidence
Telegram notifications now include packet loss and ISP details
Telegram notifications for completed speed tests now display the ISP name and packet loss percentage alongside the existing metrics (download, upload, ping). The threshold failure listener also includes ISP and packet loss in its alerts, and notifications are suppressed if absolute thresholds are disabled or if no metrics actually fail the configured limits.
app/Listeners/Telegram · high confidence
Updated CSS architecture for Filament v3 and Tailwind CSS v4
The CSS build process has been restructured to support the Filament v3 framework and Tailwind CSS v4. The main entry point (app.css) now uses the new Tailwind v4 import syntax and explicitly imports specific Filament component stylesheets (support, actions, forms, infolists, notifications, schemas, and widgets) rather than relying on a single aggregate file. Additionally, a new custom.css file was added to apply specific styling overrides for the dashboard page, such as removing borders and adjusting header typography.
resources/css · high confidence
Updated Filament JavaScript assets to v4.1.0
The JavaScript assets in public/js/filament have been updated to version 4.1.0. This includes a new actions module that manages nested action modals and focus states, and an updated main application script that integrates a custom Mousetrap plugin for global keyboard shortcuts, enhances sidebar state persistence, and improves error notification handling.
public/js/filament/forms · high confidence
Updated Filament admin panel styles to Tailwind CSS v4
The precompiled CSS assets for the Filament admin panel have been regenerated using Tailwind CSS v4.3.0. This update refreshes the visual styling of admin interface components, including buttons, badges, dropdowns, and form fields, to align with the new Tailwind v4 engine and its updated utility classes and CSS variables.
public/css/filament/filament · high confidence
Updated Livewire vendor assets to v1.14.1
The Livewire client-side assets in public/vendor/livewire have been updated to version 1.14.1. This release includes the new CSP-compatible ESM build (livewire.csp.esm.js) and its source map, which bundles Alpine.js CSP and Vue shared utilities to support Content Security Policy environments. Users will benefit from improved compatibility with strict CSP headers and the latest bug fixes included in the 1.14.x series.
public/vendor/livewire · high confidence
Updated form asset styles to match Filament v3 design system
The CSS for Filament form components (file uploads, image croppers, and code editors) has been replaced with a new stylesheet that aligns with the Filament v3 design system. This update introduces Tailwind CSS utility classes for styling, enabling proper dark mode support and consistent theming across file upload, image cropping, and code editing interfaces.
public/css/filament/forms · high confidence
Updated public entry point and .htaccess for Laravel 12 compatibility
The application's public entry point (index.php) has been refactored to use the modern Laravel 12 request handling pattern, replacing the explicit Kernel instantiation with a single $app-\>handleRequest() call. Additionally, the .htaccess file now includes a rewrite rule to properly forward the X-XSRF-Token header, ensuring CSRF protection works correctly in environments relying on this header.
public · high confidence
Upgrade Sail development environment to PHP 8.4 and Node 24
The Docker development image for Laravel Sail has been upgraded from PHP 8.1 to PHP 8.4, with the base OS updated to Ubuntu 24.04 and Node.js upgraded to version 24. This change includes the addition of the LibreSpeed CLI tool for network performance testing and enables the PCov code coverage driver by default. The container startup logic has been refactored to support running the PHP process as either the 'sail' user or 'root' via the SUPERVISOR\_PHP\_USER environment variable, and the cron service has been removed from the supervisor configuration.
docker/8.4 · high confidence
Test coverage
Added feature tests for internet connection checks, Prometheus metrics, and routing; Added tests for API v1 results filtering and latest endpoint; Added tests for Filament admin panel filtering and URL validation; Added tests for the SQLite vacuum maintenance action; Added unit tests for API middleware, Ookla helper, and scheduled speedtest service; Migrate test suite to Pest and remove legacy application creation trait.
Dependencies
Major dependency upgrade to Laravel 13, Filament v5, and Vite 8
The application has been upgraded to Laravel 13 (from v9), requiring PHP 8.3 or higher, and integrated Filament v5 (from v3) for the admin panel. Front-end tooling has shifted to Vite 8 (from v3) and Tailwind CSS v4 (from v3), with the Node package type set to module. Additional dependencies include Livewire v4, Laravel Sanctum v4, and new integrations for InfluxDB, Prometheus, and Telegram notifications, while removing older packages like Laravel Telescope and Unifi integration.
(dependencies) · high confidence
Updated stats-overview charting library to Chart.js v4
The JavaScript file for the stats-overview widget's chart component has been replaced with a new build based on Chart.js v4. This upgrade brings improved performance, a smaller bundle size, and updated APIs for rendering statistical charts, ensuring compatibility with the latest Filament v4 framework.
public/js/filament/widgets/components, public/js/filament/widgets/components/stats-overview · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 61.
Lenses
- Code Health 99
- Architecture 91
- Maturity 52
- Readiness 63
- Security 83
- Accessibility 60
Changes since last survey
- 300 commits — 251 feature/other, 49 fixes
By area
- (root) — 49 commits
- config/speedtest.php — 43 commits
- app/Filament — 36 commits
- app/Actions — 23 commits
- resources/views — 22 commits
- .github/workflows — 21 commits
- app/Listeners — 11 commits
- app/Http — 10 commits
- public/js — 8 commits
- public/vendor — 7 commits
- app/Jobs — 5 commits
- lang/de_DE — 5 commits
- .github/ISSUE_TEMPLATE — 4 commits
- lang/nl_NL — 4 commits
- .cursor/skills — 3 commits
- app/Events — 3 commits
- app/Notifications — 3 commits
- app/OpenApi — 3 commits
- app/Providers — 3 commits
- config/session.php — 3 commits
Notable commits
- fix: Bug: Don't retry Apprise in case of a timeout (#2680)
- fix: Bug: fix packet loss rounding in notifications (#2670)
- fix: Fix data integrations listener (#2437)
- fix: Fix getting started page text colors on light theme (#2294)
- fix: Fix outbound URL protocol validation (#2876)
- fix: Fix pagination limit by using correct page[size] parameter #2441 (#2442)
- fix: Fix: Apprise test button shown without saving (#2627)
- fix: Fix: Increase timeout for Apprise notifications (#2628)
- fix: Fix: Skip SkipSpeedtestJob when env var is empty (#2626)
- fix: Fixed run speedtest server id input (#2207)
- fix: Hotfix v1.13.1 (fix for ping failing) (#2561)
- fix: Hotfix v1.6.5 (#2286)
- fix: Hotfix/v1.7.3 (#2403)
- fix: Revert "[Chore] Lock inactive issues and PRs" (#2260)
- fix: [Bug] Fix Filament panel form namespace error (#2391)
- fix: [Bug] Fix Influxdb export (#2338)
- fix: [Bug] Fix failing webhook test generator (#2276)
- fix: [Bug] Fix missing Get and type in BuildPointData (#2271)
- fix: [Bug] Fix server selection during manual test runs (#2176)
- fix: [Bug] Fix systemchecker in SpeedtestTrackerVersionProvider (#2076)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
alexjustesen/speedtest-tracker was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 7ab10330f131a1841f7ed21917a56222365ec8a8 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.