From a7006ca29e6ae286f5c7277f66f88b72f440d4df Mon Sep 17 00:00:00 2001 From: Stavros Date: Fri, 17 May 2024 22:44:44 +0300 Subject: [PATCH] Feat/glanceapp (#3501) * feat: glance app * refactor(glance): make sure data directory exists * refactor(glance): create an empty config file so docker doesnt make a directory * refactor(glance): add a preconfigured page * refactor(glance): add the tipi main network to the compose file --- apps/glance/config.json | 18 ++++++++ apps/glance/data/glance.yml | 65 ++++++++++++++++++++++++++++ apps/glance/docker-compose.json | 13 ++++++ apps/glance/docker-compose.yml | 39 +++++++++++++++++ apps/glance/metadata/description.md | 40 +++++++++++++++++ apps/glance/metadata/logo.jpg | Bin 0 -> 7864 bytes 6 files changed, 175 insertions(+) create mode 100644 apps/glance/config.json create mode 100644 apps/glance/data/glance.yml create mode 100644 apps/glance/docker-compose.json create mode 100644 apps/glance/docker-compose.yml create mode 100644 apps/glance/metadata/description.md create mode 100644 apps/glance/metadata/logo.jpg diff --git a/apps/glance/config.json b/apps/glance/config.json new file mode 100644 index 00000000..e2fbcef6 --- /dev/null +++ b/apps/glance/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Glance", + "port": 8568, + "available": true, + "exposable": true, + "id": "glance", + "tipi_version": 1, + "version": "v0.4.0", + "categories": ["utilities"], + "description": "A self-hosted dashboard that puts all your feeds in one place", + "short_desc": "Super configurable dashboard", + "author": "glanceapp", + "source": "https://github.com/glanceapp/glance", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"], + "dynamic_config": true +} diff --git a/apps/glance/data/glance.yml b/apps/glance/data/glance.yml new file mode 100644 index 00000000..e9d2e541 --- /dev/null +++ b/apps/glance/data/glance.yml @@ -0,0 +1,65 @@ +pages: + - name: Home + columns: + - size: small + widgets: + - type: calendar + + - type: rss + limit: 10 + collapse-after: 3 + cache: 3h + feeds: + - url: https://ciechanow.ski/atom.xml + - url: https://www.joshwcomeau.com/rss.xml + title: Josh Comeau + - url: https://samwho.dev/rss.xml + - url: https://awesomekling.github.io/feed.xml + - url: https://ishadeed.com/feed.xml + title: Ahmad Shadeed + + - type: twitch-channels + channels: + - theprimeagen + - cohhcarnage + - christitustech + - blurbs + - asmongold + - jembawls + + - size: full + widgets: + - type: hacker-news + + - type: videos + channels: + - UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling + - UCv6J_jJa8GJqFwQNgNrMuww # ServeTheHome + - UCOk-gHyjcWZNj3Br4oxwh0A # Techno Tim + + - type: reddit + subreddit: selfhosted + + - size: small + widgets: + - type: weather + location: London, United Kingdom + + - type: stocks + stocks: + - symbol: SPY + name: S&P 500 + - symbol: BTC-USD + name: Bitcoin + - symbol: NVDA + name: NVIDIA + - symbol: AAPL + name: Apple + - symbol: MSFT + name: Microsoft + - symbol: GOOGL + name: Google + - symbol: AMD + name: AMD + - symbol: RDDT + name: Reddit diff --git a/apps/glance/docker-compose.json b/apps/glance/docker-compose.json new file mode 100644 index 00000000..05e02f08 --- /dev/null +++ b/apps/glance/docker-compose.json @@ -0,0 +1,13 @@ +{ + "openPort": true, + "image": "glanceapp/glance:v0.4.0", + "name": "glance", + "internalPort": "8080", + "isMain": true, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/glance.yml", + "containerPath": "/app/glance.yml" + } + ] +} diff --git a/apps/glance/docker-compose.yml b/apps/glance/docker-compose.yml new file mode 100644 index 00000000..78a8d04f --- /dev/null +++ b/apps/glance/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.9" +services: + glance: + image: glanceapp/glance:v0.4.0 + restart: unless-stopped + container_name: glance + ports: + - ${APP_PORT}:8080 + volumes: + - ${APP_DATA_DIR}/data/glance.yml:/app/glance.yml + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.glance-web-redirect.redirectscheme.scheme: https + traefik.http.services.glance.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.glance-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.glance-insecure.entrypoints: web + traefik.http.routers.glance-insecure.service: glance + traefik.http.routers.glance-insecure.middlewares: glance-web-redirect + # Websecure + traefik.http.routers.glance.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.glance.entrypoints: websecure + traefik.http.routers.glance.service: glance + traefik.http.routers.glance.tls.certresolver: myresolver + # Local domain + traefik.http.routers.glance-local-insecure.rule: Host(`glance.${LOCAL_DOMAIN}`) + traefik.http.routers.glance-local-insecure.entrypoints: web + traefik.http.routers.glance-local-insecure.service: glance + traefik.http.routers.glance-local-insecure.middlewares: glance-web-redirect + # Local domain secure + traefik.http.routers.glance-local.rule: Host(`glance.${LOCAL_DOMAIN}`) + traefik.http.routers.glance-local.entrypoints: websecure + traefik.http.routers.glance-local.service: glance + traefik.http.routers.glance-local.tls: true diff --git a/apps/glance/metadata/description.md b/apps/glance/metadata/description.md new file mode 100644 index 00000000..fdc14cd2 --- /dev/null +++ b/apps/glance/metadata/description.md @@ -0,0 +1,40 @@ +

What if you could see everything at a...

+

Glance

+ +![example homepage](https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/readme-main-image.png) + +### Features + +#### Various widgets + +- RSS feeds +- Subreddit posts +- Weather +- Bookmarks +- Latest YouTube videos from specific channels +- Calendar +- Stocks +- iframe +- Twitch channels & top games +- GitHub releases +- Repository overview +- Site monitor + +#### Themeable + +![multiple color schemes example](https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/themes-example.png) + +#### Optimized for mobile devices + +![mobile device previews](https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/mobile-preview.png) + +#### Fast and lightweight + +- Minimal JS, no bloated frameworks +- Very few dependencies +- Single, easily distributed <15mb binary and just as small docker container +- All requests are parallelized, uncached pages usually load within ~1s (depending on internet speed and number of widgets) + +### Configuration + +Checkout the [configuration docs](docs/configuration.md) to learn more. A [preconfigured page](docs/configuration.md#preconfigured-page) is also available to get you started quickly. diff --git a/apps/glance/metadata/logo.jpg b/apps/glance/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a05a321077b2759c38bb21e058df0e44f1f2c845 GIT binary patch literal 7864 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 literal 0 HcmV?d00001