Polska wersja README znajduje się poniżej: Przejdź do sekcji PL
A lightweight, fast, and mobile-friendly homepage for adiker.eu. It gives quick access to self-hosted services, live status checks, latency display, language and theme controls, and an accessible interface.
This repository contains a static single-page application used as a front page for:
- Jellyfin
- FileBrowser Quantum
- autobrr
- OpenSpeedTest
- Muse (Discord music bot)
The page is intentionally framework-free: plain HTML, CSS, and vanilla JavaScript. That keeps it fast, portable, and easy to host on GitHub Pages or any static server.
- Responsive service tabs with a compact status overview and one focused detail card; the entire card links to services with a web interface
- Live dashboard showing every service's status and latency as measured by this browser
- Collapsed browser-local history of the last 24 measurements with mini timelines and averages
- Health checks for all configured services
- Explicit
Checking,Online,Unreachable, andUnknownservice states - Local Muse readiness probe with Discord gateway connectivity check
- Polling with warm-up measurement and failure backoff
- EN/PL language switcher
- Dark / Light / OLED themes
- Always-visible client context in the header with OS, browser, and device detection
- Keyboard-accessible tabs and visible focus states
- Responsive GitHub project cards for the four profile-pinned repositories and the LiMusic fork; each whole card is a link
.
├── AGENTS.md # Canonical instructions for AI agents
├── CLAUDE.md # Claude-specific quick context
├── CNAME # Custom domain for GitHub Pages (adiker.eu)
├── README.md # Project documentation
├── css/
│ └── styles.css # Styling, themes, responsive rules
├── img/
│ ├── 505675340-c40b22c9-33da-47b7-bc4c-ce69bb5cc174.png
│ │ # Local FileBrowser Quantum logo asset
│ └── muse-logo.png # Local Muse logo asset
├── index.html # Main page markup
├── index_old.html # Legacy page backup
├── js/
│ └── app.js # UI logic, i18n, status polling
└── ops/
└── muse-status/ # Host probe, systemd/Caddy templates, and tests
No build step is required.
python3 -m http.server 8080Then open http://localhost:8080.
Service endpoints are defined in js/app.js:
https://jellyfin.adiker.eu/healthhttps://files.adiker.eu/healthhttps://autobrr.adiker.eu/api/healthz/livenesshttps://speedtest.adiker.eu/healthhttps://muse.adiker.eu/health
The Muse endpoint returns 200 {"status":"online"} only when the local
container is running, has logged Ready! after its current start, and has an
established TCP connection to gateway.discord.gg. Otherwise it returns
503 {"status":"offline"}. It intentionally publishes no Discord, channel,
track, container, or failure details.
The local logo is copied from the official Muse repository.
The local bridge is installed from ops/muse-status/. It listens only on a
Unix socket and requires the adiker account to be a member of the Docker
group:
sudo install -Dm755 ops/muse-status/muse_status.py /usr/local/lib/muse-status/muse_status.py
sudo install -Dm644 ops/muse-status/muse-status.service /etc/systemd/system/muse-status.service
# Back up an existing Caddy snippet before replacing it.
sudo install -Dm644 ops/muse-status/Caddyfile /etc/caddy/conf.d/muse-status.caddy
sudo systemctl daemon-reload
sudo systemctl enable --now muse-status.service
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddyRun the probe tests with:
python3 -m unittest discover -s ops/muse-status -p 'test_*.py'User preferences are stored in localStorage:
adiker.themeadiker.langadiker.statusHistory.v1
The projects section is a static list in index.html, with EN/PL descriptions
in js/app.js. It links to the four repositories pinned on the
Adiker GitHub profile and the
LiMusic fork. Update the list manually when
the profile pins change; the page makes no GitHub API requests. The “See all
repositories” link opens the full repository list.
- Skip link to main content
- Semantic
tablistandtabpanelroles - Keyboard navigation with left/right arrows in tabs
aria-liveupdates for dashboard/status text:focus-visiblestyles- Reduced-motion support via
prefers-reduced-motion
AI agents should read AGENTS.md before making changes. It is the canonical source for repository guardrails, Git workflow, branch naming, commit style, and verification rules.
Claude-specific quick context is available in CLAUDE.md. If
CLAUDE.md conflicts with AGENTS.md, follow AGENTS.md.
The project is designed for static hosting, especially GitHub Pages. The
repository uses GitHub Actions to validate pull requests and publish the static
site from main.
Typical deployment flow:
- Push changes to a branch.
- Open a pull request to
main. - Wait for the
Pagesworkflow to pass. - Merge after review.
- GitHub Actions publishes the runtime files to GitHub Pages.
- Keep
CNAMEin the repository root for the custom domain mapping.
The workflow runs lightweight smoke checks: required file presence, CNAME
validation, JavaScript syntax validation, and a local static server check for
the HTML, CSS, JavaScript, and local image asset.
In repository settings, set GitHub Pages to use GitHub Actions as the build and deployment source.
Contributions are welcome.
- Fork the project.
- Create a feature branch.
- Commit your changes.
- Open a pull request.
Lekka, szybka i przyjazna mobilnie strona startowa dla adiker.eu. Zapewnia szybki dostęp do usług self-hosted, sprawdzanie ich statusu na żywo, pomiar opóźnień oraz wygodny, dostępny interfejs.
To repozytorium zawiera statyczną aplikację jednostronicową, używaną jako strona główna dla:
- Jellyfin
- FileBrowser Quantum
- autobrr
- OpenSpeedTest
- Muse (bot muzyczny Discorda)
Strona celowo nie używa frameworków: to czysty HTML, CSS i vanilla JavaScript. Dzięki temu pozostaje szybka, przenośna i łatwa w hostowaniu na GitHub Pages albo dowolnym serwerze statycznym.
- Responsywne zakładki usług z kompaktowym podsumowaniem i jednym aktywnym panelem szczegółów; cała karta prowadzi do usług z interfejsem WWW
- Dashboard pokazujący status i opóźnienie każdej usługi, mierzone z tej przeglądarki
- Zwijana lokalna historia ostatnich 24 pomiarów z mini-timeline i średnim opóźnieniem
- Health checki dla wszystkich skonfigurowanych usług
- Jawne stany usług:
Checking,Online,UnreachableiUnknown - Lokalna sonda gotowości Muse ze sprawdzeniem połączenia z gateway Discorda
- Odpytywanie z pomiarem rozgrzewkowym i backoffem przy błędach
- Przełącznik języka EN/PL
- Motywy Dark / Light / OLED
- Zawsze widoczne w nagłówku informacje o kliencie: OS, przeglądarka i typ urządzenia
- Zakładki dostępne z klawiatury i czytelne stany focus
- Responsywne karty GitHub z czterema przypiętymi repozytoriami i forkiem LiMusic; cała karta jest linkiem
.
├── AGENTS.md # Kanoniczne instrukcje dla agentów AI
├── CLAUDE.md # Szybki kontekst specyficzny dla Claude
├── CNAME # Własna domena dla GitHub Pages (adiker.eu)
├── README.md # Dokumentacja projektu
├── css/
│ └── styles.css # Style, motywy, reguły responsywne
├── img/
│ ├── 505675340-c40b22c9-33da-47b7-bc4c-ce69bb5cc174.png
│ │ # Lokalny zasób logo FileBrowser Quantum
│ └── muse-logo.png # Lokalny zasób logo Muse
├── index.html # Główny markup strony
├── index_old.html # Kopia starszej wersji strony
├── js/
│ └── app.js # Logika UI, i18n, odpytywanie statusów
└── ops/
└── muse-status/ # Sonda hosta, szablony systemd/Caddy i testy
Nie wymaga builda.
python3 -m http.server 8080Następnie otwórz http://localhost:8080.
Endpointy usług są zdefiniowane w js/app.js:
https://jellyfin.adiker.eu/healthhttps://files.adiker.eu/healthhttps://autobrr.adiker.eu/api/healthz/livenesshttps://speedtest.adiker.eu/healthhttps://muse.adiker.eu/health
Endpoint Muse zwraca 200 {"status":"online"} tylko wtedy, gdy lokalny
kontener działa, po bieżącym uruchomieniu zalogował Ready! i ma aktywne
połączenie TCP z gateway.discord.gg. W przeciwnym razie zwraca
503 {"status":"offline"}. Publiczna odpowiedź nie ujawnia serwera Discord,
kanału, utworu, kontenera ani przyczyny awarii.
Lokalne logo pochodzi z oficjalnego repozytorium Muse.
Lokalny most instaluje się z ops/muse-status/. Nasłuchuje wyłącznie na
sockecie Unix, a konto adiker musi należeć do grupy docker:
sudo install -Dm755 ops/muse-status/muse_status.py /usr/local/lib/muse-status/muse_status.py
sudo install -Dm644 ops/muse-status/muse-status.service /etc/systemd/system/muse-status.service
# Przed zastąpieniem istniejącego snippetu Caddy wykonaj jego kopię zapasową.
sudo install -Dm644 ops/muse-status/Caddyfile /etc/caddy/conf.d/muse-status.caddy
sudo systemctl daemon-reload
sudo systemctl enable --now muse-status.service
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddyTesty sondy uruchomisz poleceniem:
python3 -m unittest discover -s ops/muse-status -p 'test_*.py'Preferencje użytkownika zapisywane są w localStorage:
adiker.themeadiker.langadiker.statusHistory.v1
Sekcja projektów jest statyczną listą w index.html, a opisy EN/PL znajdują
się w js/app.js. Prowadzi do czterech repozytoriów przypiętych na
profilu Adiker w GitHubie oraz do
forka LiMusic. Po zmianie przypiętych
repozytoriów należy ręcznie zaktualizować listę; strona nie odpytuje API GitHuba.
Link „Zobacz wszystkie repozytoria” otwiera pełną listę repozytoriów.
- Link skip do głównej treści
- Semantyczne role
tablistitabpanel - Nawigacja klawiaturą przy pomocy strzałek lewo/prawo w tabach
- Aktualizacje
aria-livedla dashboardu i statusów - Style
:focus-visible - Wsparcie dla
prefers-reduced-motion
Agenci AI powinni przeczytać AGENTS.md przed wprowadzaniem zmian. To kanoniczne źródło zasad repozytorium, workflow Git, nazewnictwa branchy, stylu commitów i oczekiwanej weryfikacji.
Szybki kontekst dla Claude znajduje się w CLAUDE.md. Jeżeli
CLAUDE.md jest sprzeczny z AGENTS.md, obowiązuje AGENTS.md.
Projekt jest przygotowany pod hosting statyczny, szczególnie GitHub Pages.
Repozytorium używa GitHub Actions do walidowania pull requestów i publikowania
statycznej strony z main.
Typowy proces wdrożenia:
- Wypchnij zmiany na branch.
- Otwórz pull request do
main. - Poczekaj, aż workflow
Pagesprzejdzie poprawnie. - Zmerguj po review.
- GitHub Actions opublikuje pliki runtime na GitHub Pages.
- Zostaw plik
CNAMEw katalogu głównym dla mapowania własnej domeny.
Workflow wykonuje lekkie smoke checki: obecność wymaganych plików, walidację
CNAME, sprawdzenie składni JavaScript oraz lokalny test serwera statycznego
dla HTML, CSS, JavaScriptu i lokalnego obrazka.
W ustawieniach repozytorium ustaw GitHub Pages na źródło builda i wdrożenia GitHub Actions.
Wkład jest mile widziany.
- Zrób fork projektu.
- Utwórz branch z funkcją albo poprawką.
- Zacommituj zmiany.
- Otwórz pull request.
MIT