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 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.
* feat: wip - responsive version
* chore(config): update eslint config
* fix: align drop zone footer
* fix: add prop for immutable colors
* fix: container width issue on tablet
* chore: change class name convention
* chore: add missing error styles on mobile
* style(viewport): add 100vh fix for safari
* style: update bottom info padding on mobile
* perf: remove getInitialProps function and dependencies
* chore(deps): update sharp to v0.25.0
* chore: delete unused hook
* docs: add @miguellteixeira as a contributor
* test(cypress): update page load wait
* feat(responsive): update code modal for mobile
* feat(responsive): update background images and light/dark toggle color
* feat(responsive): add about us modal on mobile
* feat(responsive): update sharable image
Co-authored-by: Miguel Teixeira <teixeira.silva.miguel@gmail.com>
* feat(about-us): add about us modal
* fix(dark-mode): fix dark mode white flash
* improvement(seo): improved seo meta tags
* improvement(copy-code): add code copied label
* improvement(dark-mode): improve dark mode white flash
* feat(drag-and-drop): add drag and drop wizard
* chore(seo): update seo share image url
* improvement(upload): add download step 3
* improvement(loading): improve loading and add transitions
* improvement: add pwa support, clipboard and animations
* improvement(seo): add html lang and update title
* fix(button): fix button font family
* feat(layout): add base page layout
Add base layout component with dark mode support
fix#15
* feat(storybook): add dark mode support to all components