ajnart
ac7e3f2ef4
Merge remote-tracking branch 'origin/release/v2' into feat/pr-6691-hardening
...
# Conflicts:
# apps/nextjs/src/app/[locale]/layout.tsx
# packages/api/src/router/widgets/anchor-notes.ts
# packages/api/src/router/widgets/archive-team-warrior.ts
# packages/api/src/router/widgets/audio-stats.ts
# packages/api/src/router/widgets/bazarr.ts
# packages/api/src/router/widgets/coolify.ts
# packages/api/src/router/widgets/firewall.ts
# packages/api/src/router/widgets/immich.ts
# packages/api/src/router/widgets/paperless-ngx.ts
# packages/api/src/router/widgets/patchmon.ts
# packages/api/src/router/widgets/speedtest-tracker.ts
# packages/api/src/router/widgets/tracearr.ts
# packages/api/src/router/widgets/traefik.ts
# packages/api/src/router/widgets/umami.ts
# packages/api/src/router/widgets/uptime-kuma.ts
# packages/api/src/router/widgets/vpn.ts
# packages/api/src/router/widgets/wud.ts
# packages/definitions/src/widget-integration-map.ts
# packages/widgets/src/anchor-note/index.ts
# packages/widgets/src/archive-team-warrior/index.ts
# packages/widgets/src/audio-stats/index.ts
# packages/widgets/src/bazarr/index.ts
# packages/widgets/src/coolify/index.ts
# packages/widgets/src/firewall/index.ts
# packages/widgets/src/immich/album-carousel/index.ts
# packages/widgets/src/immich/server-stats/index.ts
# packages/widgets/src/paperless-ngx/index.ts
# packages/widgets/src/patchmon/index.ts
# packages/widgets/src/speedtest-tracker/index.ts
# packages/widgets/src/system-disks/index.ts
# packages/widgets/src/system-resources/index.ts
# packages/widgets/src/tracearr/index.ts
# packages/widgets/src/traefik/index.ts
# packages/widgets/src/umami/index.ts
# packages/widgets/src/uptime-kuma/index.ts
# packages/widgets/src/vpn/index.ts
# packages/widgets/src/wud/index.ts
2026-08-26 15:12:49 +02:00
ajnart
47724f44eb
fix: harden widget request caching
2026-08-26 14:57:53 +02:00
Thomas
f0eddda573
fix: preserve assistant CSS and daily quota history ( #6705 )
...
* fix: route custom css through review form
* feat(workshop): retain daily assistant quotas
2026-08-26 14:48:08 +02:00
Thomas
b2c72d54c2
fix: refine configurable header defaults ( #6707 )
2026-08-26 14:29:51 +02:00
Thomas
a56ec5d06a
feat: support every widget in the demo dashboard ( #6696 )
2026-08-26 08:44:55 +02:00
Thomas
9303dbd284
feat: add configurable headers and instance branding ( #6690 )
2026-08-25 17:09:47 +02:00
ajnart
c81088d876
Merge remote-tracking branch 'origin/release/v2' into feat/widget-integration-dx
...
# Conflicts:
# packages/api/src/router/board.ts
2026-08-25 10:09:03 +02:00
ajnart
9bf266935b
refactor: address adversarial widget architecture review
2026-08-25 10:07:32 +02:00
Thomas
97d8390b20
feat: rebuild command menu ( #6692 )
2026-08-24 15:40:09 +02:00
ajnart
4ca17d8e8b
merge: sync release/v2
2026-08-24 09:53:48 +02:00
ajnart
24e6e4a47d
refactor: tighten TypeScript boundaries
2026-08-24 09:38:30 +02:00
Thomas
e7c8e2e01e
refactor(custom-widgets): simplify authoring prompt ( #6695 )
2026-08-24 09:24:53 +02:00
Thomas
fcca57ddf7
feat(custom-widgets): improve authoring workbench ( #6689 )
...
* feat(custom-widgets): improve authoring workbench
* fix(custom-widgets): address review and CI
* refactor(custom-widgets): satisfy architecture checks
* fix(custom-widgets): isolate workbench typing updates
* fix(custom-widgets): harden workbench state
2026-08-24 08:55:00 +02:00
ajnart
8f9efd0074
refactor: simplify widget and integration architecture
2026-08-24 00:57:36 +02:00
ajnart
c988c35b29
refactor: finish feature module tooling
2026-08-23 22:39:06 +02:00
ajnart
425cb653a1
refactor: streamline widget and integration architecture
2026-08-23 22:33:29 +02:00
Thomas Camlong
240397e7ac
refactor: drop server-seeded widget clock
...
The WidgetTimeProvider plumbed a server timestamp and the container's
timezone down to useWidgetNow so clock widgets would paint a real time in
the SSR HTML instead of "--:--". That traded a cosmetic first-paint win for
a wrong clock: the seeded timezone is the server's, so anyone whose timezone
differs from the container's saw an incorrect time for the whole hydration
window. Fixing that properly needs a client-set timezone cookie read during
RSC render, which is far more plumbing than the problem warrants.
Revert the clock to release/v2 behaviour ("--:--" until hydration) and drop
the provider, the @homarr/widgets/time export and their tests. The e2e clock
assertions now wait on hydration explicitly instead of the seeded paint.
Also restore the widget.beszel.getSystemStats persistence exclusion. #6289
added it deliberately to keep those large time-series payloads out of the
persisted cache, and this branch had removed it with no stated rationale.
Query-cache persistence and the background-refresh indicator are unchanged.
2026-08-23 09:00:34 +02:00
Thomas Camlong
3efb719eee
refactor: simplify widget import boundary
2026-08-23 09:00:34 +02:00
Thomas Camlong
382cffc015
test: use configured DOM environment
2026-08-23 09:00:34 +02:00
Thomas Camlong
0073dfe044
refactor: trim widget reload plumbing
2026-08-23 09:00:33 +02:00
Thomas Camlong
a22fb60647
fix: harden widget query persistence and refresh indicator
...
Review follow-ups on the session query cache:
- Cache the per-payload size verdict and reuse a single TextEncoder. The
persist subscription re-dehydrates the whole cache on every cache event,
so every widget payload was being superjson-serialized several times per
refresh cycle just to measure it.
- Skip the size measurement on the restore path. It runs before any query is
allowed to fetch and the payload was already budgeted when it was written.
- Reject stored queries whose dataUpdatedAt is not a positive finite number;
`undefined <= 0` is false, so those were hydrating with a NaN timestamp.
- Add `stop()` and tear the persister down before `queryClient.clear()`, so
the clear cannot overwrite the saved snapshot with an empty cache.
- Remove every other scope's cache when a persister is created: signing out
navigates away before the scope guard can react, which left the previous
account's dashboard data in the tab.
- Remove the entry instead of storing an empty cache.
Refresh indicator:
- Make it decorative instead of an aria-live region; every widget refreshes
on a timer, so it made assistive technology repeat "loading" forever.
Also broadens the e2e hydration-error matcher to production React's minified
error codes, hoists the single WidgetTimeProvider in ClientBoard, memoizes the
resolved local time zone, and drops the exports this branch made dead.
2026-08-23 09:00:33 +02:00
Thomas Camlong
89e4cb843d
refactor: simplify widget reload persistence
2026-08-23 09:00:33 +02:00
Thomas Camlong
65a96b6b14
fix: address widget reload review findings
2026-08-23 09:00:33 +02:00
Thomas Camlong
357355283c
fix: harden widget query persistence
2026-08-23 09:00:33 +02:00
Thomas Camlong
a2a408410a
Persist widget data across reloads
2026-08-23 09:00:33 +02:00
Thomas
0d9eeb5752
Merge pull request #6678 from homarr-labs/feat/fix-responsive-layout-order
...
fix: keep responsive layout editors stable
2026-08-23 08:58:48 +02:00
Thomas
bf0878c68b
Merge pull request #6680 from homarr-labs/feat/fix-widget-edit-layout-shifts
...
fix: stabilize widgets in board edit mode
2026-08-23 08:56:07 +02:00
ajnart
978b3c7f33
fix: stabilize widgets in board edit mode
2026-08-23 01:56:31 +02:00
ajnart
02870fc392
test: align grid footprint expectations
2026-08-23 01:42:16 +02:00
ajnart
b6fc27e44d
fix: preserve layout validation errors
2026-08-23 01:24:36 +02:00
ajnart
e022c3f735
fix: match legacy widget grid dimensions
2026-08-23 01:20:39 +02:00
ajnart
493e93ea42
feat: size widgets before adding
2026-08-23 01:19:08 +02:00
ajnart
91b248d395
fix: harden widget editor previews
2026-08-23 01:19:08 +02:00
ajnart
b7eadc7867
fix: load resolved widget settings
2026-08-23 01:19:08 +02:00
ajnart
b3a30e0cf6
fix: constrain widget editor previews
2026-08-23 01:19:08 +02:00
ajnart
763e1324e8
fix: preserve widget preview dimensions
2026-08-23 01:19:08 +02:00
ajnart
5188ed89d6
feat: rework widget settings modal
2026-08-23 01:19:08 +02:00
ajnart
9eafd4f7a7
fix: preserve custom layout role type
2026-08-23 01:13:00 +02:00
ajnart
71ffa5d1be
fix: keep responsive layout editors stable
2026-08-23 00:59:02 +02:00
Thomas
1b843817a4
feat: polish board switcher ( #6670 )
2026-08-22 17:21:10 +02:00
Thomas
e97fe7861d
feat: rework bookmarks widget ( #6666 )
2026-08-22 16:55:31 +02:00
Thomas
19760e5722
fix: restore translucent dashboard styling ( #6664 )
...
* fix: restore translucent dashboard styling
* fix: restore dashboard widget transparency
* fix: address dashboard review feedback
* fix: apply board opacity to containers
* fix: flatten demo board container
* fix: default board roundness to sm
* fix: restore assistant widget transparency
* Revert "fix: default board roundness to sm"
This reverts commit c235cbdf2b .
* fix: address remaining dashboard review comments
* test: align grid geometry expectations
2026-08-22 15:51:43 +02:00
Thomas
f46ccadbe4
feat: redesign demo dashboard ( #6663 )
2026-08-22 13:08:27 +02:00
Thomas
2accdc2fad
feat: rework board switcher ( #6660 )
...
* feat: rework board switcher
* fix: address board switcher review
2026-08-22 11:15:40 +02:00
Bergasha
7591f7e313
feat(v2 Containers): scrollable containers ( #6629 )
2026-08-22 09:24:52 +02:00
Thomas
011ce8e5a3
fix: preserve board drafts and widget scroll state ( #6637 )
2026-08-22 09:13:32 +02:00
Thomas
b2fa46c760
fix: restore release translation checks ( #6658 )
2026-08-22 08:49:14 +02:00
Thomas
9e14a07e64
refactor: consolidate English translations ( #6640 )
2026-08-21 19:00:27 +02:00
Thomas
81aa704537
feat(cli): rework developer CLI with non-blocking tasks and GitHub CI checks ( #6651 )
2026-08-21 18:59:11 +02:00
Thomas
f0f9539466
feat(ui): add situational tips system ( #6648 )
2026-08-21 18:58:52 +02:00