{"id":47543191,"url":"https://github.com/JohnnWi/homelab-project","last_synced_at":"2026-04-01T21:01:09.241Z","repository":{"id":339798138,"uuid":"1162486907","full_name":"JohnnWi/homelab-project","owner":"JohnnWi","description":"file per mobile app. Ios + Android","archived":false,"fork":false,"pushed_at":"2026-03-23T23:13:42.000Z","size":24865,"stargazers_count":226,"open_issues_count":5,"forks_count":13,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-24T22:15:33.861Z","etag":null,"topics":["android-app","beszel","beszel-hub","gitea","homelab","ios-app","nginx-proxy","pihole","portainer"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JohnnWi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-20T10:19:56.000Z","updated_at":"2026-03-24T22:08:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/JohnnWi/homelab-project","commit_stats":null,"previous_names":["johnnwi/homelab-project"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/JohnnWi/homelab-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JohnnWi%2Fhomelab-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JohnnWi%2Fhomelab-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JohnnWi%2Fhomelab-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JohnnWi%2Fhomelab-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JohnnWi","download_url":"https://codeload.github.com/JohnnWi/homelab-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JohnnWi%2Fhomelab-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-app","beszel","beszel-hub","gitea","homelab","ios-app","nginx-proxy","pihole","portainer"],"created_at":"2026-03-28T18:00:42.035Z","updated_at":"2026-04-01T21:01:09.228Z","avatar_url":"https://github.com/JohnnWi.png","language":"Kotlin","funding_links":[],"categories":["Swift"],"sub_categories":[],"readme":"# 🏠 Homelab Dashboard\n\n[![Swift](https://img.shields.io/badge/Swift-6.0-orange.svg?logo=swift)](https://swift.org)\n[![Kotlin](https://img.shields.io/badge/Kotlin-2.0-purple.svg?logo=kotlin)](https://kotlinlang.org)\n[![Platform](https://img.shields.io/badge/Platform-iOS%2026%2B-blue.svg)](https://developer.apple.com/ios/)\n[![Platform](https://img.shields.io/badge/Platform-Android%208.0%2B-green.svg)](https://developer.android.com)\n[![Made with SwiftUI](https://img.shields.io/badge/Made%20with-SwiftUI-blue.svg?logo=swift)](https://developer.apple.com/xcode/swiftui/)\n[![Made with Jetpack Compose](https://img.shields.io/badge/Made%20with-Jetpack%20Compose-green.svg?logo=jetpackcompose)](https://developer.android.com/jetpack/compose)\n\nA premium, fully native dual-platform solution for monitoring and managing your personal Homelab ecosystem. This project features two distinct, purpose-built native applications sharing the same design soul but optimized for their respective platforms.\n\n\u003e **Disclaimer:** This is a **vibe-coding** project built for fun and personal use. It is provided as-is with no guarantees. The author assumes no responsibility for any issues, data loss, or damages resulting from the use of this software.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=JohnnWi/homelab-project\u0026type=Date)](https://star-history.com/#JohnnWi/homelab-project\u0026Date)\n\n---\n\n## Highlights\n\n- **23 integrated services** — \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/portainer.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Portainer, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/pi-hole.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Pi-hole, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/beszel.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Beszel, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Gitea, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/nginx-proxy-manager.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Nginx Proxy Manager (+ NPMplus), \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/adguard-home.png\" width=\"18\" style=\"vertical-align:middle\"\u003e AdGuard DNS, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/healthchecks.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Healthcheck, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/patchman.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Patchmon, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/jellystat.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Jellystat, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/plex.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Plex, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/tailscale.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Tailscale, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/linkding.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Bookmarks, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/sonarr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Sonarr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/radarr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Radarr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/lidarr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Lidarr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/prowlarr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Prowlarr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/qbittorrent.png\" width=\"18\" style=\"vertical-align:middle\"\u003e qBittorrent, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/bazarr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Bazarr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/flaresolverr.png\" width=\"18\" style=\"vertical-align:middle\"\u003e FlareSolverr, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/technitium.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Technitium DNS, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/pangolin.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Pangolin, \u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/dockhand.png\" width=\"18\" style=\"vertical-align:middle\"\u003e Dockhand, Linux Update.\n- **Servarr stack** — Complete media automation dashboard: Sonarr + Radarr + Lidarr + Prowlarr + Bazarr + FlareSolverr + qBittorrent + Gluetun, unified in a single view.\n- **Multi-instance support** — Add multiple instances of the same service and switch between them seamlessly.\n- **Alternate app icons** — 6 variants to choose from: Default, Dark, Clear Light, Clear Dark, Tinted Light, Tinted Dark.\n- **Cyberpunk mode** — Toggle a unique cyberpunk visual theme for your service cards.\n- **Multilingual** — English, Italian, French, Spanish, German — auto-detected from your system language.\n- **2 native apps** — Swift 6 + SwiftUI (iOS) and Kotlin + Jetpack Compose (Android).\n\n---\n\n## 📱 iOS Version (Swift Native + Liquid Glass)\nDeveloped with **Swift 6** and **SwiftUI**, utilizing the latest native iOS 26 technologies. The UI is built around the **Liquid Glass** design system, leveraging frosted glass effects and fluid animations for a high-end feel.\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eDashboard\u003c/th\u003e\n    \u003cth\u003eServarr\u003c/th\u003e\n    \u003cth\u003eBookmarks\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/Dashboard.png\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/Servarr.png\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9201.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9187.PNG\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9193.PNG\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9190.PNG\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9199.PNG\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/plex.PNG\" width=\"120\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePortainer\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003eBeszel\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003eNginx Proxy\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePi-hole\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePlex\u003c/sub\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📸 View all iOS screenshots\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Portainer**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9187.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9188.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9189.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Nginx Proxy Manager / NPMplus**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9190.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9191.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9192.PNG\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Beszel**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9193.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9194.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9195.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9196.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9197.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9198.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Pi-hole** · **AdGuard DNS** · **Healthcheck**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9199.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9218.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9219.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9238.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9239.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Gitea / Forgejo** · **Patchmon** · **Jellystat** · **Plex**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9200.jpg\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9269.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/IMG_9275.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-ios/plex.PNG\" width=\"145\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n---\n\n## 🤖 Android Version (Kotlin Native + Material Expressive 3)\nBuilt with **Kotlin** and **Jetpack Compose**, following the **Material Expressive 3** design language. It focuses on dynamic color integration, haptic-rich interactions, and modern Android architecture.\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eDashboard\u003c/th\u003e\n    \u003cth\u003eServarr\u003c/th\u003e\n    \u003cth\u003eBookmarks\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/Dashboard.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/Servarr.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_19_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_1_2026-03-16_20-24-21.jpg\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_4_2026-03-16_20-24-21.jpg\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_13_2026-03-16_20-24-21.jpg\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_16_2026-03-16_20-24-21.jpg\" width=\"120\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/plex.jpg\" width=\"120\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePortainer\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003eBeszel\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003eNginx Proxy\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePi-hole\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003csub\u003ePlex\u003c/sub\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📸 View all Android screenshots\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Portainer**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_1_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_2_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_3_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Beszel**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_4_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_5_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_6_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_7_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_8_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_9_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_10_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_11_2026-03-16_20-24-21.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Nginx Proxy Manager / NPMplus** · **Pi-hole**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_13_2026-03-16_20-24-21.jpg\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_14_2026-03-16_20-24-21.jpg\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_16_2026-03-16_20-24-21.jpg\" width=\"145\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_17_2026-03-16_20-24-21.jpg\" width=\"145\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**AdGuard DNS** · **Healthcheck** · **Patchmon** · **Jellystat** · **Plex**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/adguard1.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/adguard2.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/healthcheck1.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/healthcheck2.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_1_2026-03-21_01-00-34.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_2_2026-03-21_01-00-34.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/plex.jpg\" width=\"110\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Bookmarks**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_18_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"media-docs/foto-android/photo_19_2026-03-16_20-24-21.jpg\" width=\"180\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n---\n\n## 👨‍🎓 Project \u0026 Author\nThis project is a solo endeavor developed by a single **University Student**. It was born from the need for a beautiful, unified way to manage home servers without sacrificing the performance and \"feel\" of native development.\n\n### ☕ Support the Project\nIf you find this dashboard useful, consider supporting my studies with a donation. Every bit helps!\n\n**EVM Wallet (Ethereum, BSC, Polygon, etc.):**\n`0x649641868e6876c2c1f04584a95679e01c1aaf0d`\n\n---\n\n## 📲 Install via AltStore / SideStore\n\nYou can install the iOS app directly on your iPhone without Xcode using **AltStore** or **SideStore**.\n\n1. Copy the source URL:\n   ```\n   https://raw.githubusercontent.com/JohnnWi/homelab-project/main/apps.json\n   ```\n2. Open **AltStore** or **SideStore** on your device.\n3. Go to **Sources** → **Add Source** and paste the URL above.\n4. Find **Homelab** in the source and tap **Install**.\n\nThe app will update automatically when new versions are released.\n\n\u003e **Note:** SideStore can re-sign the app automatically without needing a Mac every 7 days.\n\n---\n\n## 🚀 Getting Started\n\n### 🍎 Build for iOS\n1. **Open Xcode**: Open `HomelabSwift/Homelab.xcodeproj` in Xcode 26+.\n2. **Signing**: Go to the project settings, select the **Homelab** target, and under **Signing \u0026 Capabilities**, select your development team.\n3. **Run**: Connect your iPhone or select a simulator and press `Cmd + R` to build and run.\n\n### 🤖 Build for Android\n1. **Open Android Studio**: Import the `HomelabAndroid` folder.\n2. **Setup**: Let Gradle sync and download all dependencies.\n3. **Run**: Connect your Android device or start an emulator and press `Shift + F10`.\n\n---\n\n## ✨ Integrated Services\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/portainer.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Portainer** — Monitor your Docker environments in real-time. Peek into container statuses, CPU/Memory usage, and perform quick actions like Start, Stop, or Restart directly from your mobile device.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/pi-hole.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Pi-hole** — Keep your network clean. View real-time query statistics, see your total blocked domains, and toggle ad-blocking on the fly with customizable timers.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/beszel.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Beszel** — A lightweight, efficient system monitor. Track global CPU, Memory, and Disk usage across all your connected nodes with beautiful percentage-based visualizations.\n\n### 🎬 Servarr Stack\n\nThe full media automation suite, unified in a single dashboard view. Monitor your entire *arr stack at a glance — downloads, health, upcoming releases, and torrent activity — alongside Gluetun VPN tunnel status.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/sonarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Sonarr** — Track your TV show library. Monitor active downloads, upcoming episodes, series health, and queue status in real time.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/radarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Radarr** — Keep tabs on your movie collection. View download queue, upcoming releases, health issues, and missing movies at a glance.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/lidarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Lidarr** — Monitor your music library. Track artist downloads, health status, and upcoming album releases.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/prowlarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Prowlarr** — Central indexer manager for the entire Servarr stack. View configured indexers, connected apps, and any reported issues.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/qbittorrent.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **qBittorrent** — Monitor your torrent client. View active downloads, upload/download speeds, DHT node count, and firewall/NAT status (including Gluetun tunnel detection).\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/bazarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Bazarr** — Subtitle manager for Sonarr and Radarr. Track missing subtitles, monitor download status, and view subtitle health across your media library.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/flaresolverr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **FlareSolverr** — Proxy server to bypass Cloudflare and DDoS-GUARD protection for Prowlarr indexers. Monitor service status and version directly from the dashboard.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📋 View all 23 services...\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Gitea / Forgejo** — Manage your code natively. Browse repositories, view contribution heatmaps, read code files with full syntax highlighting, and keep track of your latest commits. [Forgejo](https://forgejo.org/) (a community fork of Gitea) is fully supported — just use the Gitea integration with your Forgejo instance URL.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/tailscale.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Tailscale** — Integrated Tailscale support helps you securely reach your homelab from anywhere, with quick launch actions and connection status surfaced directly inside the app experience.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/nginx-proxy-manager.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Nginx Proxy Manager / NPMplus** — Manage your reverse proxy directly from your phone. Fully compatible with both [Nginx Proxy Manager](https://nginxproxymanager.com/) and the [NPMplus](https://github.com/ZoeyVid/NPMplus) fork (with CrowdSec support). Browse proxy hosts, redirection hosts, dead hosts, streams, access lists, and SSL certificates.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/adguard-home.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **AdGuard DNS** — Monitor and manage your AdGuard Home DNS server. View real-time query statistics, check filtering status, and control DNS protection directly from your phone.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/healthchecks.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Healthcheck** — Monitor the uptime and health of your services. View check statuses, response times, and get notified when services go down — all from a clean native interface.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/patchman.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Patchmon** — Track software updates and patches across your infrastructure. Monitor version status, pending updates, and keep your homelab systems up to date from one place.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/jellystat.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Jellystat** — Monitor your Jellyfin media server usage. Track active streams, playback statistics, and library activity from a clean native interface.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/plex.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Plex** — Monitor your Plex Media Server. View libraries, recently added media, active sessions, and server status from a native mobile interface.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/technitium.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Technitium DNS** — Monitor your Technitium DNS Server. View query statistics, top blocked/allowed domains, and server health from a clean native interface.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/pangolin.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Pangolin / Newt** — Monitor your Pangolin VPN tunnel. View tunnel status, connected peers, and network health directly from your phone.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/dockhand.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Dockhand** — Manage your containers with Dockhand. View running containers, resource usage, and perform quick actions from a native interface.\n\n🐧 **Linux Update** — Track pending system updates across your Linux hosts. Monitor available packages and keep your infrastructure patched from one unified view.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/bazarr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Bazarr** — Subtitle manager for Sonarr and Radarr. Track missing subtitles, monitor download status, and view subtitle health across your media library.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/flaresolverr.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **FlareSolverr** — Proxy server to bypass Cloudflare and DDoS-GUARD protection for Prowlarr indexers. Monitor service status and version directly from the dashboard.\n\n\u003cimg src=\"https://cdn.jsdelivr.net/gh/selfhst/icons/png/linkding.png\" width=\"20\" style=\"vertical-align:middle\"\u003e **Bookmarks** — Keep all your most-used homelab links in one place with a native bookmarks feature that supports organization, quick access, and a cleaner daily workflow.\n\n\u003c/details\u003e\n\n---\n\n## 📜 Usage \u0026 License\n- ✅ **Authorized**: Personal use, modifications for personal homelab environments, and code contributions/improvements.\n- ❌ **NOT Authorized**: Use of this code in paid applications, apps with subscriptions, or any form of commercial redistribution.\n\nThe code is free to explore and improve for the community. Build something great for your home!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJohnnWi%2Fhomelab-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJohnnWi%2Fhomelab-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJohnnWi%2Fhomelab-project/lists"}