https://rauno.me

Page structure & technical metrics

Words

52

Action candidates

1

Images

0

HTML

31 KB

Copy

Title chars
14
Meta chars
0none
H1
1
H2
0

Action

Primary

Email

Forms
0
On-site links
8
Off-site links
4

Security & metadata

HTTPS
yes
HSTS
yes
CSP
no
nosniff
no
viewport
yes
Icon
yes
JSON-LD
yes
Analytics
no

Page

Next.js / Tailwind

Scripts
17 ext / 3 inline
Lang
en
Third-party hosts
no

Lighthouse

Simulated mobile · Performance

78 / 100

2026-09-05 · Lab data, not field data.

View details

Simulated mobile · Lab data, not field data
2026-09-05T04:06:47.341Z · Lighthouse 13.4.1

Performance78/ 100
Accessibility87/ 100
Best practices100/ 100
SEO92/ 100
LCP · Largest content6,019 ms
CLS · Layout shift0.000
TBT · Blocking time31 ms
FCP · First content940 ms
SI · Speed index2,127 ms

Results vary by server, network and environment, independently of taste/conversion scores. Diagnostics retain Lighthouse wording.

Background and foreground colors do not have a sufficient contrast ratio.

Low-contrast text is difficult or impossible for many users to read. Learn how to provide sufficient color contrast.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-0-DIV",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,1,A,0,DIV",
        "type": "node",
        "snippet": "<div class=\"index_label__cgZWW\" style=\"top: -88.3495px; transform: scale(3.15534);\">",
        "selector": "div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1 > div.index_label__cgZWW",
        "nodeLabel": "Devouring Details",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #6f6f6f, background color: #ededed, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1",
        "boundingRect": {
          "top": 269,
          "left": 409,
          "right": 516,
          "width": 107,
          "bottom": 285,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-HTML",
              "path": "1,HTML",
              "type": "node",
              "snippet": "<html lang=\"en\" class=\"light\" style=\"color-scheme: light;\">",
              "selector": "html.light",
              "nodeLabel": "html.light",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 1,
                "height": 1
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "1-2-DIV",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,2,A,0,DIV",
        "type": "node",
        "snippet": "<div class=\"index_label__cgZWW\" style=\"top: -88.3495px; transform: scale(3.15534);\">",
        "selector": "div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1 > div.index_label__cgZWW",
        "nodeLabel": "Craft",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #6f6f6f, background color: #ededed, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1",
        "boundingRect": {
          "top": 269,
          "left": 802,
          "right": 832,
          "width": 30,
          "bottom": 285,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-HTML",
              "path": "1,HTML",
              "type": "node",
              "snippet": "<html lang=\"en\" class=\"light\" style=\"color-scheme: light;\">",
              "selector": "html.light",
              "nodeLabel": "html.light",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 1,
                "height": 1
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "1-3-DIV",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,3,A,0,DIV",
        "type": "node",
        "snippet": "<div class=\"index_label__cgZWW\" style=\"top: -88.3495px; transform: scale(3.15534);\">",
        "selector": "div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1 > div.index_label__cgZWW",
        "nodeLabel": "History of Software Design",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #6f6f6f, background color: #ededed, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1",
        "boundingRect": {
          "top": 269,
          "left": 1195,
          "right": 1356,
          "width": 162,
          "bottom": 285,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-HTML",
              "path": "1,HTML",
              "type": "node",
              "snippet": "<html lang=\"en\" class=\"light\" style=\"color-scheme: light;\">",
              "selector": "html.light",
              "nodeLabel": "html.light",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 1,
                "height": 1
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "1-4-DIV",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,4,A,0,DIV",
        "type": "node",
        "snippet": "<div class=\"index_label__cgZWW\" style=\"top: -88.3495px; transform: scale(3.15534);\">",
        "selector": "div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1 > div.index_label__cgZWW",
        "nodeLabel": "Projects",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #6f6f6f, background color: #ededed, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1",
        "boundingRect": {
          "top": 269,
          "left": 1588,
          "right": 1638,
          "width": 50,
          "bottom": 285,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-HTML",
              "path": "1,HTML",
              "type": "node",
              "snippet": "<html lang=\"en\" class=\"light\" style=\"color-scheme: light;\">",
              "selector": "html.light",
              "nodeLabel": "html.light",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 1,
                "height": 1
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "1-5-DIV",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,5,A,0,DIV",
        "type": "node",
        "snippet": "<div class=\"index_label__cgZWW\" style=\"top: -88.3495px; transform: scale(3.15534);\">",
        "selector": "div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1 > div.index_label__cgZWW",
        "nodeLabel": "Field Notes",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #6f6f6f, background color: #ededed, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1",
        "boundingRect": {
          "top": 269,
          "left": 1981,
          "right": 2050,
          "width": 69,
          "bottom": 285,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-HTML",
              "path": "1,HTML",
              "type": "node",
              "snippet": "<html lang=\"en\" class=\"light\" style=\"color-scheme: light;\">",
              "selector": "html.light",
              "nodeLabel": "html.light",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 1,
                "height": 1
              }
            }
          }
        ]
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.color",
      "wcag2aa",
      "wcag143",
      "TTv5",
      "TT13.c",
      "EN-301-549",
      "EN-9.1.4.3",
      "ACT",
      "RGAAv4",
      "RGAA-3.2.1"
    ],
    "type": "debugdata",
    "impact": "serious"
  }
}

