Nicolas Meienberger
6f8ff9d606
refactor: add body limit middleware
2026-01-30 21:36:15 +01:00
Nicolas Meienberger
774c11a9ac
revert(sftp-repo): put back previous values for alive count and alive interval
2026-01-30 18:16:07 +01:00
Nico
8ced05c5a9
feat: add refresh snapshot list and snapshot error page ( #434 )
...
Closes #372
2026-01-29 23:20:13 +01:00
Nico
da5ad5c817
feat: add config for SMB guest mode ( #431 )
...
* feat: add config for SMB guest mode
Closes #279
* chore: pr feedbacks
2026-01-29 23:16:31 +01:00
Nico
3786a9283b
fix(backup-card): dot invisible if volume name too long ( #430 )
2026-01-29 21:14:21 +01:00
Nico
bde5302ca4
feat(smtp-notification): add missing from name param to form ( #429 )
...
* feat(smtp-notification): add missing from name param to form
* chore: gen api client
2026-01-29 21:13:51 +01:00
Nico
93aabebd51
refactor: remove slug constraint in volume name ( #428 )
...
* refactor: remove slug constraint in volume name
Closes #413
* chore: remove un-used imports
* fix(notifications): validate name is not empty
* refactor: deny empty names
2026-01-29 20:57:20 +01:00
Nicolas Meienberger
861f81f14e
refactor: use bun random uuid v7 for member id
2026-01-29 08:57:46 +01:00
Nicolas Meienberger
e8318d577b
fix: user missing their org on startup
2026-01-29 08:31:58 +01:00
Nicolas Meienberger
dfb4890c44
fix: remove new migration dependency on legacy re-key one
2026-01-29 07:51:02 +01:00
Nicolas Meienberger
7d131719b7
fix: skip read data for doctor operation
2026-01-29 07:38:51 +01:00
Nicolas Meienberger
726bd5d06f
chore: skip secure headers in non-production envrionments
2026-01-28 22:15:42 +01:00
Nico
45032362a8
feat: base-url env variable ( #419 )
2026-01-28 01:19:37 +01:00
Nicolas Meienberger
8f8b370679
test: fix cookie name
2026-01-27 23:25:28 +01:00
Nicolas Meienberger
4011ed778f
chore: rename cookie prefix to zerobyte
2026-01-27 23:02:34 +01:00
Nicolas Meienberger
0ec23da8ab
fix: use custom cookie prefix
2026-01-27 22:48:54 +01:00
Nicolas Meienberger
571489a10b
chore: downgrade dependencies
2026-01-27 22:29:20 +01:00
Nicolas Meienberger
da329826c1
fix: add organization for users that don't have one
2026-01-27 22:03:48 +01:00
Nicolas Meienberger
1fbd6aa3db
chore(better-auth): disable origin check if no trusted origins are passed
2026-01-27 20:21:22 +01:00
Didin Sino
d449547336
feat: add support for sending notifications to Telegram group topics ( #401 )
2026-01-27 19:43:05 +01:00
kealuya
c69615b3b6
Description: ( #393 )
...
Added support for virtual-host style access for Huawei Cloud OBS. This is achieved by introducing the AWS_S3_BUCKET_LOOKUP environment variable and adding the s3.bucket-lookup=dns option to the parameters.
Changes:
Set AWS_S3_BUCKET_LOOKUP environment variable.
Included s3.bucket-lookup=dns in the S3 configuration options to ensure compatibility with Huawei OBS DNS-based bucket addressing.
2026-01-25 11:23:14 +01:00
dependabot[bot]
ba8b599059
chore(deps): bump the minor-patch group across 1 directory with 17 updates ( #404 )
...
* chore(deps): bump the minor-patch group across 1 directory with 17 updates
Bumps the minor-patch group with 17 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@react-router/node](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-node ) | `7.12.0` | `7.13.0` |
| [@react-router/serve](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-serve ) | `7.12.0` | `7.13.0` |
| [@scalar/hono-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/hono ) | `0.9.34` | `0.9.35` |
| [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query ) | `5.90.19` | `5.90.20` |
| [better-auth](https://github.com/better-auth/better-auth/tree/HEAD/packages/better-auth ) | `1.4.15` | `1.4.17` |
| [hono](https://github.com/honojs/hono ) | `4.11.4` | `4.11.5` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react ) | `0.562.0` | `0.563.0` |
| [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router ) | `7.12.0` | `7.13.0` |
| [recharts](https://github.com/recharts/recharts ) | `3.6.0` | `3.7.0` |
| [@happy-dom/global-registrator](https://github.com/capricorn86/happy-dom ) | `20.3.3` | `20.3.7` |
| [@hey-api/openapi-ts](https://github.com/hey-api/openapi-ts ) | `0.90.4` | `0.90.9` |
| [@playwright/test](https://github.com/microsoft/playwright ) | `1.57.0` | `1.58.0` |
| [@react-router/dev](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dev ) | `7.12.0` | `7.13.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `25.0.9` | `25.0.10` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react ) | `19.2.8` | `19.2.9` |
| [lightningcss](https://github.com/parcel-bundler/lightningcss ) | `1.30.2` | `1.31.1` |
| [vite-tsconfig-paths](https://github.com/aleclarson/vite-tsconfig-paths ) | `6.0.4` | `6.0.5` |
Updates `@react-router/node` from 7.12.0 to 7.13.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-node/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/@react-router/node@7.13.0/packages/react-router-node )
Updates `@react-router/serve` from 7.12.0 to 7.13.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-serve/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/@react-router/serve@7.13.0/packages/react-router-serve )
Updates `@scalar/hono-api-reference` from 0.9.34 to 0.9.35
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/hono/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/hono )
Updates `@tanstack/react-query` from 5.90.19 to 5.90.20
- [Release notes](https://github.com/TanStack/query/releases )
- [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md )
- [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.90.20/packages/react-query )
Updates `better-auth` from 1.4.15 to 1.4.17
- [Release notes](https://github.com/better-auth/better-auth/releases )
- [Commits](https://github.com/better-auth/better-auth/commits/v1.4.17/packages/better-auth )
Updates `hono` from 4.11.4 to 4.11.5
- [Release notes](https://github.com/honojs/hono/releases )
- [Commits](https://github.com/honojs/hono/compare/v4.11.4...v4.11.5 )
Updates `lucide-react` from 0.562.0 to 0.563.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/0.563.0/packages/lucide-react )
Updates `react-router` from 7.12.0 to 7.13.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.13.0/packages/react-router )
Updates `recharts` from 3.6.0 to 3.7.0
- [Release notes](https://github.com/recharts/recharts/releases )
- [Changelog](https://github.com/recharts/recharts/blob/main/CHANGELOG.md )
- [Commits](https://github.com/recharts/recharts/compare/v3.6.0...v3.7.0 )
Updates `@happy-dom/global-registrator` from 20.3.3 to 20.3.7
- [Release notes](https://github.com/capricorn86/happy-dom/releases )
- [Commits](https://github.com/capricorn86/happy-dom/compare/v20.3.3...v20.3.7 )
Updates `@hey-api/openapi-ts` from 0.90.4 to 0.90.9
- [Release notes](https://github.com/hey-api/openapi-ts/releases )
- [Changelog](https://github.com/hey-api/openapi-ts/blob/main/docs/CHANGELOG.md )
- [Commits](https://github.com/hey-api/openapi-ts/compare/@hey-api/openapi-ts@0.90.4...@hey-api/openapi-ts@0.90.9 )
Updates `@playwright/test` from 1.57.0 to 1.58.0
- [Release notes](https://github.com/microsoft/playwright/releases )
- [Commits](https://github.com/microsoft/playwright/compare/v1.57.0...v1.58.0 )
Updates `@react-router/dev` from 7.12.0 to 7.13.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dev/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/@react-router/dev@7.13.0/packages/react-router-dev )
Updates `@types/node` from 25.0.9 to 25.0.10
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `@types/react` from 19.2.8 to 19.2.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react )
Updates `lightningcss` from 1.30.2 to 1.31.1
- [Release notes](https://github.com/parcel-bundler/lightningcss/releases )
- [Commits](https://github.com/parcel-bundler/lightningcss/commits )
Updates `vite-tsconfig-paths` from 6.0.4 to 6.0.5
- [Release notes](https://github.com/aleclarson/vite-tsconfig-paths/releases )
- [Commits](https://github.com/aleclarson/vite-tsconfig-paths/compare/v6.0.4...v6.0.5 )
---
updated-dependencies:
- dependency-name: "@react-router/node"
dependency-version: 7.13.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@react-router/serve"
dependency-version: 7.13.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@scalar/hono-api-reference"
dependency-version: 0.9.35
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@tanstack/react-query"
dependency-version: 5.90.20
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: better-auth
dependency-version: 1.4.17
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: hono
dependency-version: 4.11.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: lucide-react
dependency-version: 0.563.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: react-router
dependency-version: 7.13.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: recharts
dependency-version: 3.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@happy-dom/global-registrator"
dependency-version: 20.3.7
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@hey-api/openapi-ts"
dependency-version: 0.90.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@playwright/test"
dependency-version: 1.58.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@react-router/dev"
dependency-version: 7.13.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@types/node"
dependency-version: 25.0.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@types/react"
dependency-version: 19.2.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: lightningcss
dependency-version: 1.31.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: vite-tsconfig-paths
dependency-version: 6.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
* chore: bump hono version in overrides
* chore: gen api client
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com >
2026-01-25 11:22:29 +01:00
Nico
273aa2b9ac
feat: add a confirm dialog before stopping the backup ( #409 )
2026-01-25 10:20:23 +01:00
Nicolas Meienberger
1166fcb3e7
test: fix typing issue
2026-01-25 10:01:51 +01:00
Nicolas Meienberger
16ac608d46
fix(sftp-repo): password request prompted in console
2026-01-24 23:03:54 +01:00
Nicolas Meienberger
458799297d
refactor: make sse events isolated per org
2026-01-24 22:45:56 +01:00
Nicolas Meienberger
17776606ee
temp: test re-key 2fas
2026-01-22 22:44:23 +01:00
Nicolas Meienberger
88fa06b503
fix: prevent path traversal in list volume files
2026-01-22 22:32:04 +01:00
Nicolas Meienberger
ffc43e0c25
refactor(sftp-backend): use node spawn to properly send password stdin instead of echo
2026-01-22 22:07:10 +01:00
Nicolas Meienberger
0e5438897c
fix(repo-mutex): catch errors and remove listener
2026-01-22 22:06:39 +01:00
Nico
51d2ffad17
refactor: mount smb by puttings credentials in temporary file ( #396 )
2026-01-22 21:56:20 +01:00
Nico
2ab37e6b67
refactor: async doctor ( #375 )
...
* feat: background doctor operation
* refactor(repo-details): design layout
* refactor(doctor): support abort signal in all operations
* chore: fix linting issue
* chore: pr feedbacks
* chore: merge conflicts
* refactor: handle aborted signal in all operations
* chore: pr feedbacks
* chore: remove old migration
2026-01-22 21:55:45 +01:00
Nico
da37b08fa0
feat: user management ( #394 )
...
* feat: user management settings
* feat: cleanup user's org when deleting them
* chore: pr feedback
* refactor(create-user): tanstack mutation
2026-01-21 22:25:15 +01:00
Nico
451aed8983
Multi users ( #381 )
...
* feat(db): add support for multiple users and organizations
* feat: backfill entities with new organization id
* refactor: filter all backend queries to surface only organization specific entities
* refactor: each org has its own restic password
* test: ensure organization is created
* chore: pr feedbacks
* refactor: filter by org id in all places
* refactor: download restic password from stored db password
* refactor(navigation): use volume id in urls instead of name
* feat: disable registrations
* refactor(auth): bubble up auth error to hono
* refactor: use async local storage for cleaner context sharing
* refactor: enable user registration vs disabling it
* test: multi-org isolation
* chore: final cleanup
2026-01-20 22:28:22 +01:00
Nico
d3f9ced5dc
refactor: use spawn & exec instead of bun $ ( #356 )
...
* refactor: use spawn & exec accordingly
* chore: pr feedbacks
2026-01-15 22:09:00 +01:00
Nicolas Meienberger
2cbd0d1021
chore: bump bun to v1.3.6
2026-01-15 22:03:46 +01:00
Nicolas Meienberger
f4a222aa15
refactor(up/down limit): allow floating value & default to 1
2026-01-15 18:27:50 +01:00
Nicolas Meienberger
31719103f6
Merge branch 'Rajdave69-main'
2026-01-15 18:14:06 +01:00
Nicolas Meienberger
1622e34b0d
refactoring(bw-limit): stylistic refactoring
2026-01-15 18:07:00 +01:00
dependabot[bot]
cb72e6c073
chore(deps): bump the minor-patch group with 9 updates ( #355 )
...
* chore(deps): bump the minor-patch group with 9 updates
Bumps the minor-patch group with 9 updates:
| Package | From | To |
| --- | --- | --- |
| [@inquirer/prompts](https://github.com/SBoudrias/Inquirer.js ) | `8.1.0` | `8.2.0` |
| [better-auth](https://github.com/better-auth/better-auth/tree/HEAD/packages/better-auth ) | `1.4.10` | `1.4.12` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form ) | `7.70.0` | `7.71.0` |
| [@hey-api/openapi-ts](https://github.com/hey-api/openapi-ts ) | `0.90.2` | `0.90.3` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `25.0.3` | `25.0.7` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react ) | `19.2.7` | `19.2.8` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt ) | `0.23.0` | `0.24.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint ) | `1.38.0` | `1.39.0` |
| [vite-tsconfig-paths](https://github.com/aleclarson/vite-tsconfig-paths ) | `6.0.3` | `6.0.4` |
Updates `@inquirer/prompts` from 8.1.0 to 8.2.0
- [Release notes](https://github.com/SBoudrias/Inquirer.js/releases )
- [Commits](https://github.com/SBoudrias/Inquirer.js/compare/@inquirer/prompts@8.1.0...@inquirer/prompts@8.2.0 )
Updates `better-auth` from 1.4.10 to 1.4.12
- [Release notes](https://github.com/better-auth/better-auth/releases )
- [Commits](https://github.com/better-auth/better-auth/commits/v1.4.12/packages/better-auth )
Updates `react-hook-form` from 7.70.0 to 7.71.0
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases )
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md )
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.70.0...v7.71.0 )
Updates `@hey-api/openapi-ts` from 0.90.2 to 0.90.3
- [Release notes](https://github.com/hey-api/openapi-ts/releases )
- [Changelog](https://github.com/hey-api/openapi-ts/blob/main/docs/CHANGELOG.md )
- [Commits](https://github.com/hey-api/openapi-ts/compare/@hey-api/openapi-ts@0.90.2...@hey-api/openapi-ts@0.90.3 )
Updates `@types/node` from 25.0.3 to 25.0.7
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `@types/react` from 19.2.7 to 19.2.8
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react )
Updates `oxfmt` from 0.23.0 to 0.24.0
- [Release notes](https://github.com/oxc-project/oxc/releases )
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md )
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.24.0/npm/oxfmt )
Updates `oxlint` from 1.38.0 to 1.39.0
- [Release notes](https://github.com/oxc-project/oxc/releases )
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md )
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.39.0/npm/oxlint )
Updates `vite-tsconfig-paths` from 6.0.3 to 6.0.4
- [Release notes](https://github.com/aleclarson/vite-tsconfig-paths/releases )
- [Commits](https://github.com/aleclarson/vite-tsconfig-paths/compare/v6.0.3...v6.0.4 )
---
updated-dependencies:
- dependency-name: "@inquirer/prompts"
dependency-version: 8.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: better-auth
dependency-version: 1.4.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: react-hook-form
dependency-version: 7.71.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: "@hey-api/openapi-ts"
dependency-version: 0.90.3
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@types/node"
dependency-version: 25.0.7
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: "@types/react"
dependency-version: 19.2.8
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
- dependency-name: oxfmt
dependency-version: 0.24.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: oxlint
dependency-version: 1.39.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-patch
- dependency-name: vite-tsconfig-paths
dependency-version: 6.0.4
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
* chore: gen api client
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com >
2026-01-15 16:14:05 +01:00
Nicolas Meienberger
02fe55b533
fix: properly catch before fallback mount
2026-01-15 16:14:05 +01:00
Nico
9754e366c1
feat: add CLI command to change username ( #342 )
...
* feat: add CLI command to change username
* ci: fix wrong folder chmod
2026-01-15 16:14:05 +01:00
Nicolas Meienberger
52280be3c2
chore: lowercase all emails
2026-01-15 16:14:05 +01:00
Nicolas Meienberger
f0871ece52
chore: hide email in settings (not yet changeable)
2026-01-15 16:13:39 +01:00
Nico
04e824c332
e2e: test backup & restore functions ( #341 )
2026-01-15 16:13:39 +01:00
Nico
60c0ce208d
test(e2e): admin user registration ( #338 )
...
* test(e2e): admin user registration
* ci: e2e workflow
* feat: disable rate limiting env var
* test(e2e): fix order of execution in registration tests
* ci: run e2e tests before release
2026-01-15 16:13:39 +01:00
Nicolas Meienberger
1462250727
chore: remove "about", "over", "almost" from timeago
2026-01-15 16:13:14 +01:00
Nicolas Meienberger
881e8f8abe
feat: configurable trusted origins
2026-01-15 16:13:14 +01:00
Nicolas Meienberger
4fda10d89d
style(snapshots-timeline): ensure same width for all cards
2026-01-15 16:13:14 +01:00
Nico
9bff375217
refactor: format dates in a human-friendly way ( #334 )
2026-01-15 16:13:14 +01:00