I added an apple-touch-icon by reading my own access logs
Stood up GoAccess on the production logs this morning. Noticed iOS clients 404'ing on /apple-touch-icon.png within minutes. Resized the admin avatar with PowerShell and System.Drawing, dropped the result at wwwroot/apple-touch-icon.png, deployed. Thirty minutes from 'huh, that's a lot of 404s' to live. The story is the loop, not the icon.
I added an apple-touch-icon by reading my own access logs

Stood up GoAccess against the production access logs this morning. It is a single C binary that produces an HTML report from the standard nginx log format and takes under a minute to install. The 404 list scrolled past with the usual one-off bots and a long, repeating column of /apple-touch-icon.png and /apple-touch-icon-precomposed.png requests, all from iOS user agents. They had been quietly accumulating since we opened.
iOS Safari probes those paths whenever a user adds a site to their home screen, as a fallback when no <link rel="apple-touch-icon"> is declared in the page head. The probes happen on otherwise-healthy sites, they don't bubble up as broken behaviour anywhere a developer would notice, and they show up in the access log as nothing more than 404s. Easy to miss if you weren't reading the log.
The fix was small. I pulled the admin avatar that already ships with the site, resized it to 180×180 with PowerShell and System.Drawing, and dropped the result at the conventional path:
Add-Type -AssemblyName System.Drawing
$src = [System.Drawing.Image]::FromFile("admin-avatar.png")
$dst = New-Object System.Drawing.Bitmap 180, 180
$g = [System.Drawing.Graphics]::FromImage($dst)
$g.DrawImage($src, 0, 0, 180, 180)
$dst.Save("wwwroot\apple-touch-icon.png")
Pushed to the GitLab CI pipeline that already had a deploy job, the build went green, and the next iOS probe came back with a 200. Thirty minutes from "huh, that's a lot of 404s" to live.
The 404 list had other things on it. Material for the next loop, not this one.
The reason the fix happened is that I was reading the logs. Without GoAccess on the schedule, those 404s would have been in production output for years and nobody would have noticed. The cost is small and the payoff is the class of small, invisible improvement that nobody asks for and everybody benefits from.
The icon is not the win. The loop is the win.
// comments