Heading elements are not in a sequentially-descending order

Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn more about heading order.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-6-H3",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,4,A,1,DIV,0,DIV,0,DIV,0,H3",
        "type": "node",
        "snippet": "<h3>",
        "selector": "div.c-lesPJm > div.index_contents__YVkKY > div.index_contents__YVkKY > h3",
        "nodeLabel": "Projects",
        "explanation": "Fix any of the following:\n  Heading order invalid",
        "boundingRect": {
          "top": 275,
          "left": 1588,
          "right": 2408,
          "width": 820,
          "bottom": 548,
          "height": 274
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.semantics",
      "best-practice"
    ],
    "type": "debugdata",
    "impact": "moderate"
  }
}

Elements with visible text labels do not have matching accessible names.

Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. Learn more about accessible names.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-7-A",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,1,A",
        "type": "node",
        "snippet": "<a target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Devouring Details\" class=\"index_frame__XKrH1\" data-variant=\"slide\" style=\"width:1200px;height:720px;position:absolute;left:1240px\" href=\"https://www.devouringdetails.com\">",
        "selector": "main.index_root__qDg6t > div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1",
        "nodeLabel": "Devouring Details\nDD",
        "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name",
        "boundingRect": {
          "top": 297,
          "left": 409,
          "right": 789,
          "width": 380,
          "bottom": 526,
          "height": 228
        }
      }
    },
    {
      "node": {
        "lhId": "1-8-A",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,2,A",
        "type": "node",
        "snippet": "<a aria-label=\"Craft\" class=\"index_frame__XKrH1\" data-variant=\"slide\" style=\"width:1200px;height:720px;position:absolute;left:2480px\" href=\"/craft\">",
        "selector": "main.index_root__qDg6t > div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1",
        "nodeLabel": "Craft\nCraft",
        "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name",
        "boundingRect": {
          "top": 297,
          "left": 802,
          "right": 1182,
          "width": 380,
          "bottom": 526,
          "height": 228
        }
      }
    },
    {
      "node": {
        "lhId": "1-9-A",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,4,A",
        "type": "node",
        "snippet": "<a aria-label=\"Projects\" class=\"index_frame__XKrH1\" data-variant=\"slide\" style=\"width:1200px;height:720px;position:absolute;left:4960px\" href=\"/projects\">",
        "selector": "main.index_root__qDg6t > div.index_center__dvDjE > div.index_frames__d9hw4 > a.index_frame__XKrH1",
        "nodeLabel": "Projects\nProjects",
        "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name",
        "boundingRect": {
          "top": 297,
          "left": 1588,
          "right": 1968,
          "width": 380,
          "bottom": 526,
          "height": 228
        }
      }
    },
    {
      "node": {
        "lhId": "1-10-BUTTON",
        "path": "1,HTML,1,BODY,0,DIV,2,MAIN,1,DIV,0,DIV,6,DIV,0,DIV,0,DIV,4,BUTTON",
        "type": "node",
        "snippet": "<button aria-label=\"Copy email\">",
        "selector": "div.index_frame__XKrH1 > div.c-lesPJm > div.index_contact__4w2ft > button",
        "nodeLabel": "Email\n\nCopied",
        "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name",
        "boundingRect": {
          "top": 395,
          "left": 2521,
          "right": 2607,
          "width": 85,
          "bottom": 428,
          "height": 32
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.semantics",
      "wcag21a",
      "wcag253",
      "EN-301-549",
      "EN-9.2.5.3",
      "RGAAv4",
      "RGAA-6.1.5",
      "experimental"
    ],
    "type": "debugdata",
    "impact": "serious"
  }
}

