Add/dev/2026.0.mar.1 - #2
Merged
Merged
Conversation
The server/ directory contained copies of background.js, popup.js, popup.css, popup.html, manifest.json, and images/ that belonged only in the extension. These duplicates caused confusion and violated DRY. Also update .gitignore for the new project structure. Authored-by: ajithakdev (https://github.com/ajithakdev)
Reorganize flat layout into packages/server and packages/extension workspaces. Root package.json becomes workspace root with shared devDependencies. Each package gets its own package.json, tsconfig, and build configuration. - packages/server: Express.js speed test backend - packages/extension: Chrome/Edge browser extension (Manifest V3) - Root: shared ESLint, TypeScript, esbuild, Vitest Authored-by: ajithakdev (https://github.com/ajithakdev)
- Replace open CORS with explicit origin allowlist + browser extension origins - Wire up express-rate-limit: /ping 60/min, /upload and /download 10/min - Reduce upload body limit from 200MB to 10MB - Add filename whitelist validation to prevent path traversal - Validate Content-Type on /upload, return 415 for wrong types - Add /health endpoint for monitoring - Split server into app.ts (exportable) and server.ts (entry point) - Support variable download sizes: 1, 5, 10, 25 MB - Separate ESLint browser/node environments, re-enable no-unused-vars and no-undef Authored-by: ajithakdev (https://github.com/ajithakdev)
- Convert background.js, popup.js to TypeScript with full type annotations - Add interfaces: TestProgress, TestResults, PingResult, HistoryEntry - Fix inconsistent error handling: all test functions now throw on failure (download previously returned 0, upload threw, ping injected fake 1000ms) - Report real packet loss % instead of injecting fake latency values - Add cancel support via AbortController in background service worker - Add badge indicator showing last download speed on extension icon - Proper error typing with instanceof checks throughout - esbuild bundles TS to JS for both server and extension Authored-by: ajithakdev (https://github.com/ajithakdev)
- Animated SVG speed gauges for download (cyan) and upload (purple) - Segmented progress bar: Ping → Download → Upload with active/done states - Test history persisted to chrome.storage.local (last 20 results) - Cancel button to abort tests mid-run via AbortController - Connection quality rating: Excellent / Good / Fair / Poor - Packet loss percentage display in stats row - Offline detection: auto-disables start button when disconnected - Accessibility: aria-live regions, aria-labels, semantic HTML - Modernized dark glassmorphism design with card-based layout - Author credit in popup footer with GitHub link - Content Security Policy added to manifest - Removed unused alarms permission - Updated manifest to v2026.3.19.1 for store publishing Authored-by: ajithakdev (https://github.com/ajithakdev)
Testing:
- Vitest + supertest server test suite (8 tests)
- Covers: all endpoints, error cases, invalid filenames, wrong content types
CI/CD:
- GitHub Actions workflow: lint → type-check → build → test
- Node.js 18/20/22 matrix for compatibility
- Extension artifact upload on main branch pushes
Documentation:
- README.md: full rewrite with architecture, install, development guide
- CONTRIBUTING.md: code style, PR process, commands reference
- CHANGELOG.md: detailed changelog for v2026.0.319-MR1.0
- LICENSE: MIT license file
- AUTHORS: contributor credits
- GitHub issue templates: bug report + feature request
Version: 2026.0.319-MR1.0 ("Major Rewrite One")
Authored-by: ajithakdev (https://github.com/ajithakdev)
- npm start: runs the built server directly - npm run dev: builds all workspaces then starts server
Complete UI overhaul: - Central ring gauge with dual rings (download outer/cyan, upload inner/purple) - Hero speed display with JetBrains Mono for numeric values - Inter font family for body text - CSS custom properties for consistent theming - 5-column metrics grid with color-coded values - Step-based progress indicator with dot + line connectors - Inline spinner in start button during testing - Pulse animation on hero speed while testing - Quality badge in header row (Excellent/Good/Fair/Poor) - Hover states on metric cards and history items - Clean footer with dot separators Also: - Remove all emojis from status messages (background + popup) - Use professional status text: "Downloading test file...", "Upload complete", etc. - Fix phase detection to match new status message wording Authored-by: ajithakdev (https://github.com/ajithakdev)
- Replace large ring gauge with compact horizontal speed display (big number + mini progress bars for DL/UL) - Reduce popup width from 380px to 340px - Remove container border-radius and border (fixes white edge artifact) - Use flat dark background (no glass border against browser chrome) - History grows naturally — no scrollbar, items just stack - Stats row with vertical separators instead of card grid - Smaller button, smaller fonts, tighter spacing throughout - Overall popup height reduced significantly
… proxy - Add packages/worker/ with Cloudflare Worker that replaces Render - Streaming download endpoint (1/5/10/25MB via ReadableStream) - Upload endpoint (drains body, returns 200) - Ping endpoint (HEAD/GET minimal response) - Health endpoint with edge location from cf-ray header - CORS support for browser extension origins - Fix Express trust proxy setting for Render rate-limit error Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace hardcoded Render URL with configurable getServerUrl() - Default to Cloudflare Worker (meterx-speedtest.meterx-ajithakdev.workers.dev) - Add getServerUrl/setServerUrl message handlers for options page - Increase download test to 10MB for better TCP ramp-up - Add connection warm-up (HEAD /ping) before download and upload - Stream download with live speed updates during test - Add 1s buffer drain delay between upload and ping (prevents bufferbloat) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New options.html page with dark theme matching popup - Auto-checks connection status on load with edge location display - Radio presets: Cloudflare Edge (default) vs Custom Server - Test Connection button with latency measurement - IATA code to city name mapping (BOM=Mumbai, SIN=Singapore, etc.) - Runtime host permission request for custom server URLs - Close button, About link in footer - Update manifest: optional_host_permissions, options_page - Update build.mjs to bundle options.ts entry point Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…uttons - Add use-case readiness labels (Calls, Streaming, Gaming, Uploads) - PDF report export via html2canvas + jsPDF with dark theme - Report includes: quality assessment, trend analysis, anomaly detection, use-case assessment, full test history with pagination - Add close button (SVG X icon, glass style) - Add settings gear icon linking to options page - Fix Mbps/MBPS casing in PDF table headers - Add spacing between Mbps and DOWNLOAD labels - Heart icon next to author in footer - History capped at 7 displayed, 200 stored (30 days) - Animated number counting on hero speed display - Progress step animation (DL → UL → Ping) with connecting lines - Last test result persisted and shown on popup open Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace LICENSE file with full AGPL-3.0 text + copyright header - Update license field in all package.json files - Update @license headers in all source files - Update PDF report footer and options page footer AGPL-3.0 protects against closed-source forks while allowing open contributions. Users can use MeterX freely; modifications must remain open source. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README: updated features, architecture diagram with 3 packages, Cloudflare Worker as primary server, AGPL-3.0 badge - CONTRIBUTING: added worker dev setup, wrangler commands, updated project structure and commands table - CHANGELOG: added 2026.0.320-MR1.1 release with all edge migration, UI, PDF export, and accuracy changes - Privacy policy: rewritten for Cloudflare Workers (removed Render, multer, morgan references), stateless server model - AUTHORS: updated email Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AGPL-3.0 covers the source code. This trademark policy protects the MeterX name, MX logo, and branding separately. Forks must use a different name and remove MeterX branding. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix CI badge to reference current branch - Add Author section to README with full name, email, GitHub - Link TRADEMARK.md from License section - Update AUTHORS with full name (Ajith Kumar K) - Add email to privacy policy contact Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Owner
Author
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v2026.0.320-MR1.1 — Edge migration + complete rewrite
Transforms MeterX from a basic speed test into a production-ready, serverless network health tool. Render cold starts (50s+) replaced with Cloudflare Workers across 300+ PoPs. Full UI, docs, and architecture overhaul.
Before → after
What's in this release
Infrastructure
Extension
Backend
Docs + legal
Architecture
Test plan
npm run build— all 3 packages buildnpm run test— 8 server tests passnpm run lint— 0 errorsmeterx-speedtest.meterx-ajithakdev.workers.dev