From 3d9a0cd17b9844b661d0fbe4588f872754caaeee Mon Sep 17 00:00:00 2001 From: codebude Date: Wed, 2 Sep 2026 06:40:30 +0200 Subject: [PATCH] Added Homer dashboard integration docs --- docs/.vitepress/config.base.ts | 1 + docs/api/integrations/homer.md | 64 ++++++++++++++++++ docs/api/integrations/index.md | 3 + .../public/screenshots/integrations-homer.png | Bin 0 -> 10776 bytes 4 files changed, 68 insertions(+) create mode 100644 docs/api/integrations/homer.md create mode 100644 docs/public/screenshots/integrations-homer.png diff --git a/docs/.vitepress/config.base.ts b/docs/.vitepress/config.base.ts index 5f3829e0..e9e5a9a6 100644 --- a/docs/.vitepress/config.base.ts +++ b/docs/.vitepress/config.base.ts @@ -98,6 +98,7 @@ export default defineConfig({ { text: 'Home Assistant', link: '/api/integrations/homeassistant' }, { text: 'Homarr', link: '/api/integrations/homarr' }, { text: 'Homepage', link: '/api/integrations/homepage' }, + { text: 'Homer', link: '/api/integrations/homer' }, ], }, ], diff --git a/docs/api/integrations/homer.md b/docs/api/integrations/homer.md new file mode 100644 index 00000000..8bb7b2cf --- /dev/null +++ b/docs/api/integrations/homer.md @@ -0,0 +1,64 @@ +# Homer + +LibrisLog can be integrated into [Homer](https://github.com/bastienwirtz/homer), +a self-hosted dashboard for your services, using its +[LibrisLog custom service](https://github.com/bastienwirtz/homer/blob/main/docs/customservices.md#librislog). + +This smart card displays your reading statistics: total books, books read, +currently reading, and want-to-read counts directly on your Homer dashboard. + +## Prerequisites + +- A running LibrisLog instance reachable from the browser you use to view + your Homer dashboard (the card fetches data client-side) +- An [API key](/api/integrations/#api-keys) with access to the + statistics endpoint + +## Configuration + +Add the following service entry to your Homer `config.yml`: + +```yaml +- name: "LibrisLog" + type: "LibrisLog" + logo: "https://docs.librislog.app/logo.png" + url: "" + apikey: "" +``` + +The card supports auto refresh, which can be enabled individually for each +service using the `updateIntervalMs` option. + +> [!WARNING] +> Homer serves your `config.yml` at `/assets/config.yml` over HTTP. The API +> key in it is readable by anyone who can access your Homer instance. Only +> include it if your Homer instance is protected by authentication or access +> controls. + +## Placeholders + +Replace the placeholders with your own values: + +| Placeholder | Example | Description | +|---|---|---| +| `` | `http://192.168.1.100:8000` | The base URL of your LibrisLog instance (http or https) | +| `` | `lk_nRHsF3jxIBDa9u....` | An API key with access to the statistics endpoint | +| `` | `http://192.168.1.100:8080` | The base URL of your Homer instance | + +## CORS + +The Homer card fetches the API directly from the browser. You must add your +Homer URL to the +[`CORS_ORIGINS`](/guide/configuration#core-settings) environment variable of +the LibrisLog backend: + +``` +CORS_ORIGINS=[""] +``` + +If the card stays empty or shows no statistics, check your browser console +for CORS errors. + +## Result + +![Homer Widget](/screenshots/integrations-homer.png) diff --git a/docs/api/integrations/index.md b/docs/api/integrations/index.md index 9635fbf4..055f0f8e 100644 --- a/docs/api/integrations/index.md +++ b/docs/api/integrations/index.md @@ -48,3 +48,6 @@ headers. For these integrations you need an **embed token**, used with the - [Homepage](/api/integrations/homepage) — Display your LibrisLog statistics on a [Homepage](https://gethomepage.dev/) dashboard using the custom API widget. +- [Homer](/api/integrations/homer) — Display your LibrisLog statistics on a + [Homer](https://github.com/bastienwirtz/homer) dashboard using the + LibrisLog custom service. diff --git a/docs/public/screenshots/integrations-homer.png b/docs/public/screenshots/integrations-homer.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6b07f22c03e51e754320a452d9a7f2dbd5b630 GIT binary patch literal 10776 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 literal 0 HcmV?d00001