Skip to content

Merge master to release#421

Merged
vvlladd28 merged 6 commits into
release/4.3from
main
May 25, 2026
Merged

Merge master to release#421
vvlladd28 merged 6 commits into
release/4.3from
main

Conversation

@vvlladd28
Copy link
Copy Markdown
Member

Description

Type of change

  • New / updated documentation page (src/content/docs/**)
  • Shared include file (src/content/_includes/**)
  • Component, layout, or styling change (src/components/**, src/styles/**)
  • Landing / use-case / case-study page (src/pages/**, src/data/**)
  • Redirects (src/data/redirects.ts)
  • Version bump / release (see release skill)
  • Build, CI, scripts, or tooling
  • Other (please describe)

Affected products

Related issues

  • Closes #

Checklist

  • pnpm check passes (Astro / TypeScript)
  • pnpm lint:eslint passes
  • pnpm lint:slugcheck passes (required if pages were added/renamed/moved across languages)
  • pnpm lint:linkcheck passes locally — required to merge; run it before requesting review (use pnpm lint:linkcheck:nobuild if you already ran a build)
  • Renamed/removed pages have a redirect in src/data/redirects.ts, and pnpm generate:redirects was run
  • No hardcoded versions — values come from src/data/versions.ts
  • Screenshots attached for visual changes

ShvaykaD and others added 6 commits May 22, 2026 18:58
… Calls

The peFeature Banner on the Custom REST API Calls section claimed the
feature was PE/Cloud only. The corresponding controller —
RuleEngineController in thingsboard/thingsboard
(application/src/main/java/org/thingsboard/server/controller/RuleEngineController.java)
— is a regular @RestController in CE with four POST endpoints under
/api/rule-engine/... accessible to SYS_ADMIN, TENANT_ADMIN, and
CUSTOMER_USER. The feature is not PE-only.

The banner's path also pointed to recipes/solution-templates/swimming-pool-scada-system,
which does not mention rule engine, Custom REST API Calls, or any REST
endpoint — so even if the feature had been PE-only, the link target
was unrelated to the topic.
* Add noindex meta to Hardware Partner Apply form page

The form page (/partners/hardware/apply/) does not need to be indexed —
it's a transactional form, not a content page. Matches the existing
noindex pattern used by apply-thanks, careers, 404, and other utility
pages, and will also be excluded from the sitemap (PR #408).

* Fix broken image references on docs and device-library pages

Markdown ![]() and raw <img> tags with /src/assets/* paths render the
URL as-is and 404 in production — Astro doesn't serve src/ directly.
Replace with <DocImage> so paths flow through import.meta.glob() and
getImage() (yields hashed WebP via the asset pipeline).

Affected references:
- shared-subscription-demo.gif (TBMQ shared subscriptions)
- sodaq-demo-dashboard.gif (SODAQ universal tracker)
- seeed-grove-demo.gif (Seeed Grove Base Hat)
- demonstration_show.gif (Raspberry Pi CM4)
- temco-tstat10-dashboard-ce.png (Temco Tstat10) — also restored the
  missing asset from img.thingsboard.io

* Optimize oversized images and replace 9 MB blog GIF with MP4 video

Five images flagged by the SEO audit as oversized are re-encoded
in place (Sharp). Total -73% (17.0 MB → 4.6 MB). PSNR sampled
≥38 dB → quality difference is not visually perceptible.

Per-file:
- district-night-background.png  3.30 MB → 0.94 MB (-71%)
- office-room.png                1.79 MB → 0.57 MB (-67%, resized 3400→1920px)
- building-background.png        1.11 MB → 0.83 MB (-25%)
- maps-4.webp                    1.41 MB → 0.13 MB (-90%, re-encoded q=80)
- DarkMode-2.gif (9.39 MB)       → MP4 1.96 MB + poster 0.19 MB (-77%)

The blog GIF migrates to <video autoPlay muted loop playsInline> in
dark-mode-for-a-dashboard.mdx — the standard autoplay-compatible
replacement for animated GIFs (works on iOS/Safari via muted+playsInline).
A first-frame JPEG poster prevents layout shift before metadata loads.

Dashboard background PNGs in /resources/docs/tutorial/ are user-
downloadable assets — ThingsBoard scales them to the dashboard canvas
on render, so the 1920-px resize on office-room.png does not affect
the tutorial. Aspect ratio preserved.
CE page consolidated to PE via canonicalConsolidationMap while the PE
stub points back to CE via frontmatter override, forming a canonical
loop. Mark the CE page selfCanonical since it owns the real content
and PE is a stub redirect.
The default Sharp pipeline re-encodes GIFs to WebP, which drops every
frame after the first (losing animation) and also blows past Sharp's
default pixel limit on large multi-frame GIFs — e.g.
shared-subscription-demo.gif (1846x1004, 317 frames) fails the build
with "Input image exceeds pixel limit". GIFs now skip raster processing
and are served as-is, the same way SVGs already are.
)

Astro's Sharp pipeline already preserves animated GIFs (passes them
through as .gif on disk). The real failure mode is Sharp reading every
frame (`pages: -1`) and tripping `limitInputPixels` on large multi-frame
GIFs — that is why we bypass `getImage` for `.gif` files.
@vvlladd28 vvlladd28 merged commit 132055a into release/4.3 May 25, 2026
9 checks passed
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.

3 participants