Resized from a 512x512 source to 112x112, the size the other two use and
twice the 56px it renders at.
The circle is baked into the file, not applied by CSS — the component sets
no border-radius at all, and the existing avatars are pre-masked with fully
transparent corners. A plain square resize rendered as a square next to two
circles, so the mask is composited in with dest-in.
PNG with palette quantisation: 8.3 KB against 28.6 KB for straight RGBA,
with no difference visible at 3x magnification on either the face or the
masked edge. That also puts it under the 13.1 KB the other two weigh.
favycon.app has no DNS records at all, so favycon.vercel.app is the only
hostname this site answers on and the canonical is unambiguous. It uses the
SITE_URL constant, so it cannot disagree with og:url.
The sitemap is a single static URL. Its loc is written without a trailing
slash to match the canonical string exactly — the two forms are the same
URL per RFC 3986, but nothing here forces them to differ, so they don't.
No lastmod: a hand-maintained file would claim a freshness it can't know.
robots.txt gains the Sitemap line and a note that /api/favycon is POST-only
and answers a GET with 405. It stays out of the disallow list deliberately:
a 405 tells a crawler more than a rule it has to fetch robots.txt to find.
The package author email was a Gmail address. The site already contacts
through hello@ruisaraiva.dev, an alias forwarded to that inbox, and the
point of the alias is that a published field can be rotated without
touching the real mailbox — so the package field uses it too.
The credits still described Rui as a Full-Stack Developer, which was true
when the tool was built in 2020. Augusto's and Miguel's roles are left as
they are.
The about modal is lazily mounted, so the credits and contact address are
not in the server-rendered HTML and no crawler ever sees them. Authorship
therefore goes in the head, where it is always present: a meta author, a
rel=author link to ruisaraiva.dev, and SoftwareApplication JSON-LD.
The structured data names Rui as author and Augusto and Miguel as
contributors, because the modal credits three people and the markup should
not tell a machine a tidier story than the page tells a reader.
Also adds public/llms.txt: accepted input formats, the 310px and 512px
minimums, and exactly what the zip contains, including that favicon.svg
only appears for SVG input and manifest.json only with the PWA option. It
is written from utils/favicon.ts and the route handler rather than from
memory. Note it is a static file, so it is the one thing here that can
drift from the sizes it documents.
Two hardcoded favycon.vercel.app strings become the SITE_URL constant the
rest of the file now uses.
Two changes to the about modal, in the same file:
Rui's credit pointed at a Twitter handle and now points at ruisaraiva.dev,
with a globe icon. Augusto keeps Twitter and Miguel keeps GitHub, so the
link type is now one of three rather than a binary — hence a small lookup
instead of a second ternary in the JSX. The icon is drawn from circle,
line and ellipse primitives rather than path data, so the geometry is
exact.
Because the globe is stroked where the GitHub mark is filled, the
dark-mode rule for it has to set stroke rather than fill. Both were
checked in both themes.
The subtitle said "follow these guys on Twitter", which only one of the
three links now is, so it drops the platform.
The contact address moves from hello@favycon.app, which is no longer in
use, to hello@ruisaraiva.dev.