Go to file
Denilson Sá Maia 9132ba2bc1
Restoring focus outline on links
Browsers have a focus outline for a reason: accessibility, letting users interact with the page using just the keyboard.

We, web developers, must not remove the focus outline without providing an equivalent alternative.

* https://accessiblewebsiteservices.com/accessible-css-focus-on-the-outline/
* https://theadminbar.com/accessibility-weekly/focus-outlines/
* https://stackoverflow.com/questions/9274948/css-outline-best-practices

I considered using the same visual feedback as the mouse-over effect, but that's not possible in the current HTML/CSS. That `transform: translateY(-3px)` effect is being applied to the parent `div.card`, which is not focusable, and thus we cannot trigger the same effect. The solution would require reworking both the HTML and CSS. (It can also be argued that tiny 3px offset is too subtle to be used as a focus indicator.)

For now, I've restored the default browser focus outline, and someday in the future someone could try to provide a different focus indication.
2025-07-11 09:28:13 +02:00
.github Update dockerhub.yml 2025-04-14 00:06:32 -07:00
.schema Fix typos in config-schema.json 2025-03-20 01:14:51 -07:00
docs docs: configure Pi-Hole v6 API with URL that ends with admin 2025-05-05 02:51:25 -07:00
dummy-data feat(pihole): Support Pi-hole v6 API with session management (#875) 2025-05-04 04:11:59 -07:00
public feat(cards): add multi link support 2025-02-02 06:39:28 -08:00
src Restoring focus outline on links 2025-07-11 09:28:13 +02:00
.dockerignore Regroup all editable files in one place 2020-06-28 11:05:40 -07:00
.gitignore Explicitly define start_url 2020-06-29 20:03:52 +02:00
.jsconfig.json feat(components): Register Generic component globally 2025-03-30 15:23:22 +02:00
CODE_OF_CONDUCT.md Adding contribution guidelines 2020-03-22 17:44:02 -07:00
CONTRIBUTING.md Update CONTRIBUTING.md 2025-04-26 01:53:22 -07:00
Dockerfile fix(Dockerfile): add default value for ARG VERSION_TAG to prevent build errors 2025-03-01 00:27:32 -08:00
LICENSE Replace licence placeholder. Fix #142 2020-12-23 10:55:05 -08:00
README.md Fix "Get Started" link 2025-01-05 06:25:50 -08:00
entrypoint.sh feat(logs): get lighthttpd accesslog in docker logs 2025-02-28 19:21:32 +01:00
eslint.config.js feat(components): Register Generic component globally 2025-03-30 15:23:22 +02:00
index.html Do not force lang 2025-05-17 14:38:04 +02:00
lighttpd-ipv6.sh fix: reverse IPV6_DISABLE logic 2023-10-21 05:16:20 -07:00
lighttpd.conf fix(docker): disable log for healthcheck requests 2025-03-17 13:50:35 -07:00
package.json chore(release): version bump 2025-05-17 14:52:27 +02:00
pnpm-lock.yaml update dependencies 2025-05-17 14:49:36 +02:00
vite.config.js chore: dependencies update 2024-10-16 14:08:13 +02:00

README.md

Homer's donut
Homer

A dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.

Buy Me A Coffee

License: Apache 2 Download homer static build speed-blazing Awesome

DemoDocker HubGet started

Highlights

  • Lightweight & Fast
  • 🥱 Low / No maintenance
  • 📄 Simple yaml file configuration
  • Installable (pwa)
  • 🧠 Smart cards
  • 🔍 Fuzzy search
  • 📂 Multi pages & item grouping
  • 🎨 Theme customization
  • ⌨️ keyboard shortcuts:
    • / Start searching.
    • Escape Stop searching.
    • Enter Open the first matching result (respects the bookmark's _target property).
    • Alt (or Option) + Enter Open the first matching result in a new tab.

Table of Contents

Get started

Homer is a full static html/js dashboard, based on a simple yaml configuration file. See documentation for information about the configuration (assets/config.yml) options.

It's meant to be served by an HTTP server, it will not work if you open the index.html directly over file:// protocol.

Using docker

The configuration directory is bind mounted to make your dashboard easy to maintain.

Start the container with docker run

# Make sure your local config directory exists
docker run -d \
  --name homer \
  -p 8080:8080 \
  --mount type=bind,source="/path/to/config/dir",target=/www/assets \
  --restart=unless-stopped \
  b4bz/homer:latest

[!NOTE]
The container will run using a user uid and gid 1000 by default, add --user <your-UID>:<your-GID> to the docker command to adjust it if necessary. Make sure this match the permissions of your assets directory.

or docker-compose

services:
  homer:
    image: b4bz/homer
    container_name: homer
    volumes:
      - /path/to/config/dir:/www/assets # Make sure your local config directory exists
    ports:
      - 8080:8080
    user: 1000:1000 # default
    environment:
      - INIT_ASSETS=1 # default, requires the config directory to be writable for the container user (see user option)
    restart: unless-stopped

Environment variables:

  • INIT_ASSETS (default: 1) Install example configuration file & assets (favicons, ...) to help you get started.

  • SUBFOLDER (default: null) If you would like to host Homer in a subfolder, (ex: http://my-domain/homer), set this to the subfolder path (ex /homer).

  • PORT (default: 8080) If you would like to change internal port of Homer from default 8080 to your port choice.

  • IPV6_DISABLE (default: 0) Set to 1 to disable listening on IPv6.

Using the release tarball (prebuilt, ready to use)

Download and extract the latest release (homer.zip) from the release page, rename the assets/config.yml.dist file to assets/config.yml, and put it behind a web server.

wget https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
unzip homer.zip -d homer
cd homer
cp assets/config.yml.dist assets/config.yml
pnpx http-server # or python -m http.server 8010 or any web server.

Build manually

pnpm install
pnpm build

Then your dashboard is ready to use in the /dist directory.