Skip to content

fix(public): serve rel=icon favicon on every page so browsers stop 404ing /favicon.ico - #85

Merged
nish3451 merged 19 commits into
mainfrom
fix/rel-icon-favicon-lane1
Aug 11, 2026
Merged

fix(public): serve rel=icon favicon on every page so browsers stop 404ing /favicon.ico#85
nish3451 merged 19 commits into
mainfrom
fix/rel-icon-favicon-lane1

Conversation

@nish3451

@nish3451 nish3451 commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

What

Every page load fires a 404 /favicon.ico request because none of the five human-facing pages declare a rel=icon link. Browsers fall back to requesting the default favicon path, which doesn't exist.

Adds <link rel="icon" href="/favicon.svg" type="image/svg+xml" /> to the head of index.html, pricing.html, audit.html, agents.html, and specimen.html — the same declaration already used on the retired agent-desk.html page. public/favicon.svg already exists and is served from the same directory as the other assets.

Why

  • Unreviewed-by-grok finding: no rel=icon link served, so every page load 404s /favicon.ico.
  • One line per page; the declared icon replaces the wasted 404 round-trip.

Validation

  • node scripts/check-site.mjsTinyStudio.io checks passed.
  • Each page has exactly one rel="icon" href="/favicon.svg" type="image/svg+xml" link; favicon.svg is a tracked, valid SVG.

Note: a stale duplicate branch fix/serve-rel-icon-favicon carried the same fix but was never merged; this PR re-lands it cleanly off current main.

Summary by CodeRabbit

  • Style
    • Added a consistent SVG favicon across the main site pages, improving browser tab and bookmark branding.

…4ing /favicon.ico

All five human-facing pages link the apple-touch-icon but no rel=icon, so
browsers fall back to a /favicon.ico request that 404s on every page load.
Add the existing public/favicon.svg as the declared favicon, matching the
link already used on the retired agent-desk page.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4df77625-9f92-4eb2-8851-f4936db8105d

📥 Commits

Reviewing files that changed from the base of the PR and between 169cb73 and 1df9e1d.

📒 Files selected for processing (3)
  • public/audit.html
  • public/index.html
  • public/pricing.html
🚧 Files skipped from review as they are similar to previous changes (3)
  • public/audit.html
  • public/pricing.html
  • public/index.html

📝 Walkthrough

Walkthrough

Five public HTML pages now include a shared SVG favicon reference in their head metadata.

Changes

Favicon metadata

Layer / File(s) Summary
Add shared favicon links
public/agents.html, public/audit.html, public/index.html, public/pricing.html, public/specimen.html
Each page references /favicon.svg as an SVG favicon.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes adding favicon declarations to public pages to prevent browsers from requesting /favicon.ico.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/rel-icon-favicon-lane1

Comment @coderabbitai help to get the list of available commands.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@nish3451
nish3451 merged commit 9302611 into main Aug 11, 2026
3 checks passed
nish3451 added a commit that referenced this pull request Aug 11, 2026
…ks in check-site.mjs (#113)

PR #85 added the rel=icon favicon link to the five public pages but scoped
out the brief-requested page and the check-site.mjs guard the original
branch carried. /brief-requested is the post-signup page every buyer hits,
so it kept falling back to /favicon.ico (404) on every load. Re-land both:
add the link to brief-requested.html and enforce exactly one /favicon.svg
rel=icon link on all seven served pages, with the asset tracked, valid SVG,
and allow-listed in the worker.
nish3451 added a commit that referenced this pull request Aug 13, 2026
…in and live (#132)

The review-queue item 'No rel=icon link is served, so every page load fires
a 404 /favicon.ico request while favicon.svg exists and is allow-listed'
is already fixed in origin/main: PR #85 added the /favicon.svg rel=icon
link to the five public pages, and PR #113 re-landed it on /brief-requested
plus the check-site.mjs guard enforcing exactly one rel=icon per served
page with the asset tracked, valid SVG, and worker allow-listed. This lane
re-verified the guarantee still holds on the current head (18128e8):

- npm run check passes: the favicon guard checks all seven served pages.
- npm test passes: 92 tests total, all suites green.
- Fresh live measurement in real Chromium (2026-08-12): all six live pages
  load 200 with exactly one <link rel=icon href=/favicon.svg> and zero
  /favicon.ico requests fired on any load; /favicon.svg serves 200
  image/svg+xml. (The /favicon.ico 404 itself is unreachable now: no page
  references it. An unrelated pre-existing CSP-blocked Google Ads
  placeholder on /brief-requested is noted in the receipt.)

Nothing further to change; the receipt records the closeout on the current
head so the item cannot be re-opened by tracker drift.
nish3451 added a commit that referenced this pull request Aug 14, 2026
…duals (#196)

* docs(evidence): close the two post-#105 duplicate fix-PR cluster residuals

Both residual clusters from the #105 reconciliation are in terminal state:
cluster 1 (brief-requested clean links) merged via survivor #145 (f9214c1),
cluster 2 (favicon) delivered via #85 and #113. Verified on this run that
no open PR carries either fix, main carries both, checks/tests are green on
a fresh main tree, and live /brief-requested serves no .html hrefs.
Records the authoritative closeout of item f3c90474c1.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* docs(lane-report): note PR #196 delivery in closeout report

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

---------

Co-authored-by: nish3451 <nish3451@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
nish3451 added a commit that referenced this pull request Aug 21, 2026
… current main and live (2026-08-20, lane 1) (#250)

Item 017eb201fc ("[unreviewed-by-opus] No rel=icon link is served, so
every page load fires a 404 /favicon.ico request while favicon.svg exists
and is allow-listed") is closed against current main and live. The code
fixes are already merged: #85/#113 added rel=icon links to all seven
served pages plus the CI guard, and #238 added the /favicon.ico legacy
fallback serving the canonical SVG bytes. This receipt re-verifies the
guarantee on head d0daea9 and the live site: npm run check and npm test
pass, all seven pages serve exactly one /favicon.svg rel=icon link with
zero /favicon.ico requests in real Chromium, and the /favicon.ico path
itself now returns 200 image/x-icon with byte-identical canonical bytes.

Co-authored-by: minimax-vps <minimax-vps@fleet.local>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant