Thomas Camlong
05dbad8069
Simplify Custom JSX v2 authoring
2026-07-21 08:19:22 +02:00
Thomas Camlong
1c02678a7e
fix(custom-widgets): finish v2 hardening
2026-07-20 23:39:57 +02:00
Thomas Camlong
7c66c912e7
fix(custom-widgets): harden v2 authoring
2026-07-20 22:16:18 +02:00
Thomas Camlong
80d364c050
fix(custom-widgets): isolate invalid definitions
2026-07-20 18:32:48 +02:00
Thomas Camlong
e4388b0712
fix(custom-widgets): configure secrets during import
2026-07-20 17:21:51 +02:00
Thomas Camlong
a26846fa31
fix(custom-widgets): require explicit request bindings
2026-07-20 17:02:59 +02:00
Thomas Camlong
aebc7016b1
chore(custom-widgets): merge v2
2026-07-20 14:29:49 +02:00
Thomas Camlong
f9863b8402
fix(custom-widgets): refine v2 authoring
2026-07-20 14:14:53 +02:00
Thomas
60cbd7bb7a
Merge branch 'dev' into v2
2026-07-18 23:00:30 +02:00
Thomas Camlong
eae48f50fd
feat(custom-widgets): complete JSX v2
2026-07-18 15:33:25 +02:00
Junker der Provinz
6ac4c6a7b9
fix(search): let public dashboards use generic custom search engines ( #6375 )
2026-07-17 14:53:52 +02:00
Thomas
5e39c8813a
feat(preferences): add enableRightClickOnWidgets user preference ( #6298 )
2026-07-17 14:42:19 +02:00
Thomas
106c3bfa90
Merge branch 'dev' into v2
2026-07-16 10:21:40 +02:00
Thomas
8528d5068b
feat(media-requests): filter requests list by status and time window ( #6320 )
2026-07-15 16:27:24 +02:00
ajnart
51d8a3cc53
style: auto-fix lint and format
2026-07-15 13:54:18 +00:00
Thomas Camlong
a11583feb1
Revert "style: format all files and remove coverage report step"
...
This reverts commit 446931bc0a .
2026-07-15 15:44:49 +02:00
Thomas Camlong
446931bc0a
style: format all files and remove coverage report step
2026-07-15 15:42:13 +02:00
Thomas
3b2fc2527e
feat(custom-widgets): Full Mantine v9 + SubFetch support for custom JSX ( #6304 )
2026-07-15 14:06:02 +02:00
Thomas and homarr-renovate[bot]
0a0b3a12c9
bring dev changes to v2 ( #6353 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-07-15 12:16:16 +02:00
Thomas
2d450239ac
fix(releases): add required octokit throttling rate limit handlers ( #6338 )
2026-07-15 11:27:32 +02:00
Thomas
576856d634
fix(beszel): add reliable live stats and filesystem UI ( #6289 )
2026-07-11 17:55:04 +02:00
Thomas
13c9e5e181
fix(release): repair v1.70.0 quality failures ( #6279 )
...
* fix(release): repair v1.70.0 quality failures
* style: auto-fix lint and format
2026-07-10 21:59:57 +02:00
Thomas
4ae8d527a8
fix(releases): token not applied due to broken allowedRepoIds check ( #6276 )
2026-07-10 17:55:18 +02:00
Josh Preston and Thomas
33395ae226
feat(integrations): add PatchMon integration and widget ( #6119 )
...
Co-authored-by: Thomas <thomas@ajnart.fr >
2026-07-10 17:48:43 +02:00
Anil K Tiwari and Thomas
9fb2e37605
feat(widgets): add missing & queued media widget for Radarr and Sonarr ( #6078 )
...
Co-authored-by: Thomas <thomas@ajnart.fr >
2026-07-10 17:31:08 +02:00
Felix-Ayush and Thomas
2c5368dd4e
feat: add Bazarr integration and subtitle status widget ( #6156 )
...
Co-authored-by: Thomas <thomas@ajnart.fr >
2026-07-10 17:29:10 +02:00
Thomas
7c152cf4fe
feat(api): expose board automation endpoints ( #6213 )
...
* feat(api): expose board automation endpoints
* style: auto-fix lint and format
* test(api): cover board settings updates
* Delete .opencode/changelog/2026-07-06.md
2026-07-10 17:27:42 +02:00
Thomas
718f095cb7
fix: prevent stale persisted query cache from blocking widget data ( #6273 )
2026-07-10 17:19:24 +02:00
Thomas
24c5d04bfa
fix(beszel): disable request handler cache for stats to make live mode work ( #6244 )
2026-07-10 17:16:23 +02:00
Thomas
2ada1aa249
fix(qbittorrent): handle v5 stopped torrent states for pause functionality ( #6211 )
2026-07-10 16:55:20 +02:00
Nerdy Technician and Thomas
9864fed775
feat: Add Traefik Integration with dedicated widget and Add optional Icons for Gotify/Notifcation Widget (ONLY GOTIFY) ( #6206 )
...
Co-authored-by: Thomas <thomas@ajnart.fr >
2026-07-10 16:49:24 +02:00
Josh Preston
65ba866239
feat: add Synology integration support for health/system monitoring ( #6121 )
2026-07-09 18:23:21 +02:00
Thomas
fc2c251557
feat(demo): allow mutations in demo mode via DEMO_READ_ONLY flag ( #6224 )
2026-07-07 10:01:36 +02:00
Thomas
a382c75968
fix: unblock query cache mutations in demo mode and add cache buster ( #6176 )
2026-07-04 10:47:09 +02:00
Thomas
f19033e0d5
feat: simplify caching — TanStack Query as single source of truth ( #6075 )
2026-07-03 16:33:03 +02:00
Thomas
a5ec880eec
fix(immich): v3 API compatibility — use searchAssets for album assets, drop deviceAssetId ( #5977 )
2026-07-03 15:59:08 +02:00
Thomas Camlong
8747d5f93e
fix: add id to repository schema and handle missing ids gracefully
2026-06-28 13:55:17 +02:00
Thomas Camlong
af35a50fa0
fix: handle missing widgetSecrets table and add default releases repo
...
- getConfiguredKinds now returns [] if table doesn't exist yet
- Add homarr-labs/homarr as default releases repository (v#.#.#)
2026-06-28 08:47:09 +02:00
ajnart
398c88f2c6
style: auto-fix lint and format
2026-06-27 09:06:44 +00:00
Thomas Camlong
757d59854e
fix: address PR review - atomic upsert, MCP metadata, stale tokens, save UX
...
- Wrap setSecret delete+insert in a cross-DB transaction
- Add MCP metadata to all widget secret procedures and register in mcp.ts
- Show configured tokens even when no repos use that provider
- Only clear token input after mutation succeeds, with loading state
2026-06-27 10:58:35 +02:00
Thomas Camlong
d893515b93
fix: catch individual repo fetch failures to prevent batch crashes
...
Wrap each repository fetch in try/catch so one failure (Redis,
network, etc.) doesn't crash the entire query batch. Failed repos
now return a proper error response instead of causing all repos
to show "No response from provider".
2026-06-27 10:57:14 +02:00
Thomas Camlong
30107e4e76
fix: gracefully degrade when widget_secret table is missing or access denied
...
The releases widget was crashing because throwIfActionForbiddenAsync
or the widgetSecrets query would throw before DB migrations are run.
Wrap in try/catch so the widget works without tokens in that case.
2026-06-27 10:57:14 +02:00
ajnart
8c51a3769e
style: auto-fix lint and format
2026-06-27 10:57:14 +02:00
Thomas Camlong
77884a3179
feat: add per-widget secret storage for release provider authentication
...
Adds encrypted token storage per release widget so users can authenticate
with GitHub, GitLab, Docker Hub, etc. without needing full integration setup.
- New `widget_secret` table (all 3 DB drivers) keyed by (itemId, kind)
- tRPC router with setSecret/deleteSecret/getConfiguredKinds (board modify access required)
- Releases router injects decrypted tokens into provider requests (board view access required)
- Tokens only used for repos matching widget's stored configuration (prevents proxy abuse)
- Provider auth: GitHub (Octokit auth), GitLab (PRIVATE-TOKEN), Docker Hub (Bearer),
GHCR (registry token), npm (Bearer), Codeberg (token header)
- UI: "Provider Tokens" section in widget editor with PasswordInput per provider
2026-06-27 10:57:13 +02:00
Thomas Camlong
c892731479
fix: address PR review findings for widget-only integration refactor
...
- Fix npm scoped package support (filter time metadata keys, make
description optional, exclude falsy releases from version selection)
- Fix timetable date formatting (use Intl.DateTimeFormat for stable
MM/DD/YYYY output) and named zod import
- Guard migration 0000 against unknown provider keys
- Fix migration 0003 to delete integration links by integrationId
- Reset immich album carousel index when photo list changes
- Add bounded limit to timetable router input
- Remove stale misspelled noProviderSeleceted translation key
- Fix provider name visibility in release widget settings
- Update docs: add ArchiveTeam Warrior note, fix typos, correct
showPhotoInfo default
2026-06-27 10:57:13 +02:00
Thomas Camlong
8a5ad5861b
fix: restore ArchiveTeam Warrior as a proper integration
...
The widget-only integrations refactor incorrectly removed the
ArchiveTeam Warrior integration entirely. It only needed to be
excluded from auto-seeding (by removing defaultUrl), not deleted.
This restores the integration class, reverts the widget/router/handler
to use integration middleware, and removes archiveTeamWarrior from the
widget-only-integrations migration.
2026-06-27 10:57:13 +02:00
ajnart
d18d07d2f1
style: auto-fix lint and format
2026-06-27 10:57:12 +02:00
Thomas Camlong
fb348044fb
refactor widget-only integrations
2026-06-27 10:57:12 +02:00
a2bb53a8b8
feat: add VPN status widget ( #5812 )
...
Co-authored-by: Lokesh-Kumar-Dudi <lkumardudi@gmail.com >
Co-authored-by: Thomas Camlong <thomas@ajnart.fr >
2026-06-26 14:29:23 +02:00
Thomas
e01571b221
fix(icon-picker): keep URL visible in edit mode, add SVG-first ordering ( #6051 )
2026-06-22 15:22:25 +02:00