Thomas Camlong
6692acbd33
chore: strip formatting noise, delete dead routes, fix CodeRabbit issues
...
- Remove 179 format-only file changes (docs, migrations, plex, patchmon, CSS)
- Delete .cursor/goal files from git tracking
- Delete 4 dead /api/about routes (unused, data loaded from static JSON)
- Fix resolveAlias to use absolute paths (CodeRabbit)
- Fix Tailwind classes in Mantine app layout fallback (CodeRabbit)
- Return stale data during cache revalidation (CodeRabbit)
2026-08-08 08:45:16 +02:00
Thomas Camlong
38ac8f3075
fix: concurrent cache miss, SVG output, narrowed error handling, format
...
- Fix integration data cache: check pending promise before TTL to
prevent returning undefined on concurrent cold-cache access
- Add concurrent-miss test (two parallel callers, one fetch)
- SVG sanitizer: extract <svg> from DOMPurify output to strip
residual HTML wrapper
- Narrow safeRevalidateTag catch: log unexpected errors, silence only
known "outside request scope" messages
- Run oxfmt across all packages (206 files formatted)
2026-08-07 20:48:17 +02:00
Thomas Camlong
018f98e318
perf: implement Phase 1 homepage diet via Next.js Cache Components
...
P1-0: V8 heap cap (HOMARR_MAX_OLD_SPACE_SIZE, default 512MB)
P1-1: Module graph cuts
- Dynamic integration imports (55 static → lazy loaders)
- Conditional DB driver loading (only configured driver loaded)
- Replace jsdom with linkedom for SVG sanitization
- Delete eager widget barrel (55 import * as → 0)
- Extract createRetryableLoader to @homarr/common
P1-2: Enable cacheComponents + restructure root layout
- Suspense boundaries around session-dependent providers
- ColorSchemeScript replaces server-side cookie reads
- Board/manage/auth layouts wrapped in Suspense
P1-3: Cache read paths
- Cache tag registry + invalidation helpers
- Cache invalidation wired into all mutation routers
- Translation deep-merge memoized per locale
P1-4: Prerendered shells + loading.tsx files
P1-5: Shared integration data cache (60s TTL, stale-while-revalidate)
P1-6: Redis-backed Next.js cache handler (@homarr/next-cache-handler)
P1-7: Redis optional (memory channel fallback), TTL on pubSub:last:*,
Redis clients consolidated from 6 to 2
2026-08-07 18:59:47 +02:00
ajnart
fbb57c8f40
fix(docker): build runtime workspaces only
2026-07-29 06:57:06 +02:00
ajnart
0b9c4d6375
fix: address performance review feedback
2026-07-29 06:50:13 +02:00
ajnart
f8d8a09c56
perf(proxy): isolate settings database reads
2026-07-29 06:47:07 +02:00
ajnart
4ca0b747bb
chore(next): upgrade preview and isolate dev services
2026-07-29 06:47:07 +02:00
Thomas Camlong
1e9d3e0656
fix(db): increase mysql migration test timeout to 120s
2026-07-20 15:18:50 +02:00
Thomas
5e39c8813a
feat(preferences): add enableRightClickOnWidgets user preference ( #6298 )
2026-07-17 14:42:19 +02:00
Thomas
def3ede3bc
fix(db): restore widget_secret migration journal entries accidentally removed by #6206 ( #6288 )
2026-07-11 15:40:06 +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
Thomas
885be1b9a1
fix(widget-secrets): add missing widget_secret migration and add error notifications ( #6192 )
...
* fix(widget-secrets): add missing widget_secret migration and add error notifications
The widget_secret table was defined in all three Drizzle schema files but
no SQL migration was ever generated to create it, causing setSecret to
fail with 'no such table: widget_secret' in production (drizzle-kit push
in development hid the problem).
- Add migration SQL for sqlite (0040), mysql (0042), postgresql (0008)
- Update journal entries for all three dialects
- Add onError handlers to setSecret/deleteSecret mutations so errors
are shown as red notifications instead of silently swallowed
Fixes #6186
* fix(widget-secrets): add missing drizzle snapshots for merge-url and widget_secret migrations
The merge_custom_widget_url migration (0039/0041/0007) was committed
without a corresponding snapshot, breaking drizzle-kit generate for
all future migrations. This adds:
- 0039/0041/0007 snapshots reflecting the merge-url changes
(base_url+endpoint -> url, add enabled column)
- 0040/0042/0008 snapshots reflecting the widget_secret table
All snapshot chains now match journal entries (41/43/9 entries each).
2026-07-04 17:57:40 +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
Thomas Camlong
fb348044fb
refactor widget-only integrations
2026-06-27 10:57:12 +02:00
Thomas
f1ee76c99c
fix(db): crash on MySQL — replace onConflictDoNothing with dialect-neutral pre-filter ( #5995 )
2026-06-18 12:45:02 +02:00
Thomas
93c008ff4f
docs: add varied improvements ( #5942 )
2026-06-12 15:50:41 +02:00
Thomas Camlong
f26007a29a
fix(db): inline custom widget seed data to fix CJS migration crash
...
`import.meta.url` is undefined when esbuild bundles migrate.ts into
migrate.cjs, causing a TypeError at startup. Inline the seed JSON
data directly instead of reading from disk, which also fixes the
Docker image missing the seed files (not copied by Dockerfile).
2026-06-10 19:32:59 +02:00
Thomas
aecbca2b81
feat: custom widgets ( #5889 )
2026-06-10 18:58:14 +02:00
Thomas
a4db9cf0dc
feat(beszel): add Beszel integration with system monitoring widgets ( #5900 )
2026-06-10 18:27:05 +02:00
Thomas Camlong
efd37dca93
fix(db): log when UNSAFE_ENABLE_MOCK_INTEGRATION is enabled during seeding
...
Warn on startup seed when mock integration env flag is set, matching demo mode visibility.
2026-06-05 18:43:33 +02:00
Thomas
0b663a7fc6
feat(onboarding): guided management and board tours ( #5756 )
2026-06-05 16:54:50 +02:00
Thomas
dd7a4908a3
feat(onboarding): enhance integration setup with Docker discovery and URL templating ( #5607 )
2026-06-05 16:50:35 +02:00
Thomas
0a6467979a
feat: add comprehensive demo mode with mock integrations ( #5870 )
2026-06-05 16:36:45 +02:00
Meier Lukas
650f761325
ci(format): fails to apply format due to conflict between --write and --check ( #5815 )
2026-05-29 11:07:48 +02:00
605af19cd8
refactor: replace ESLint + Prettier with OXC (oxlint + oxfmt) ( #5741 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
Co-authored-by: Meierschlumpf <63781622+Meierschlumpf@users.noreply.github.com >
2026-05-27 09:37:44 +02:00
Thomas and Manuel
dade477b32
feat(seed): add demo mode with pre-seeded user ( #5739 )
...
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com >
2026-05-21 16:08:46 +02:00
Thomas and Meier Lukas
b5c316b825
feat(spotlight): rework !bang search UX ( #4813 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-07 18:38:40 +02:00
43cc68bdd4
feat: add Umami Analytics integration and widget ( #5362 )
...
Co-authored-by: Josh G <febrile42@users.noreply.github.com >
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
Co-authored-by: Thomas <thomas@ajnart.fr >
2026-05-07 17:50:58 +02:00
Meier Lukas
ed6680ba6a
perf(icons): updater takes 10 seconds to run with high cpu usage ( #5608 )
2026-05-01 16:21:22 +02:00
Meier Lukas
72d636c0f0
refactor(deps): migrate to pnpm catalog ( #5464 )
2026-04-13 22:45:24 +02:00
homarr-renovate[bot]
1057b478c3
fix(deps): update testcontainers-node monorepo to ^11.14.0 ( #5498 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-13 14:43:08 +00:00
homarr-renovate[bot]
845f11526e
fix(deps): update dependency dotenv to ^17.4.1 ( #5462 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-10 19:22:28 +00:00
Meier Lukas
2454cac7be
fix(security): remove salt from database ( #5412 )
2026-04-10 20:48:20 +02:00
homarr-renovate[bot]
37d7c8535f
chore(deps): update dependency esbuild to ^0.28.0 ( #5435 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-08 18:14:39 +02:00
homarr-renovate[bot]
50bf7cdf19
fix(deps): update dependency dotenv to ^17.4.0 ( #5427 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-07 14:24:59 +00:00
homarr-renovate[bot]
e2410f143c
chore(deps): update dependency esbuild to ^0.27.5 ( #5428 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-07 16:18:19 +02:00
homarr-renovate[bot]
0a78e3f12a
fix(deps): update dependency drizzle-orm to ^0.45.2 ( #5388 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-01 19:02:54 +00:00
homarr-renovate[bot] and Meier Lukas
46db8b6ab3
fix(deps): update dependency better-sqlite3 to ^12.8.0 ( #5266 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-03-31 18:43:59 +02:00
homarr-renovate[bot]
bbd42600aa
chore(deps): update dependency @types/pg to ^8.20.0 ( #5331 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-27 18:05:32 +00:00
homarr-renovate[bot]
6f8e62963a
fix(deps): update mantine monorepo to ^8.3.18 ( #5298 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 16:44:42 +00:00
homarr-renovate[bot]
c009dd7de6
fix(deps): update testcontainers-node monorepo to ^11.13.0 ( #5293 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 10:40:06 +00:00
homarr-renovate[bot]
09227a3884
fix(deps): update dependency drizzle-kit to ^0.31.10 ( #5291 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 09:41:50 +00:00
homarr-renovate[bot]
4fb48c23a2
fix(deps): update dependency mysql2 to v3.20.0 ( #5283 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-20 22:37:51 +00:00
homarr-renovate[bot]
6fa9087a11
fix(deps): update mantine monorepo to ^8.3.17 ( #5271 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-19 16:04:34 +00:00
homarr-renovate[bot]
397c1d3dbc
chore(deps): update dependency esbuild to ^0.27.4 ( #5256 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-17 19:53:21 +01:00
homarr-renovate[bot]
1040ecac04
fix(deps): update dependency mysql2 to v3.19.1 ( #5240 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-14 16:41:47 +00:00
homarr-renovate[bot]
a9085399c0
chore(deps): update dependency eslint to ^9.39.4 ( #5218 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-12 07:57:01 +00:00
homarr-renovate[bot]
1c6e23a4b6
fix(deps): update dependency pg to ^8.20.0 ( #5198 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-11 19:55:40 +00:00