Skip to content

MeterX 2027.0.0 - #96

Merged
ajithakdev merged 44 commits into
mainfrom
release/v2027.0.0
Oct 26, 2026
Merged

ajithakdev merged 44 commits into
mainfrom
release/v2027.0.0

Conversation

@ajithakdev

Copy link
Copy Markdown
Owner

MeterX 2027.0.0, the major release planned for Sunday 2026-10-25.

  • New repo layout: apps/ (extension, site), services/ (worker, server), packages/ (shared, reports).
  • Extension redesign with a live test view, rebuilt PDF, CSV and JSON exports, one version source and a new logo.
  • New product site for meterx.ajithakdev.com that runs the real extension pages on sample data, with SEO ready.
  • Store packaging (npm run package) and local test commands (npm run dev:ext, npm run dev:site).

Tested locally by the owner: the site and the extension end to end. Build, lint, type checks and all tests pass.

Nothing deploys on merge. After merging: tag, worker deploy, first site deploy, then store uploads. The steps are in docs/STATE.md.

Split the extension into background/, lib/ and pages/, move the version,
API constants and share links into @meterx/shared, and give the popup,
side panel and settings page one design system. The Express server now
streams test files and drains uploads instead of buffering them.

Also fixes the extension build, which still pointed at the old entry
files, and clears dist/ before each build.
The PDF report's stylesheet was injected into the popup page, so the popup
was restyled until the file saved. Render it in an off-screen iframe instead,
sized to its content so the PDF has no blank trailing page.

Fit the popup inside Chrome's 600px limit, stop strip figures overflowing,
shorten the readiness verdicts so labels are not truncated, and keep the side
panel readable down to 320px.
The PDF is now drawn as vector text and shapes in the app's light design
instead of a screenshot of an HTML page: summary, latency under load,
readiness, plan comparison, a trend chart and a results table that
continues across pages. html2canvas is dropped and jsPDF's optional
extras are kept out of the bundle, halving popup.js and sidepanel.js.

CSV and JSON share one column list with units in the names, rounded
numbers, local time and quality per row. JSON gains a versioned format
and a summary.
…fits the window

The root package.json is now the only version: shared exports it, the
settings footer reads it and the build stamps it into the manifest.
Workspace packages and the static manifest no longer carry copies.

The PDF gets a faint brand watermark and a Report ID, a SHA-256
fingerprint of the measurements, on every page.

The side panel fills the window and only the results list scrolls, so
the summary, chart and plan stay in view. Export file names use the
browser's local date.
Running a test from the side panel now shows it in place: the summary
card switches to the running figures and elapsed time, the heading names
the phase, and a progress line runs under the header. The phase timing
is shared with the popup.

Empty values use a plain hyphen, the extension is named "MeterX by
ajithakdev", the results columns are evenly spaced, and same-day charts
label times in the browser's own clock format.
Empty figures show a short muted bar and hide their unit (keeping its
space) instead of a hyphen next to Mbps. With an ISP plan set the side
panel overflowed; plan rows now carry their percentage on one line, the
status moved into the Results header, short panels get tighter cards and
a shorter chart, and the chart redraws on resize.
…e site

Quality grades, use-case scoring and their words move to @meterx/shared
so the product site and the extension use one copy. The worker's CORS
now also answers https://meterx.ajithakdev.com and localhost dev ports,
for the site's in-page quick test.
The X-on-a-dial mark replaces the gauge in the toolbar icon, the app
header, the PDF and the site. brand/build.mjs generates icons, store
tiles, marquee, social cards and store screenshots from it; earlier
options are kept in brand/alternates.

packages/site is the product site: a home page with a live quick test,
a speed explorer, real screenshots, the test phases, install links and
answers, plus about, privacy, the share viewer and /get.
The hero now pairs the headline and two actions with the real popup,
and the quick test reports on a reserved line so nothing moves. Feature
rows use the full width, the test phases are one proportional bar with
four steps, and the report screenshot shows the new mark. A quick test
that finishes inside the warm-up window no longer reports 0 Mbps.
…packaging