`[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.

Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more about the viewport meta tag.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-11-META",
        "path": "1,HTML,0,HEAD,1,META",
        "type": "node",
        "snippet": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" data-next-head=\"\">",
        "selector": "head > meta",
        "nodeLabel": "head > meta",
        "explanation": "Fix any of the following:\n  user-scalable=no on <meta> tag disables zooming on mobile devices",
        "boundingRect": {
          "top": 0,
          "left": 0,
          "right": 0,
          "width": 0,
          "bottom": 0,
          "height": 0
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.sensory-and-visual-cues",
      "wcag2aa",
      "wcag144",
      "EN-301-549",
      "EN-9.1.4.4",
      "ACT",
      "RGAAv4",
      "RGAA-10.4.2"
    ],
    "type": "debugdata",
    "impact": "moderate"
  }
}

Reduce unused JavaScript

Est savings of 610 KiB

Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. Learn how to reduce unused JavaScript.

Elements & resources
{
  "type": "opportunity",
  "items": [
    {
      "url": "https://rauno.me/_next/static/chunks/767-4b6515b63bfd27c7.js",
      "totalBytes": 359090,
      "wastedBytes": 284303,
      "wastedPercent": 79.17318778022224
    },
    {
      "url": "https://rauno.me/_next/static/chunks/289-997c237818b86f43.js",
      "totalBytes": 337830,
      "wastedBytes": 210776,
      "wastedPercent": 62.39114347452861
    },
    {
      "url": "https://rauno.me/_next/static/chunks/150-19d3218242abd104.js",
      "totalBytes": 92799,
      "wastedBytes": 80394,
      "wastedPercent": 86.63239905602431
    },
    {
      "url": "https://rauno.me/_next/static/chunks/pages/_app-8bc0311d52546293.js",
      "totalBytes": 63185,
      "wastedBytes": 27743,
      "wastedPercent": 43.90757200239296
    },
    {
      "url": "https://rauno.me/_next/static/chunks/framework-7c95b8e5103c9e90.js",
      "totalBytes": 58682,
      "wastedBytes": 21850,
      "wastedPercent": 37.234019264448335
    }
  ],
  "headings": [
    {
      "key": "url",
      "label": "URL",
      "valueType": "url",
      "subItemsHeading": {
        "key": "source",
        "valueType": "code"
      }
    },
    {
      "key": "totalBytes",
      "label": "Transfer Size",
      "valueType": "bytes",
      "subItemsHeading": {
        "key": "sourceBytes"
      }
    },
    {
      "key": "wastedBytes",
      "label": "Est Savings",
      "valueType": "bytes",
      "subItemsHeading": {
        "key": "sourceWastedBytes"
      }
    }
  ],
  "sortedBy": [
    "wastedBytes"
  ],
  "debugData": {
    "type": "debugdata",
    "metricSavings": {
      "FCP": 0,
      "LCP": 2400
    }
  },
  "overallSavingsMs": 2400,
  "overallSavingsBytes": 625066
}

Legacy JavaScript

Est savings of 13 KiB

Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile Baseline features, unless you know you must support older browsers. Learn why most sites can deploy ES6+ code without transpiling

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "signal": "Array.prototype.at",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 18290,
              "urlProvider": "network"
            }
          },
          {
            "signal": "Array.prototype.flat",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 17678,
              "urlProvider": "network"
            }
          },
          {
            "signal": "Array.prototype.flatMap",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 17791,
              "urlProvider": "network"
            }
          },
          {
            "signal": "Object.fromEntries",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 18167,
              "urlProvider": "network"
            }
          },
          {
            "signal": "Object.hasOwn",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 18425,
              "urlProvider": "network"
            }
          },
          {
            "signal": "String.prototype.trimEnd",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 17420,
              "urlProvider": "network"
            }
          },
          {
            "signal": "String.prototype.trimStart",
            "location": {
              "url": "https://rauno.me/_next/static/chunks/main-bff256145eb15a4d.js",
              "line": 0,
              "type": "source-location",
              "column": 17335,
              "urlProvider": "network"
            }
          }
        ]
      },
      "wastedBytes": 12966
    }
  ],
  "headings": [
    {
      "key": "url",
      "label": "URL",
      "valueType": "url",
      "subItemsHeading": {
        "key": "location",
        "valueType": "source-location"
      }
    },
    {
      "key": null,
      "label": "",
      "valueType": "code",
      "subItemsHeading": {
        "key": "signal"
      }
    },
    {
      "key": "wastedBytes",
      "label": "Wasted bytes",
      "valueType": "bytes"
    }
  ],
  "debugData": {
    "type": "debugdata",
    "wastedBytes": 12966
  }
}

Render-blocking requests

Requests are blocking the page's initial render, which may delay LCP. Deferring or inlining can move these network requests out of the critical path.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://rauno.me/_next/static/css/e621362aa87785a2.css",
      "totalBytes": 2770
    },
    {
      "url": "https://rauno.me/_next/static/css/647af292b7760dc7.css",
      "totalBytes": 1449
    }
  ],
  "headings": [
    {
      "key": "url",
      "label": "URL",
      "valueType": "url"
    },
    {
      "key": "totalBytes",
      "label": "Transfer Size",
      "valueType": "bytes"
    },
    {
      "key": "wastedMs",
      "label": "Duration",
      "valueType": "timespanMs"
    }
  ]
}
Environment & raw metrics
{
  "finalUrl": "https://rauno.me/",
  "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36",
  "formFactor": "mobile",
  "throttlingMethod": "simulate",
  "throttling": {
    "rttMs": 150,
    "throughputKbps": 1638.4,
    "requestLatencyMs": 562.5,
    "uploadThroughputKbps": 675,
    "cpuSlowdownMultiplier": 4,
    "downloadThroughputKbps": 1474.5600000000002
  },
  "metrics": [
    {
      "id": "largest-contentful-paint",
      "unit": "millisecond",
      "value": 6018.6990000000005
    },
    {
      "id": "cumulative-layout-shift",
      "unit": "unitless",
      "value": 0
    },
    {
      "id": "total-blocking-time",
      "unit": "millisecond",
      "value": 31.000000000000455
    },
    {
      "id": "first-contentful-paint",
      "unit": "millisecond",
      "value": 939.699
    },
    {
      "id": "speed-index",
      "unit": "millisecond",
      "value": 2127.0539059834236
    }
  ]
}

01 / WHAT WORKS

What makes it work

One shape creates recognition

The yellow circle and black text form a direct visual signature against a muted environment.

Edges imply a larger space

A neighboring canvas edge, top ruler and gray surround suggest space beyond a conventional single column.

02 / NEXT STEPS

Where to go next

  1. 01

    Explain horizontal browsing

    Large vertical margins and subtle panel edges leave the next-page route unclear on mobile.

    Add a short swipe cue or previous/next controls, retain keyboard alternatives and make contact directly discoverable on narrow screens.

03 / DESIGN LANGUAGE

A design system you can reuse

Colors

Background

#ededed

Text

#171717

Typography

Display font
X
Body font
X
Heading / body
32px / 16px

Spacing & shape

Section gap
0px
Component inset
Card radius
Button radius
0px

Parameters are element samples. Empty values are unknown, and individual samples are not site-wide rules.

04 / EVIDENCE

The detail behind the report

Values come from one capture. Fonts, radii and spacing are element samples, not a universal site-wide specification. Empty values are unknown. HTML bytes are source size, not compressed transfer size; script counts are DOM tags, not network requests.

Conversion1 observations

Explain horizontal browsing

Large vertical margins and subtle panel edges leave the next-page route unclear on mobile.

Add a short swipe cue or previous/next controls, retain keyboard alternatives and make contact directly discoverable on narrow screens.

mobile.png: centered horizontal canvas with subtle neighboring edge
Launch3 observations

No Content-Security-Policy

A CSP is the standard way to limit script sources. Vibe-coded pages often load anything, including injected scripts.

Start with a report-only CSP, then default-src 'self' and an explicit script-src.

content-security-policy missing

No X-Content-Type-Options

Without nosniff, browsers may interpret a file as a different type than you sent. It is a one-line header.

Set X-Content-Type-Options: nosniff.

x-content-type-options missing

No Referrer-Policy

The default referrer can leak internal paths and query strings to third parties.

Set Referrer-Policy: strict-origin-when-cross-origin.

referrer-policy missing
Link preview

05 / MAKE IT HAPPEN

Give your AI a clear next step

Use the improvement prompt for this page, or the design prompt to borrow its visual language. “Recreate” includes references and implementation steps. Paste either into your coding assistant.

Preview full instructions
Improve the current project using the 2026-09-05T03:26:19.431Z snapshot of https://rauno.me. First identify changes since capture; do not revert newer behavior to the old snapshot.

Design baseline
A white canvas carries the introduction with an overlapping yellow circle. Neighboring canvas edges and a small top ruler suggest browsing progression; contact information appears in the page content. Mobile reduces the canvas to a browsable panel. Adapt the single shape, type scale and horizontal spatial relationship, verifying keyboard and touch behavior separately.
{
  "colors": [
    {
      "role": "bg",
      "hex": "#ededed"
    },
    {
      "role": "ink",
      "hex": "#171717"
    }
  ],
  "fonts": {
    "body": "X",
    "display": "X",
    "stack": [
      "X"
    ]
  },
  "radius": {
    "button": "0px",
    "card": "",
    "field": ""
  },
  "space": {
    "section": "0px",
    "card": ""
  },
  "type": {
    "h1": "32px",
    "body": "16px",
    "weight": "500",
    "lineHeight": "normal",
    "letterSpacing": "normal"
  }
}
Values come from one capture. Fonts, radii and spacing are element samples, not a universal site-wide specification. Empty values are unknown. HTML bytes are source size, not compressed transfer size; script counts are DOM tags, not network requests.

Actions
1. Explain horizontal browsing
Add a short swipe cue or previous/next controls, retain keyboard alternatives and make contact directly discoverable on narrow screens.
Evidence: mobile.png: centered horizontal canvas with subtle neighboring edge

2. No Content-Security-Policy
Start with a report-only CSP, then default-src 'self' and an explicit script-src.
Evidence: content-security-policy missing

3. No X-Content-Type-Options
Set X-Content-Type-Options: nosniff.
Evidence: x-content-type-options missing

4. No Referrer-Policy
Set Referrer-Policy: strict-origin-when-cross-origin.
Evidence: referrer-policy missing

Acceptance
- Check text, layout and the main action “Email” at 1440×900 and 390×844.
- Preserve branding, authentication and business behavior. A screenshot does not prove broken interaction.
- Change only evidence-backed issues. Validate security headers against existing resources and authentication in report-only mode where supported.
- Compare before/after screenshots and run relevant functional tests. Do not claim untested behavior passed.