{"author":"Gyuwon Seol (seolcu)","author_url":"https://github.com/seolcu","description":"Verified fixes and setup notes for Linux, self-hosting and home-lab operations, plus an index of seolcu's open-source projects. Every page states its status, the environment it was verified on, and when.","generated":"2026-11-09","items":[{"applies_to":{"docker":"Docker Engine with containerd image store, Compose v2","os":"Ubuntu 24.04 LTS"},"author":"Gyuwon Seol (seolcu)","id":"docker-compose-pull-dangling-images-fill-disk","keywords":["no space left on device","/var/lib/containerd","dangling images","docker image prune until","docker compose pull disk full"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/docker-compose-pull-dangling-images-fill-disk/index.md","published":"2026-11-09","status":"working","summary":"Each `docker compose pull` + `up -d` leaves the previous image untagged (dangling). Nothing removes it, so weekly auto-updates grow `/var/lib/containerd` without bound. Run `docker image prune --force --filter until=336h` after the post-update health check passes.","support_url":"https://github.com/sponsors/seolcu","title":"Automatic `docker compose pull` updates slowly fill the disk with dangling images","type":"note","url":"https://blog.seolcu.com/notes/docker-compose-pull-dangling-images-fill-disk/","verified_at":"2026-11-09","verified_how":"Root cause of a full 232 GB root filesystem on an Ubuntu 24.04 home server on 2026-08-09; fix running in weekly update jobs since."},{"applies_to":{"hardware":"USB Ethernet adapters, e.g. Realtek RTL8153 (0bda:8153)","kernel":"any (usbcore module parameter); verified on 6.8.0-149-generic","os":"Linux with GRUB (Debian/Ubuntu: update-grub; Fedora/RHEL: grubby); verified on Ubuntu 24.04 LTS"},"author":"Gyuwon Seol (seolcu)","id":"linux-disable-usb-autosuspend","keywords":["usbcore.autosuspend=-1","usb ethernet adapter stops working after reboot","RTL8153 0bda:8153 autosuspend","/sys/module/usbcore/parameters/autosuspend","power/control auto"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/linux-disable-usb-autosuspend/index.md","published":"2025-10-11","status":"working","summary":"Add the kernel parameter `usbcore.autosuspend=-1` and regenerate the bootloader config (`update-grub` on Debian/Ubuntu, `grubby` on Fedora). Verify with `cat /sys/module/usbcore/parameters/autosuspend` → `-1`, and check that the adapter's `power/runtime_status` reads `active`.","support_url":"https://github.com/sponsors/seolcu","title":"Disable USB autosuspend on Linux (USB Ethernet adapter drops after boot)","type":"note","url":"https://blog.seolcu.com/notes/linux-disable-usb-autosuspend/","verified_at":"2026-11-09","verified_how":"Checked on a laptop home server whose only wired link is a Realtek RTL8153 USB adapter (`0bda:8153`, default route). Ubuntu 24.04, kernel 6.8.0-149-generic. Read back `/proc/cmdline`, the usbcore parameter and the adapter's sysfs power state after a reboot (all as below). The setting has been in use since 2025-10."},{"applies_to":{"os":"Linux (any; /proc/\u003cpid\u003e/cmdline is world-readable unless hidepid is set)","tool":"curl 8.x"},"author":"Gyuwon Seol (seolcu)","id":"secret-urls-on-command-line-are-visible-in-proc","keywords":["/proc/pid/cmdline secret","curl --config -","pre-authenticated request leak","ps aux token visible"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/secret-urls-on-command-line-are-visible-in-proc/index.md","published":"2026-11-09","status":"working","summary":"A pre-authenticated upload URL passed as a `curl` argument was visible to every local user for the whole multi-minute upload. Feed secrets to curl on stdin with `--config -` (or from a 0600 file) instead of argv.","support_url":"https://github.com/sponsors/seolcu","title":"Don't pass credential-bearing URLs on the command line: they are readable in `ps` and `/proc/\u003cpid\u003e/cmdline`","type":"note","url":"https://blog.seolcu.com/notes/secret-urls-on-command-line-are-visible-in-proc/","verified_at":"2026-08-05","verified_how":"Found during a review of a backup uploader on Ubuntu 24.04 (OCI pre-authenticated request URL); fixed and the URL revoked the same minute."},{"applies_to":{"edge vm":"Ubuntu 24.04 LTS (Oracle Cloud Always Free, arm64)","home server":"Ubuntu 24.04 LTS, x86_64, behind CGNAT","tools":"Tailscale, Caddy 2, HAProxy 2.8"},"author":"Gyuwon Seol (seolcu)","id":"expose-home-server-behind-cgnat-with-tailscale-and-a-vps","keywords":["CGNAT port forwarding alternative","tailscale reverse proxy vps","caddy reverse_proxy tailscale magicdns","haproxy mode tcp minecraft","self-host without port forwarding"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/expose-home-server-behind-cgnat-with-tailscale-and-a-vps/index.md","published":"2026-11-09","status":"working","summary":"Without opening anything at home: put the home server and a public VPS on one tailnet, terminate HTTPS on the VPS with Caddy `reverse_proxy` to the server's MagicDNS name, and forward raw TCP (game ports) with HAProxy in `mode tcp`. Do public-side rate limiting on the VPS, because the backend only sees the VPS's tailnet IP.","support_url":"https://github.com/sponsors/seolcu","title":"Expose a home server behind CGNAT through a VPS over Tailscale (Caddy for HTTPS, HAProxy for TCP)","type":"note","url":"https://blog.seolcu.com/notes/expose-home-server-behind-cgnat-with-tailscale-and-a-vps/","verified_at":"2026-11-09","verified_how":"In production since 2026: Oracle Cloud Always Free arm64 VM as edge, x86_64 home server on a CGNAT ISP line, serving HTTPS sites and a Minecraft server."},{"applies_to":{"arch":"linux_arm64 release tarball (use linux_amd64 on x86_64)","frp":"0.65.0 (TOML config)"},"author":"Gyuwon Seol (seolcu)","id":"frp-expose-local-server","keywords":["frps.toml","frpc.toml","frp systemd service","CGNAT port forwarding alternative"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/frp-expose-local-server/index.md","published":"2025-10-11","status":"archived","summary":"Run `frps` on a public VPS (`bindPort = 7000`, `auth.token`) and `frpc` on any machine at home with one `[[proxies]]` block per service (`type = \"tcp\"`, `localIP`, `localPort`, `remotePort`). Both run as systemd services.","superseded_by":"https://blog.seolcu.com/notes/expose-home-server-behind-cgnat-with-tailscale-and-a-vps/","support_url":"https://github.com/sponsors/seolcu","title":"Expose local TCP services without port forwarding using frp (frps on a VPS, frpc at home)","type":"note","url":"https://blog.seolcu.com/notes/frp-expose-local-server/","verified_at":"2025-10-11","verified_how":"frp 0.65.0 on an arm64 VPS (frps) and an arm64 Raspberry Pi (frpc) forwarding game servers. The author later moved to a Tailscale + Caddy/HAProxy setup and no longer runs frp."},{"applies_to":{"device":"GameSir Cyclone 2 (USB 3537:100b and related IDs)","needs":"curl, 7z, unzip, node, npm, openssl, python3; a udev rule (70-gamesir.rules)"},"author":"Gyuwon Seol (seolcu)","id":"gamesir-connect-linux","keywords":["GameSir Connect Linux","GameSir Cyclone 2 Linux firmware update","3537:100b","JieLi firmware upgrade Linux"],"last_changed":"2026-11-09","license":"MIT","markdown_url":"https://blog.seolcu.com/projects/gamesir-connect-linux/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/gamesir-connect-linux","status":"experimental","summary":"Repackages GameSir's official Windows-only GameSir Connect Electron app to run unmodified on Linux, including controller firmware updates: the vendor's JieLi upgrade DLL runs in a Unicorn x86 emulator with device I/O routed to SG_IO.","support_url":"https://github.com/sponsors/seolcu","title":"gamesir-connect-linux — GameSir Connect (Cyclone 2 app and firmware updates) on Linux","type":"project","url":"https://blog.seolcu.com/projects/gamesir-connect-linux/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"os":"any Linux with systemd and GNU coreutils","shell":"bash 5"},"author":"Gyuwon Seol (seolcu)","id":"backup-freshness-gate-for-automatic-updates","keywords":["update_skipped_gate","backup freshness check before update","latest.tar.gz symlink","OnSuccess=","tar -tzf verify"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/backup-freshness-gate-for-automatic-updates/index.md","published":"2026-11-09","status":"working","summary":"Let an unattended update job run only if a verified local backup and an offsite-upload stamp are both younger than a threshold; otherwise skip with exit 0 and push DOWN to a heartbeat monitor. A broken backup then surfaces as a red monitor instead of an update without a restore point.","support_url":"https://github.com/sponsors/seolcu","title":"Gate automatic updates on backup freshness (bash + systemd pattern)","type":"note","url":"https://blog.seolcu.com/notes/backup-freshness-gate-for-automatic-updates/","verified_at":"2026-11-09","verified_how":"Pattern in production since 2026-07 for Docker Compose and game-server update jobs on Ubuntu 24.04 hosts."},{"applies_to":{"platform":"github.com, personal account with an approved GitHub Sponsors profile","tool":"GitHub CLI (gh) 2.97.0; GraphQL API"},"author":"Gyuwon Seol (seolcu)","id":"github-sponsor-button-needs-has-sponsorships-enabled","keywords":["FUNDING.yml sponsor button not showing","hasSponsorshipsEnabled","updateRepository sponsorships","enable sponsorships all repositories",".github FUNDING.yml default"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/github-sponsor-button-needs-has-sponsorships-enabled/index.md","published":"2026-11-09","status":"working","summary":"A `FUNDING.yml` (per repo or in your account's `.github` repo) is not enough. Each repository also needs its Sponsorships feature turned on, either under Settings → General → Features → Sponsorships or in bulk with the GraphQL `updateRepository(input: {hasSponsorshipsEnabled: true})` mutation. The REST repo object has no such field.","support_url":"https://github.com/sponsors/seolcu","title":"GitHub Sponsor button not showing despite FUNDING.yml: enable `hasSponsorshipsEnabled` per repository","type":"note","url":"https://blog.seolcu.com/notes/github-sponsor-button-needs-has-sponsorships-enabled/","verified_at":"2026-11-09","verified_how":"On a personal account with a newly approved GitHub Sponsors profile: added `FUNDING.yml` to the account's `.github` repo, saw no button on 9 public repos, enabled the flag via GraphQL with gh 2.97.0, and confirmed the button in the repo pages' HTML."},{"applies_to":{"latest release":"v3.35.0 (2026-10-20)","targets":"self-hosted Linux servers, Docker / Docker Compose stacks"},"author":"Gyuwon Seol (seolcu)","homepage":"https://hostveil.seolcu.com/","id":"hostveil","keywords":["self-hosted server hardening tool","docker compose security scan","homelab security audit","ssh hardening rollback"],"last_changed":"2026-11-09","license":"GPL-3.0","markdown_url":"https://blog.seolcu.com/projects/hostveil/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/hostveil","status":"active","summary":"Single Go binary that scans a self-hosted Linux server (SSH, firewall, Docker/Compose, updates, exposed ports, CVEs), gives a 0–100 score, explains each finding in plain language, and applies fixes with preview, backup and one-command rollback. Includes a TUI and a web dashboard.","support_url":"https://github.com/sponsors/seolcu","title":"Hostveil — guided security hardening for self-hosted Linux servers","type":"project","url":"https://blog.seolcu.com/projects/hostveil/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"latest release":"v0.2.0 (2026-11-06)","needs":"x86_64, python3, curl, tar, Korean fonts; GNOME needs the AppIndicator extension for the tray","tested on":"Fedora 44, GNOME (fresh install, login, tray, attachments, emoji, Korean input)"},"author":"Gyuwon Seol (seolcu)","id":"kakaotalk-linux","keywords":["카카오톡 리눅스","KakaoTalk Linux","kakaotalk wine 한글 입력","kakaotalk proton","카카오톡 우분투 설치"],"last_changed":"2026-11-09","license":"MIT (patched Wine modules: LGPL-2.1+)","markdown_url":"https://blog.seolcu.com/projects/kakaotalk-linux/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/kakaotalk-linux","status":"experimental","summary":"Unofficial installer that runs the official Windows KakaoTalk on Linux through umu-launcher + GE-Proton (no Steam needed), with native tray menus, the desktop file picker, an emoji/Korean-IME Wine patch, and a fix for slow logins on public Wi-Fi.","support_url":"https://github.com/sponsors/seolcu","title":"kakaotalk-linux — KakaoTalk on Linux (Proton-based installer)","type":"project","url":"https://blog.seolcu.com/projects/kakaotalk-linux/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"os":"any Linux distribution using systemd-logind; verified on Ubuntu 24.04 LTS","systemd":"drop-in directories supported for years; verified on 255"},"author":"Gyuwon Seol (seolcu)","id":"linux-laptop-ignore-lid-close","keywords":["HandleLidSwitch=ignore","laptop server suspends when lid closed","logind.conf.d"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/linux-laptop-ignore-lid-close/index.md","published":"2025-10-11","status":"working","summary":"Set `HandleLidSwitch=ignore`, `HandleLidSwitchExternalPower=ignore` and `HandleLidSwitchDocked=ignore` in a drop-in under `/etc/systemd/logind.conf.d/`, then reboot. Check the effective config with `systemd-analyze cat-config systemd/logind.conf`.","support_url":"https://github.com/sponsors/seolcu","title":"Keep a Linux laptop running with the lid closed (systemd-logind HandleLidSwitch)","type":"note","url":"https://blog.seolcu.com/notes/linux-laptop-ignore-lid-close/","verified_at":"2026-11-09","verified_how":"Read back the effective logind config on an HP laptop that runs as a headless home server (Ubuntu 24.04, systemd 255.4-1ubuntu8.18) via a drop-in `/etc/systemd/logind.conf.d/99-homelab.conf`. The setting has been in use since 2025-10."},{"applies_to":{"remote":"any host without the xterm-kitty terminfo entry; reproduced on Ubuntu 24.04 LTS","terminal":"kitty with the `kitten` command (ssh kitten auto shell integration since 0.25.0)"},"author":"Gyuwon Seol (seolcu)","id":"kitty-ssh-kitten","keywords":["'xterm-kitty': unknown terminal type.","Error opening terminal: xterm-kitty.","tput: unknown terminal \"xterm-kitty\"","WARNING: terminal is not fully functional","kitten ssh"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/kitty-ssh-kitten/index.md","published":"2025-10-11","status":"working","summary":"Remote hosts don't have kitty's terminfo, so `nano`, `less`, `tput` and line editing fail with `Error opening terminal: xterm-kitty.` and similar. Connect with `kitten ssh` (it copies the terminfo and sets up shell integration), or copy the terminfo once with `infocmp -a xterm-kitty | ssh host tic -x -o ~/.terminfo /dev/stdin`.","support_url":"https://github.com/sponsors/seolcu","title":"kitty terminal over SSH: 'xterm-kitty': unknown terminal type","type":"note","url":"https://blog.seolcu.com/notes/kitty-ssh-kitten/","verified_at":"2026-11-09","verified_how":"Error messages reproduced verbatim with TERM=xterm-kitty on an Ubuntu 24.04 server without kitty terminfo (nano 7.2, less, tput). Fix commands checked against kitty's official ssh-kitten docs and FAQ on 2026-11-09; they were not re-run on that date because the verifying machine had no kitty installed."},{"applies_to":{"build":"gcc, make, binutils","host":"x86_64 Linux with KVM enabled and access to /dev/kvm"},"author":"Gyuwon Seol (seolcu)","id":"mini-kvm","keywords":["minimal KVM hypervisor C","KVM API example","debug triple fault kernel","hobby OS hypervisor"],"last_changed":"2026-11-09","license":"MIT","markdown_url":"https://blog.seolcu.com/projects/mini-kvm/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/mini-kvm","status":"experimental","summary":"About 4,200 lines of C on the Linux KVM ioctl API that boot Multiboot/ELF kernels and a stock Linux kernel to a shell, render VGA text mode, and explain guest failures (faults, descriptor tables, page-table mappings, why it triple-faulted) instead of silently resetting.","support_url":"https://github.com/sponsors/seolcu","title":"Mini-KVM — a small x86 hypervisor on the raw KVM API for kernel developers","type":"project","url":"https://blog.seolcu.com/projects/mini-kvm/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"cli":"oci-cli 3.x","service":"Oracle Cloud Infrastructure Object Storage"},"author":"Gyuwon Seol (seolcu)","id":"oci-object-storage-versioning-hidden-cost","keywords":["oci object storage unexpected cost","noncurrent object versions","oci os object list-object-versions","bulk-delete does not delete versions","always free 10GB exceeded"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/oci-object-storage-versioning-hidden-cost/index.md","published":"2026-11-09","status":"archived","summary":"With bucket versioning on, overwriting the same object name daily keeps every old copy as a noncurrent version. 3.26 GiB of current objects carried 1.78 TiB of versions and cost $29.93–$58.56/month. `oci os object bulk-delete` does not remove versions; delete by `version-id`.","support_url":"https://github.com/sponsors/seolcu","title":"OCI Object Storage: versioning + fixed-key overwrites quietly bill terabytes","type":"note","url":"https://blog.seolcu.com/notes/oci-object-storage-versioning-hidden-cost/","verified_at":"2026-07-02","verified_how":"Billing observed May–July 2026 on an Oracle Cloud tenancy using an Always Free Object Storage bucket for nightly backups; cleanup done 2026-07-02. The bucket was retired on 2026-10-02."},{"applies_to":{"needs":"bubblewrap, openssl, python3","untested":"Lutris, Heroic, Bottles, plain wine (same mechanism)","verified":"Fedora 44, kernel 7.1.8, KDE Plasma Wayland; RX 7700 XT, Mesa 26.1.6; GE-Proton11-5 / Proton Experimental 11.0 (steamrt4); Battle.net as a non-Steam game"},"author":"Gyuwon Seol (seolcu)","id":"overwatch-nexon-linux-fix","keywords":["0xE01300B0","0xC06D007E","Overwatch has encountered a critical error during startup.","설치한 파일에 문제가 있습니다","오버워치 넥슨 리눅스","Overwatch Nexon Proton","Steam Deck Overwatch Korea"],"last_changed":"2026-11-09","license":"MIT","markdown_url":"https://blog.seolcu.com/projects/overwatch-nexon-linux-fix/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/overwatch-nexon-linux-fix","status":"active","summary":"Fixes Overwatch failing to start under Proton/Wine since the 2026-08-12 Nexon transfer (Blizzard error 0xE01300B0, inner exception 0xC06D007E). Wine's crypt32 stops at a self-signed root instead of the cross-signed chain; the wrapper adds the cross-certificate to the prefix and hides that root from the game. Nothing is patched or disabled.","support_url":"https://github.com/sponsors/seolcu","title":"overwatch-nexon-linux-fix — Overwatch (Nexon KR) error 0xE01300B0 on Linux","type":"project","url":"https://blog.seolcu.com/projects/overwatch-nexon-linux-fix/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"languages":"English, Korean","modes":"Role queue 5v5 (default) and open queue 6v6"},"author":"Gyuwon Seol (seolcu)","homepage":"https://pickgak.seolcu.com","id":"pickgak","keywords":["overwatch counter pick tool","오버워치 픽 추천","overwatch hero recommendation","픽각"],"last_changed":"2026-11-09","license":"GPL-3.0","markdown_url":"https://blog.seolcu.com/projects/pickgak/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/pickgak","status":"active","summary":"Web app that recommends which Overwatch hero to pick this match from the map, enemy comp, your team, party and preferred heroes, using official stats for Korea (Nexon), Asia, the Americas and Europe collected daily, with matchup explanations from duel data. Does not touch the game client.","support_url":"https://github.com/sponsors/seolcu","title":"PickGak (픽각) — Overwatch hero pick helper","type":"project","url":"https://blog.seolcu.com/projects/pickgak/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"device":"Samsung Galaxy with One UI Home, Android 10+","latest release":"v0.2.0 (2026-10-22)","permission":"Accessibility service (used only on the One UI home screen, only while organizing)"},"author":"Gyuwon Seol (seolcu)","id":"tidy","keywords":["one ui auto folder apps","galaxy app drawer organize automatically","갤럭시 앱 폴더 자동 정리"],"last_changed":"2026-11-09","license":"MIT","markdown_url":"https://blog.seolcu.com/projects/tidy/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/tidy","status":"experimental","summary":"Android app that organizes the real One UI Home apps screen into folders for you, on-device, with preview and undo. It knows Korean apps (Toss, Baemin, KakaoTalk) and Samsung apps.","support_url":"https://github.com/sponsors/seolcu","title":"Tidy — automatically sort a Samsung Galaxy (One UI) apps screen into folders","type":"project","url":"https://blog.seolcu.com/projects/tidy/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."},{"applies_to":{"init":"systemd","os":"Ubuntu 24.04 LTS, Debian 13","proton-drive cli":"0.8.0 (linux-x64, linux-arm64)"},"author":"Gyuwon Seol (seolcu)","id":"proton-drive-cli-unattended-backups","keywords":["proton-drive auth login","PROTON_DRIVE_CREDENTIALS_STORE=pass","EACCES","Trashed node not found","Wrong key usage","rclone protondrive"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/proton-drive-cli-unattended-backups/index.md","published":"2026-11-09","status":"working","summary":"Run the official `proton-drive` CLI from systemd on headless servers: log hosts in as a separate editor account (Proton has no scoped tokens), store the session in `pass` with a passphrase-less GPG key, set a readable working directory, and purge the owner's trash yourself.","support_url":"https://github.com/sponsors/seolcu","title":"Unattended offsite backups with the official Proton Drive CLI","type":"note","url":"https://blog.seolcu.com/notes/proton-drive-cli-unattended-backups/","verified_at":"2026-11-09","verified_how":"Running in production since 2026-10-02 on four Ubuntu 24.04 / Debian 13 hosts (x86_64 and arm64), daily and weekly uploads of 1 MB–4.4 GB archives."},{"applies_to":{"node.js":"any (setTimeout limit is 2^31-1 ms)","uptime kuma":"2.x (Docker image louislam/uptime-kuma:2)"},"author":"Gyuwon Seol (seolcu)","id":"uptime-kuma-push-monitor-pitfalls","keywords":["TimeoutOverflowWarning","push monitor interval","/api/push/","status=up\u0026msg=OK\u0026ping=","heartbeat always down"],"last_changed":"2026-11-09","markdown_url":"https://blog.seolcu.com/notes/uptime-kuma-push-monitor-pitfalls/index.md","published":"2026-11-09","status":"working","summary":"Uptime Kuma push intervals cannot exceed 2147483 s (~24.8 days, Node.js 32-bit timer). Monitor longer cadences with a weekly re-push of the last result. Also push to the bare `/api/push/\u003ctoken\u003e` URL: pasting the UI's `?status=up\u0026msg=OK\u0026ping=` URL and adding your own `status` makes every heartbeat record as DOWN.","support_url":"https://github.com/sponsors/seolcu","title":"Uptime Kuma push monitors: 24.8-day interval limit and the always-DOWN query string","type":"note","url":"https://blog.seolcu.com/notes/uptime-kuma-push-monitor-pitfalls/","verified_at":"2026-11-09","verified_how":"Observed and fixed on a self-hosted Uptime Kuma 2.x (Docker `louislam/uptime-kuma:2`) with ~30 monitors in production."},{"applies_to":{"latest release":"v0.5.1 (2026-10-28)","platform":"Android 8.0+ (APK, not on Play Store)","stack":"Kotlin / Jetpack Compose app, Go backend, Firebase Cloud Messaging"},"author":"Gyuwon Seol (seolcu)","homepage":"https://wake.seolcu.com","id":"wakelink","keywords":["wake someone up remotely android","alarm through silent mode android","remote alarm app"],"last_changed":"2026-11-09","license":"MIT","markdown_url":"https://blog.seolcu.com/projects/wakelink/index.md","published":"2026-11-09","repo":"https://github.com/seolcu/wakelink","status":"active","summary":"Android app plus self-hosted Go backend: someone you have mutually paired with can trigger a loud alarm on your phone even in silent or vibrate mode (no special permission), with end-to-end encrypted messages, voice and pictures, and delivery confirmation that it actually rang.","support_url":"https://github.com/sponsors/seolcu","title":"WakeLink — let a trusted contact ring a loud alarm on your Android phone","type":"project","url":"https://blog.seolcu.com/projects/wakelink/","verified_at":"2026-11-09","verified_how":"Summary checked against the repository README on 2026-11-09. Tested environments are those the README states."}],"license":"CC BY 4.0 (content), MIT (code snippets)","site":"seolcu notes","support_url":"https://github.com/sponsors/seolcu"}