apps/extension and apps/site are what people use, services/worker and
services/server are the backends, packages/shared is the contract they
all import. npm run package builds one zip for Chrome, Edge and Opera,
one for Firefox (sidebar, background script and the listing's id) and a
source archive for Firefox review.
…terx/shared

The PDF, CSV and JSON builders and their stats become @meterx/reports, a
pure package the extension and the site can both use. Formatting, the
median, the load grade and plan share move into @meterx/shared. The
extension keeps only the browser parts: reading the saved plan and
starting downloads.
The site now hosts the extension's own popup, side panel and settings in
demo mode: a shim stands in for the extension APIs with labelled sample
data. On the home page the scroll drives the real popup through a test
while a phase log follows it. How it works, Features and Questions are
their own pages, the header and footer are shared partials, and the
footer is one compact row. The Edge listing link is filled in.
… new layout

CLAUDE.md and the code map describe apps, services and packages;
scripts/codemap.mjs regenerates the file table. The worker URL lives
once in @meterx/shared. README, RESOURCES-AND-GUIDE and the privacy
pointer match the renamed repo, the site and the store packaging, and
docs/SEO.md covers the site.
…demo polish

Get MeterX puts every store on the brand's dial and points the needle at
the visitor's browser, with live and upcoming listings and their logos
(Simple Icons, CC0). Questions open in a side panel with a read-more
link and a help card. How it works shows each phase's share of the test
above its text and compares ping under load on a grade C and a grade A
line. The demo answers the server check itself, the settings frame takes
its page's height, and the header uses the theme-coloured mark.
Live repo stats, open good first issue and help wanted issues, and the
contributors list come from the public GitHub API, cached for the visit,
with plain links when the API is unavailable. The CSP allows the API and
avatar hosts. CONTRIBUTING.md shows the current layout, and the logo
link reads as MeterX home.
… demo

On phones the hero is no longer pinned: headline, intro and actions come
first and the popup plays its sample test when it comes into view. The
header keeps the brand, the action and a Menu button that opens the
links. Side panel demos lay out at full height on phones so the frame
never scrolls inside itself, and figures lose their default margins.
…cuments

Contribute joins the header links. Good places to start becomes a
heading row with its action and a two-column issue grid. About and
Privacy use the full page width with an on-page contents list, bullets
are back, and the privacy policy mentions the GitHub API requests the
Contribute page makes.
…lose section

The hero pins just under the header and starts a short gap below it,
with a smaller popup on short windows so all of it stays in view; the
section after it no longer adds a second gap. Side panel demos stay
pinned while their text scrolls past on desktop. A stray brace that
disabled the closing section's grid on phones is gone.
The dial sits on the left with only the mark in its centre and a ring
that flows slowly (still under reduced motion), and stays pinned while
the heading, the available stores and the upcoming ones stack on the
right. Phones keep the dial above the list.
The text beside a pinned side panel now starts lower and rises past it;
the pin lets go when the last line lines up with the panel's bottom, so
the column beside the panel never runs empty.
…ones full width

The top row pairs a smaller dial with the heading and the stores that
are live; Coming next returns to a full-width grid below.
The text beside a side panel sits centred against it with no pinning,
like the Reports row, and the first section after a page heading
follows it closely.
…eight

Demo frames turn scrolling off and their pages hide overflow, so a
fractional browser zoom can no longer show scrollbars on them. Very tall
windows (as when zoomed out) skip the pinned hero, which would otherwise
leave a mostly empty stage. On desktop the side panel draws at 88, 80 or
70 percent depending on window height, so its whole section fits on one
screen, with the caption right under it.
The pinned stage is a full window tall while its content is shorter; the
home script measures that leftover space and pulls the next section up
into it, leaving a normal 64 px gap at any window height.
npm run dev:site builds and serves the site on :8788. npm run dev:ext
builds the extension, runs the worker on :8787 and opens Chromium with
MeterX loaded in a separate test profile.
… MeterX indexable; deploy builds the extension first
@ajithakdev

Copy link
Copy Markdown
Owner Author

Timeline of the work on this branch

40 commits, grouped in the order they landed.

1. Extension restructure and redesign
b4e5b7c to f57ed64: split the extension into background/, lib/ and pages/, moved the API contract into @meterx/shared, new design system for the popup, side panel and settings. STATE updated for the 2027.0.0 branch and Sunday releases.

2. Exports, version and live test view
00ba7d0 to 5cbe399: popup and side panel layout fixes, a vector PDF with a report ID and watermark, CSV and JSON with units in every column, one version read from the root package.json, a live test view in the side panel, and no more em dashes.

3. Side panel polish
409f739 to 755b06d: a placeholder bar for empty figures, the side panel fits with an ISP plan set, and no gap above the pinned results header.

4. Brand and first site
b7bde41 to 2ce0b77: the site and brand plan, shared quality rules, the worker answering the site's origin, the new X-on-a-dial logo with generated store images, and the first meterx.ajithakdev.com home page.

5. Repo layout
56c1a4e to 52870ed: split into apps/, services/ and packages/, store packaging, repo renamed to ajithakdev/meterx, reports moved into @meterx/reports, a multi-page site that runs the real extension pages, plus CODEMAP, README, guide and SEO docs.

6. Site pages
27f7144 to f4dd186: store dial on Get MeterX, FAQ answer panel, ping comparison, the Contribute page with live GitHub data, and phone layouts.

7. Site layout fixes, signed off
04b1bc9 to a37ddcb: hero spacing, side panel sections, the Get MeterX dial layout, demo frames that never scroll at any zoom, no blank band after the hero. The owner signed off the site.

8. Local testing
d4399bb to 6bb2131: npm run dev:site and npm run dev:ext (builds and runs the worker, no browser launch), a stray CSS brace removed.

9. Wrap up
0aea998 to 81f051b: unused code, IDE files and jsdom removed; privacy-policy.md now points to the site; Open Graph, link card and WebSite tags on every page; Get MeterX opened to search engines; the site deploy builds the extension first; README, guide, SEO, STATE and changelog brought up to date.

@ajithakdev ajithakdev self-assigned this Oct 24, 2026
@ajithakdev

Copy link
Copy Markdown
Owner Author

Pre-merge checklist

Addressed

  • Repo split into apps, services and packages; one version source (2027.0.0 in the root package.json)
  • Extension redesign, live test view, new exports (PDF with report ID, CSV, JSON), new logo
  • Product site for meterx.ajithakdev.com with SEO tags, sitemap and robots
  • README rewrite and CHANGELOG section [2027.0.0] - 2026-10-26 with compare links

Tested

  • npm test: 106 tests in 16 files pass across all workspaces and scripts
  • npm run lint: 0 errors, 6 warnings
  • npm run build: extension, site and server build clean
  • npm run package: chromium, firefox and source zips for 2027.0.0 in release/
  • Owner tested the site and the extension locally and signed both off

CI and release

  • check workflow passes on the branch
  • Tag v2027.0.0 on the squash commit and create the GitHub release

Docs

  • RESOURCES-AND-GUIDE, SEO, STATE and CHANGELOG updated

After merge

  1. Tag v2027.0.0, push it, gh release create with the changelog section
  2. wrangler deploy for the worker
  3. First site deploy to Cloudflare Pages and the custom domain
  4. Store uploads: Firefox, Edge, Opera (Chrome waits)
  5. Search Console and Bing setup, repo website field, portfolio entry

@ajithakdev
ajithakdev merged commit 3535b6e into main Oct 26, 2026
1 check passed
@ajithakdev
ajithakdev deleted the release/v2027.0.0 branch October 26, 2026 18:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant