From 3d700f624e5b68122390d4693f0196b0ac7248c8 Mon Sep 17 00:00:00 2001 From: codebude Date: Fri, 12 Jun 2026 11:05:24 +0200 Subject: [PATCH] Added integration docs for Glance --- docs/.vitepress/config.base.ts | 1 + docs/api/integrations/glance.md | 61 ++++++++++++++++++ docs/api/integrations/index.md | 3 + .../screenshots/integrations-glance-light.png | Bin 0 -> 4077 bytes .../screenshots/integrations-glance.png | Bin 0 -> 4034 bytes 5 files changed, 65 insertions(+) create mode 100644 docs/api/integrations/glance.md create mode 100644 docs/public/screenshots/integrations-glance-light.png create mode 100644 docs/public/screenshots/integrations-glance.png diff --git a/docs/.vitepress/config.base.ts b/docs/.vitepress/config.base.ts index 2023b17..157d274 100644 --- a/docs/.vitepress/config.base.ts +++ b/docs/.vitepress/config.base.ts @@ -82,6 +82,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Dashy', link: '/api/integrations/dashy' }, + { text: 'Glance', link: '/api/integrations/glance' }, { text: 'Home Assistant', link: '/api/integrations/homeassistant' }, { text: 'Homepage', link: '/api/integrations/homepage' }, ], diff --git a/docs/api/integrations/glance.md b/docs/api/integrations/glance.md new file mode 100644 index 0000000..5045a53 --- /dev/null +++ b/docs/api/integrations/glance.md @@ -0,0 +1,61 @@ +# Glance + +LibrisLog can be integrated into [Glance](https://github.com/glanceapp/glance), +a self-hosted dashboard for your services, using its +[custom API widget](https://github.com/glanceapp/glance/blob/main/docs/custom-api.md). + +This widget displays your reading statistics as styled stat cards directly on +your Glance dashboard. + +## Prerequisites + +- A running LibrisLog instance reachable from your Glance server +- An [API key](/api/integrations/#api-keys) with access to the + statistics endpoint + +## Configuration + +Add the following to your Glance `glance.yml` under the widget section: + +```yaml +widgets: + - type: custom-api + title: LibrisLog stats + cache: 1h + url: /api/books/stats + headers: + x-api-key: + Accept: application/json + template: | +
+
+
{{ .JSON.Int "books_read" | formatNumber }}
+
READ
+
+
+
{{ .JSON.Int "books_reading" | formatNumber }}
+
READING
+
+
+
{{ .JSON.Int "books_want_to_read" | formatNumber }}
+
WANT TO READ
+
+
+
{{ .JSON.Int "total_books" | formatNumber }}
+
TOTAL
+
+
+``` + +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 | + +## Result + +![Glance Widget (dark)](/screenshots/integrations-glance.png) + +![Glance Widget (light)](/screenshots/integrations-glance-light.png) diff --git a/docs/api/integrations/index.md b/docs/api/integrations/index.md index 7501750..38d592a 100644 --- a/docs/api/integrations/index.md +++ b/docs/api/integrations/index.md @@ -19,6 +19,9 @@ API key to use them. You can create one either: - [Dashy](/api/integrations/dashy) — Display your LibrisLog statistics as styled stat cards on a [Dashy](https://dashy.to/) dashboard using the HTML embedded widget. +- [Glance](/api/integrations/glance) — Display your LibrisLog statistics on a + [Glance](https://github.com/glanceapp/glance) dashboard using the custom API + widget. - [Home Assistant](/api/integrations/homeassistant) — Expose your LibrisLog reading statistics as sensors in [Home Assistant](https://www.home-assistant.io/) using the RESTful diff --git a/docs/public/screenshots/integrations-glance-light.png b/docs/public/screenshots/integrations-glance-light.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa2572de71ed10d22c8b595e5cb36e2aec70369 GIT binary patch literal 4077 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 literal 0 HcmV?d00001 diff --git a/docs/public/screenshots/integrations-glance.png b/docs/public/screenshots/integrations-glance.png new file mode 100644 index 0000000000000000000000000000000000000000..72403c5da1096731a3a2bf28331d9e88a642b181 GIT binary patch literal 4034 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 E0L8u(LI3~& literal 0 HcmV?d00001