Skip to content

Commit 82f67d1

Browse files
committed
fix: v1.4.4 — MetaLens mobile overflow, CSP images, footer logo centering
- MetaLens: contained long unbreakable text and grid-item sizing that forced horizontal page scroll on mobile - CSP: img-src widened to https: so social-preview images can load, consistent with the existing http(s)-only gate - service worker: scoped to same-origin fetches, no longer blocks cross-origin resources via connect-src - footer logo: recentered the R symbol, previously ~32px off-axis from the wordmark - copy: "Fullstack" capitalization unified to lowercase site-wide
1 parent a2b4fc5 commit 82f67d1

15 files changed

Lines changed: 48 additions & 15 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,35 @@ InfraLens's history as a standalone product (2026-01-06 to 2026-08-10) is
99
frozen in [`docs/infralens/CHANGELOG.md`](docs/infralens/CHANGELOG.md).
1010
InfraLens changes since its native migration are recorded here.
1111

12+
## [1.4.4] — 2026-08-16
13+
14+
### Fixed
15+
16+
- **MetaLens mobile overflow** — long, unbreakable text (a raw malformed
17+
canonical URL surfaced in a finding, plus default grid-item sizing on the
18+
Search and Social preview cards) could force the whole page to scroll
19+
horizontally on mobile instead of staying contained within the result
20+
cards.
21+
- **Social preview images blocked by CSP** — `img-src` only allowed
22+
`'self'` and `data:`, so no analyzed page's Open Graph image could ever
23+
load; widened to `https:`, consistent with the http(s)-only gate already
24+
enforced before an image URL is rendered.
25+
- **Service worker blocked cross-origin fetches** — `public/sw.js`
26+
intercepted every GET request regardless of origin and re-issued it via
27+
`fetch()`, which is subject to `connect-src 'self'`; now scoped to
28+
same-origin requests only, so cross-origin resources bypass the service
29+
worker and follow normal browser/CSP rules.
30+
- **Footer logo** — the R symbol's bounding-box center sat measurably
31+
(~32px on the 1000px source) right of the "RANDY CODE" wordmark's, an
32+
artifact of the letter's diagonal leg; recentered so both align on the
33+
same axis.
34+
35+
### Changed
36+
37+
- **"Fullstack" capitalization unified to lowercase** across metadata,
38+
Open Graph images and structured data, matching the About page and
39+
footer.
40+
1241
## [1.4.3] — 2026-08-16
1342

1443
### Fixed

‎app/about/page.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ const domains = [
104104
"Le développement web est venu compléter ce parcours de façon naturelle. Construire des outils utiles, comprendre les besoins réels, livrer quelque chose de fiable — c'est exactement ce que j'ai cherché à faire dans chaque poste avant ça.",
105105
points: [
106106
"Formation autodidacte structurée depuis 2025",
107-
"Applications full-stack TypeScript / Next.js",
107+
"Applications fullstack TypeScript / Next.js",
108108
"Projets SaaS de A à Z en autonomie complète",
109109
"Veille technique et amélioration continue",
110110
],

‎app/layout.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ export const metadata: Metadata = {
3636
statusBarStyle: "black-translucent",
3737
title: "Randy Code",
3838
},
39-
title: "Randy Rimbault — Développeur Fullstack TypeScript",
39+
title: "Randy Rimbault — Développeur fullstack TypeScript",
4040
description:
4141
"Développeur fullstack TypeScript. Sites vitrines, applications SaaS, apps mobiles, SEO local — des produits pensés pour être utiles et durables.",
4242
openGraph: {
43-
title: "Randy Rimbault — Développeur Fullstack TypeScript",
43+
title: "Randy Rimbault — Développeur fullstack TypeScript",
4444
description:
4545
"Développeur fullstack TypeScript. Sites vitrines, applications SaaS, apps mobiles, SEO local — des produits pensés pour être utiles et durables.",
4646
url: "/",
@@ -50,7 +50,7 @@ export const metadata: Metadata = {
5050
},
5151
twitter: {
5252
card: "summary_large_image",
53-
title: "Randy Rimbault — Développeur Fullstack TypeScript",
53+
title: "Randy Rimbault — Développeur fullstack TypeScript",
5454
description:
5555
"Développeur fullstack TypeScript. Sites vitrines, applications SaaS, apps mobiles, SEO local.",
5656
},

‎app/manifest.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { MetadataRoute } from "next";
22

33
export default function manifest(): MetadataRoute.Manifest {
44
return {
5-
name: "Randy Code — Développeur Fullstack TypeScript",
5+
name: "Randy Code — Développeur fullstack TypeScript",
66
short_name: "Randy Code",
77
description:
88
"Portfolio interactif de Randy Rimbault, développeur fullstack TypeScript.",

‎app/opengraph-image.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ImageResponse } from "next/og";
22
import { readFile } from "node:fs/promises";
33
import { join } from "node:path";
44

5-
export const alt = "Randy Code — Développeur Fullstack TypeScript";
5+
export const alt = "Randy Code — Développeur fullstack TypeScript";
66
export const size = { width: 1200, height: 630 };
77
export const contentType = "image/png";
88

@@ -142,7 +142,7 @@ export default async function Image() {
142142
marginBottom: 16,
143143
}}
144144
>
145-
Développeur Fullstack TypeScript
145+
Développeur fullstack TypeScript
146146
</div>
147147

148148
{/* Tagline */}

‎app/tools/metalens/opengraph-image.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const preview = (
6565
marginTop: 4,
6666
}}
6767
>
68-
Randy Rimbault — Développeur Fullstack TypeScript
68+
Randy Rimbault — Développeur fullstack TypeScript
6969
</span>
7070
<span
7171
style={{

‎app/tools/metalens/page.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const viewport: Viewport = {
4343
export default function MetaLensPage() {
4444
return (
4545
<ToolPageShell>
46-
<main className="flex min-h-screen flex-col bg-background px-6 pb-16 text-foreground">
46+
<main className="flex min-h-screen flex-col overflow-x-hidden bg-background px-6 pb-16 text-foreground">
4747
<div className="mx-auto w-full max-w-5xl">
4848
<ToolHeader
4949
icon={ScanSearch}

‎next.config.mjs‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ const nextConfig = {
7979
// would drop CDN caching/SSG sitewide) or the experimental SRI
8080
// feature, which doesn't cover React/Next's own inline
8181
// hydration scripts. Not worth the tradeoff here.
82-
value: `default-src 'self'; ${scriptSrc}; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'`,
82+
// img-src allows https: on top of 'self' — MetaLens renders
83+
// social-preview images from arbitrary analyzed pages, already
84+
// gated to http(s) by isSafeExternalUrl() before reaching <img>.
85+
value: `default-src 'self'; ${scriptSrc}; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'`,
8386
},
8487
],
8588
},

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "randy-code",
3-
"version": "1.4.3",
3+
"version": "1.4.4",
44
"private": true,
55
"packageManager": "pnpm@10.7.0",
66
"scripts": {

‎public/brand/logo-vertical.png‎

-67.6 KB
Loading

0 commit comments

Comments
 (0)