https://posthog.com

Page structure & technical metrics

Words

614

Action candidates

21

Images

20

HTML

1398 KB

Copy

Title chars
43
Meta chars
120
H1
1
H2
9

Action

Primary

Get started – free

Forms
0
On-site links
98
Off-site links
0

Security & metadata

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

Page

Tailwind

Scripts
23 ext / 5 inline
Alt
14 missing
Lang
en
Third-party hosts
no

Lighthouse

Simulated mobile · Performance

21 / 100

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

View details

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

Performance21/ 100
Accessibility84/ 100
Best practices88/ 100
SEO92/ 100
LCP · Largest content37,436 ms
CLS · Layout shift0.226
TBT · Blocking time3,271 ms
FCP · First content2,493 ms
SI · Speed index12,601 ms

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

Browser errors were logged to the console

Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. Learn more about this errors in console diagnostic audit

Elements & resources
{
  "type": "table",
  "items": [
    {
      "source": "rendering",
      "description": "Error: <svg> attribute width: Expected length, \"auto\".",
      "sourceLocation": {
        "url": "https://posthog.com/",
        "line": 4,
        "type": "source-location",
        "column": 0,
        "urlProvider": "network"
      }
    },
    {
      "source": "rendering",
      "description": "Error: <svg> attribute width: Expected length, \"auto\".",
      "sourceLocation": {
        "url": "https://posthog.com/",
        "line": 4,
        "type": "source-location",
        "column": 0,
        "urlProvider": "network"
      }
    },
    {
      "source": "rendering",
      "description": "Error: <svg> attribute width: Expected length, \"auto\".",
      "sourceLocation": {
        "url": "https://posthog.com/",
        "line": 75,
        "type": "source-location",
        "column": 0,
        "urlProvider": "network"
      }
    },
    {
      "source": "rendering",
      "description": "Error: <svg> attribute width: Expected length, \"auto\".",
      "sourceLocation": {
        "url": "https://posthog.com/",
        "line": 75,
        "type": "source-location",
        "column": 0,
        "urlProvider": "network"
      }
    }
  ],
  "headings": [
    {
      "key": "sourceLocation",
      "label": "Source",
      "valueType": "source-location"
    },
    {
      "key": "description",
      "label": "Description",
      "valueType": "code"
    }
  ]
}

Serves images with low resolution

Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. Learn how to provide responsive images.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_180/v1/posthog.com/src/components/EU/images/ursula",
      "node": {
        "lhId": "1-130-IMG",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL,0,LI,0,DIV,2,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_180/v1/posthog…\" alt=\"Ursula von der Leyen, President of the European Commission\" class=\"\">",
        "selector": "div.not-prose > div.absolute > div.inline-block > img",
        "nodeLabel": "Ursula von der Leyen, President of the European Commission",
        "boundingRect": {
          "top": 433,
          "left": 231,
          "right": 411,
          "width": 180,
          "bottom": 514,
          "height": 81
        }
      },
      "actualSize": "180 x 81",
      "actualPixels": 14580,
      "expectedSize": "270 x 122",
      "displayedSize": "180 x 81",
      "expectedPixels": 32940
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "",
      "valueType": "node"
    },
    {
      "key": "url",
      "label": "URL",
      "valueType": "url"
    },
    {
      "key": "displayedSize",
      "label": "Displayed size",
      "valueType": "text"
    },
    {
      "key": "actualSize",
      "label": "Actual size",
      "valueType": "text"
    },
    {
      "key": "expectedSize",
      "label": "Expected size",
      "valueType": "text"
    }
  ]
}

Minimize main-thread work

9.3 s

Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to minimize main-thread work

Elements & resources
{
  "type": "table",
  "items": [
    {
      "group": "scriptEvaluation",
      "duration": 6380.695999999819,
      "groupLabel": "Script Evaluation"
    },
    {
      "group": "other",
      "duration": 1411.167999999982,
      "groupLabel": "Other"
    },
    {
      "group": "scriptParseCompile",
      "duration": 740.3079999999999,
      "groupLabel": "Script Parsing & Compilation"
    },
    {
      "group": "styleLayout",
      "duration": 462.22400000000005,
      "groupLabel": "Style & Layout"
    },
    {
      "group": "paintCompositeRender",
      "duration": 185.83999999999884,
      "groupLabel": "Rendering"
    },
    {
      "group": "garbageCollection",
      "duration": 98.58000000000028,
      "groupLabel": "Garbage Collection"
    },
    {
      "group": "parseHTML",
      "duration": 71.17600000000002,
      "groupLabel": "Parse HTML & CSS"
    }
  ],
  "headings": [
    {
      "key": "groupLabel",
      "label": "Category",
      "valueType": "text"
    },
    {
      "key": "duration",
      "label": "Time Spent",
      "valueType": "ms",
      "granularity": 1
    }
  ],
  "sortedBy": [
    "duration"
  ]
}

Reduce JavaScript execution time

6.9 s

Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to reduce Javascript execution time.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://us-assets.i.posthog.com/static/1/array.js",
      "total": 4383.611999999984,
      "scripting": 4315.403999999984,
      "scriptParseCompile": 16.584
    },
    {
      "url": "https://posthog.com/app-12f4ce35de710020c41a.js",
      "total": 2286.0639999999776,
      "scripting": 1483.015999999977,
      "scriptParseCompile": 538.2639999999999
    },
    {
      "url": "Unattributable",
      "total": 1289.4479999999965,
      "scripting": 393.73600000000323,
      "scriptParseCompile": 0
    },
    {
      "url": "https://posthog.com/",
      "total": 741.8919999999999,
      "scripting": 29.29599999999993,
      "scriptParseCompile": 3.8640000000000003
    },
    {
      "url": "https://us-assets.i.posthog.com/static/1.427.2/posthog-recorder.js",
      "total": 371.87599999999975,
      "scripting": 82.59599999999995,
      "scriptParseCompile": 12.024
    }
  ],
  "summary": {
    "wastedMs": 6874.783999999964
  },
  "headings": [
    {
      "key": "url",
      "label": "URL",
      "valueType": "url"
    },
    {
      "key": "total",
      "label": "Total CPU Time",
      "valueType": "ms",
      "granularity": 1
    },
    {
      "key": "scripting",
      "label": "Script Evaluation",
      "valueType": "ms",
      "granularity": 1
    },
    {
      "key": "scriptParseCompile",
      "label": "Script Parse",
      "valueType": "ms",
      "granularity": 1
    }
  ],
  "sortedBy": [
    "total"
  ]
}

Avoid large layout shifts

5 layout shifts found

These are the largest layout shifts observed on the page. Each table item represents a single layout shift, and shows the element that shifted the most. Below each item are possible root causes that led to the layout shift. Some of these layout shifts may not be included in the CLS metric value due to windowing. Learn how to improve CLS

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "page-6-OL",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL",
        "type": "node",
        "snippet": "<ol tabindex=\"-1\" class=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2 sm:w-[390px] max-w-[calc(1…\" data-radix-toast-viewport=\"true\">",
        "selector": "body.light > div#___gatsby > div > ol.fixed",
        "nodeLabel": "Legally-required cookie banner\n\nPostHog.com doesn't use third-party cookies, on…",
        "boundingRect": {
          "top": 334,
          "left": 16,
          "right": 396,
          "width": 380,
          "bottom": 807,
          "height": 473
        }
      },
      "score": 0.2263343736226506,
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "cause": "Media element lacking an explicit size",
            "extra": {
              "lhId": "page-2-IMG",
              "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL,0,LI,0,DIV,2,DIV,0,DIV,0,IMG",
              "type": "node",
              "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_180/v1/posthog…\" alt=\"Ursula von der Leyen, President of the European Commission\" class=\"\">",
              "selector": "div.not-prose > div.absolute > div.inline-block > img",
              "nodeLabel": "Ursula von der Leyen, President of the European Commission",
              "boundingRect": {
                "top": 433,
                "left": 231,
                "right": 411,
                "width": 180,
                "bottom": 514,
                "height": 81
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "page-6-OL",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL",
        "type": "node",
        "snippet": "<ol tabindex=\"-1\" class=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2 sm:w-[390px] max-w-[calc(1…\" data-radix-toast-viewport=\"true\">",
        "selector": "body.light > div#___gatsby > div > ol.fixed",
        "nodeLabel": "Legally-required cookie banner\n\nPostHog.com doesn't use third-party cookies, on…",
        "boundingRect": {
          "top": 334,
          "left": 16,
          "right": 396,
          "width": 380,
          "bottom": 807,
          "height": 473
        }
      },
      "score": 0.1014015832921796
    },
    {
      "node": {
        "lhId": "page-9-DIV",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,1,DIV",
        "type": "node",
        "snippet": "<div class=\"@container mb-4\">",
        "selector": "div.@container/reader-content > div.reader-content-container > div.space-y-12 > div.@container",
        "nodeLabel": "Ask PostHog anything\nFix bugs from Slack\nAutomatic improvements\nIan Vanagas: th…",
        "boundingRect": {
          "top": 821,
          "left": 24,
          "right": 388,
          "width": 364,
          "bottom": 1704,
          "height": 882
        }
      },
      "score": 0.04729384541610452,
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "cause": "Media element lacking an explicit size",
            "extra": {
              "lhId": "page-1-IMG",
              "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,IMG",
              "type": "node",
              "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/posthog_ai_light_f654818…\" alt=\"PostHog AI screenshot\" class=\"rounded shadow-2xl border border-primary\">",
              "selector": "div.grid > div.flex > div.inline-block > img.rounded",
              "nodeLabel": "PostHog AI screenshot",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "bottom": 0,
                "height": 0
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "page-8-DIV",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV",
        "type": "node",
        "snippet": "<div class=\"inline-block \">",
        "selector": "div.@container > div.grid > div.flex > div.inline-block",
        "nodeLabel": "PostHog AI screenshot",
        "boundingRect": {
          "top": 0,
          "left": 0,
          "right": 0,
          "width": 0,
          "bottom": 0,
          "height": 0
        }
      },
      "score": 0.00913443750005644,
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "cause": "Media element lacking an explicit size",
            "extra": {
              "lhId": "page-1-IMG",
              "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,IMG",
              "type": "node",
              "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/posthog_ai_light_f654818…\" alt=\"PostHog AI screenshot\" class=\"rounded shadow-2xl border border-primary\">",
              "selector": "div.grid > div.flex > div.inline-block > img.rounded",
              "nodeLabel": "PostHog AI screenshot",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "bottom": 0,
                "height": 0
              }
            }
          }
        ]
      }
    },
    {
      "node": {
        "lhId": "page-4-ASIDE",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,1,ASIDE",
        "type": "node",
        "snippet": "<aside data-scheme=\"secondary\" class=\"flex items-center gap-0.5 py-1\">",
        "selector": "div.z-50 > div#taskbar > div.mx-auto > aside.flex",
        "nodeLabel": "Get started – free",
        "boundingRect": {
          "top": 8,
          "left": 161,
          "right": 396,
          "width": 235,
          "bottom": 48,
          "height": 40
        }
      },
      "score": 0.0001084705763230148,
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-Medium-93eadd6a93e9cba289ce176c2443e545.woff2"
            }
          },
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-SemiBold-d86cd114131655b9b47995a1777e9d76.woff2"
            }
          },
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-ad20905153cad02fadd7da79ee771d57.woff2"
            }
          },
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-Bold-0418cc284def4ebc55a9d2895fd7cc39.woff2"
            }
          },
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-Medium-Italic-51c8f3a6b53a4b4e5f6a3d35048e7309.woff2"
            }
          },
          {
            "cause": "Web font loaded",
            "extra": {
              "type": "url",
              "value": "https://posthog.com/static/RoundHog-SemiBold-Italic-fdcaa4d6eed2dd1d31952da0d05d8c82.woff2"
            }
          }
        ]
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Element",
      "valueType": "node",
      "subItemsHeading": {
        "key": "extra"
      }
    },
    {
      "key": "score",
      "label": "Layout shift score",
      "valueType": "numeric",
      "granularity": 0.001,
      "subItemsHeading": {
        "key": "cause",
        "valueType": "text"
      }
    }
  ]
}

Image elements do not have explicit `width` and `height`

Set an explicit width and height on image elements to reduce layout shifts and improve CLS. Learn how to set image dimensions

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/v1/posthog.com/src/components/Home/images/cloud-cd",
      "node": {
        "lhId": "1-128-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,8,DIV,2,DIV,1,SECTION,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/v1/posthog.com/src/compo…\" alt=\"PostHog Web\" class=\"\">",
        "selector": "div.relative > div.relative > div.inline-block > img",
        "nodeLabel": "PostHog Web",
        "boundingRect": {
          "top": 6893,
          "left": 49,
          "right": 363,
          "width": 314,
          "bottom": 7201,
          "height": 308
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/steve_hogs_17c7900b07",
      "node": {
        "lhId": "1-12-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,6,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/steve_hogs_17c7900b07\" class=\"\">",
        "selector": "div.space-y-12 > div#why-posthog > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#why-posthog > div.inline-block > img",
        "boundingRect": {
          "top": 5059,
          "left": 24,
          "right": 324,
          "width": 300,
          "bottom": 5296,
          "height": 237
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/night_hog_219fff00f3",
      "node": {
        "lhId": "1-13-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,7,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/night_hog_219fff00f3\" class=\"\">",
        "selector": "div.space-y-12 > div#bedtime-reading > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#bedtime-reading > div.inline-block > img",
        "boundingRect": {
          "top": 5811,
          "left": 14,
          "right": 374,
          "width": 360,
          "bottom": 6079,
          "height": 268
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/hogmillionaire_6a6c2c958d",
      "node": {
        "lhId": "1-11-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,5,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/hogmillionaire_6a6c2c958d\" class=\"\">",
        "selector": "div.space-y-12 > div#pricing > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#pricing > div.inline-block > img",
        "boundingRect": {
          "top": 3992,
          "left": 268,
          "right": 388,
          "width": 120,
          "bottom": 4102,
          "height": 110
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/v1/posthog.com/src/components/Home/images/g2-badge",
      "node": {
        "lhId": "1-129-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,8,DIV,2,DIV,1,SECTION,0,DIV,1,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/v1/posthog.com/src/compo…\" alt=\"People on G2 think we're great\" class=\"\">",
        "selector": "div.relative > div.absolute > div.inline-block > img",
        "nodeLabel": "People on G2 think we're great",
        "boundingRect": {
          "top": 7147,
          "left": 41,
          "right": 131,
          "width": 90,
          "bottom": 7264,
          "height": 117
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/haha_bizzniss_5bc44659ec",
      "node": {
        "lhId": "1-14-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,8,DIV,2,DIV,0,DIV,0,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/haha_bizzniss_5bc44659ec\" class=\"\">",
        "selector": "div.absolute > div > div.inline-block > img",
        "nodeLabel": "div.absolute > div > div.inline-block > img",
        "boundingRect": {
          "top": 6752,
          "left": 252,
          "right": 372,
          "width": 120,
          "bottom": 6887,
          "height": 135
        }
      }
    },
    {
      "url": "https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_180/v1/posthog.com/src/components/EU/images/ursula",
      "node": {
        "lhId": "1-130-IMG",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL,0,LI,0,DIV,2,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_180/v1/posthog…\" alt=\"Ursula von der Leyen, President of the European Commission\" class=\"\">",
        "selector": "div.not-prose > div.absolute > div.inline-block > img",
        "nodeLabel": "Ursula von der Leyen, President of the European Commission",
        "boundingRect": {
          "top": 433,
          "left": 231,
          "right": 411,
          "width": 180,
          "bottom": 514,
          "height": 81
        }
      }
    },
    {
      "url": "https://posthog.com/brand/posthog-logo.svg",
      "node": {
        "lhId": "1-126-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,3,DIV,2,DIV,1,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,0,DIV,9,DIV,0,DIV,0,SPAN,0,A,0,IMG",
        "type": "node",
        "snippet": "<img src=\"/brand/posthog-logo.svg\" alt=\"PostHog\" class=\"h-full w-auto object-contain dark:hidden max-h-10\">",
        "selector": "div.w-auto > span > a.relative > img.h-full",
        "nodeLabel": "PostHog",
        "boundingRect": {
          "top": 2567,
          "left": 48,
          "right": 179,
          "width": 131,
          "bottom": 2590,
          "height": 23
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "",
      "valueType": "node"
    },
    {
      "key": "url",
      "label": "URL",
      "valueType": "url"
    }
  ]
}

Missing source maps for large first-party JavaScript

Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. Learn more about source maps.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "error": "Large JavaScript file is missing a source map"
          },
          {
            "error": "Error: Timed out fetching resource"
          }
        ]
      },
      "scriptUrl": "https://posthog.com/app-12f4ce35de710020c41a.js",
      "sourceMapUrl": "https://posthog.com/app-12f4ce35de710020c41a.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "error": "Error: Timed out fetching resource"
          }
        ]
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1/array.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1/array.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "error": "Error: Timed out fetching resource"
          }
        ]
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/surveys.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/surveys.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "error": "Error: Timed out fetching resource"
          }
        ]
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/posthog-recorder.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/posthog-recorder.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/web-vitals-with-attribution.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/web-vitals-with-attribution.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/logs.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/logs.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/exception-autocapture.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/exception-autocapture.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/dead-clicks-autocapture.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/dead-clicks-autocapture.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://us-assets.i.posthog.com/static/1.427.2/conversations.js",
      "sourceMapUrl": "https://us-assets.i.posthog.com/static/1.427.2/conversations.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/webpack-runtime-018931131fe3f951f082.js",
      "sourceMapUrl": "https://posthog.com/webpack-runtime-018931131fe3f951f082.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/f6c1ab35-0dbef59872206c5217aa.js",
      "sourceMapUrl": "https://posthog.com/f6c1ab35-0dbef59872206c5217aa.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/ed1deae8-16c6f4d37d9504ae5abc.js",
      "sourceMapUrl": "https://posthog.com/ed1deae8-16c6f4d37d9504ae5abc.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/ddc2d7df-6c0f12990a271afb7f65.js",
      "sourceMapUrl": "https://posthog.com/ddc2d7df-6c0f12990a271afb7f65.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/component---src-pages-index-tsx-df04cd20f1c3ba0d8a06.js",
      "sourceMapUrl": "https://posthog.com/component---src-pages-index-tsx-df04cd20f1c3ba0d8a06.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/c977122edc19ff50597980cdac58678ef6599b11-7987650d8ac1c8dc1182.js",
      "sourceMapUrl": "https://posthog.com/c977122edc19ff50597980cdac58678ef6599b11-7987650d8ac1c8dc1182.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/becacf73-56a0f69e2f247daa185a.js",
      "sourceMapUrl": "https://posthog.com/becacf73-56a0f69e2f247daa185a.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/aed920e9-55685e7506166bc4a1f7.js",
      "sourceMapUrl": "https://posthog.com/aed920e9-55685e7506166bc4a1f7.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/9b206854-c7ca5ab2f81eeede8838.js",
      "sourceMapUrl": "https://posthog.com/9b206854-c7ca5ab2f81eeede8838.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/97c8eb05-70e407f03e371625cd2c.js",
      "sourceMapUrl": "https://posthog.com/97c8eb05-70e407f03e371625cd2c.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/9754-831b0d842f336221bd86.js",
      "sourceMapUrl": "https://posthog.com/9754-831b0d842f336221bd86.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/507a0916-d6225b717e81e4c3bc38.js",
      "sourceMapUrl": "https://posthog.com/507a0916-d6225b717e81e4c3bc38.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/4e5c9a1d4810c5f5c6325835bcfd7f436eb1af7e-bfcb94e3e9ac6cfe92a4.js",
      "sourceMapUrl": "https://posthog.com/4e5c9a1d4810c5f5c6325835bcfd7f436eb1af7e-bfcb94e3e9ac6cfe92a4.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/36269b29-b8578072ecfbffd6fad9.js",
      "sourceMapUrl": "https://posthog.com/36269b29-b8578072ecfbffd6fad9.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/2286-13d0fdb637a2f1726987.js",
      "sourceMapUrl": "https://posthog.com/2286-13d0fdb637a2f1726987.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/1933-0a93947e28e08329be0c.js",
      "sourceMapUrl": "https://posthog.com/1933-0a93947e28e08329be0c.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/17c50846-74c8dea247d819a32d77.js",
      "sourceMapUrl": "https://posthog.com/17c50846-74c8dea247d819a32d77.js.map"
    },
    {
      "subItems": {
        "type": "subitems",
        "items": []
      },
      "scriptUrl": "https://posthog.com/0f8f4022-6f8e6dc6039374c892bd.js",
      "sourceMapUrl": "https://posthog.com/0f8f4022-6f8e6dc6039374c892bd.js.map"
    }
  ],
  "headings": [
    {
      "key": "scriptUrl",
      "label": "URL",
      "valueType": "url",
      "subItemsHeading": {
        "key": "error"
      }
    },
    {
      "key": "sourceMapUrl",
      "label": "Map URL",
      "valueType": "url"
    }
  ]
}

Buttons do not have an accessible name

When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. Learn how to make buttons more accessible.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-0-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,0,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button type=\"button\" role=\"menuitem\" id=\"radix-:RbklH1:\" aria-haspopup=\"menu\" aria-expanded=\"false\" data-state=\"closed\" class=\"group flex select-none items-center justify-between gap-0.5 rounded px-1.5…\" tabindex=\"-1\" data-orientation=\"horizontal\" data-radix-collection-item=\"\">",
        "selector": "div#taskbar > div.mx-auto > div.flex > button#radix-:RbklH1:",
        "nodeLabel": "div#taskbar > div.mx-auto > div.flex > button#radix-:RbklH1:",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 10,
          "left": 10,
          "right": 82,
          "width": 72,
          "bottom": 46,
          "height": 36
        }
      }
    },
    {
      "node": {
        "lhId": "1-1-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,1,ASIDE,1,SPAN,0,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded border text-primary transition-color…\" state=\"[object Object]\">",
        "selector": "aside.flex > span > div.w-auto > button.relative",
        "nodeLabel": "aside.flex > span > div.w-auto > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 15,
          "left": 292,
          "right": 322,
          "width": 30,
          "bottom": 41,
          "height": 26
        }
      }
    },
    {
      "node": {
        "lhId": "1-2-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,1,ASIDE,2,SPAN,0,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded border text-primary transition-color…\" state=\"[object Object]\">",
        "selector": "aside.flex > span > div.w-auto > button.relative",
        "nodeLabel": "aside.flex > span > div.w-auto > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 15,
          "left": 324,
          "right": 354,
          "width": 30,
          "bottom": 41,
          "height": 26
        }
      }
    },
    {
      "node": {
        "lhId": "1-3-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,0,DIV,0,DIV,2,DIV,1,ASIDE,3,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button type=\"button\" role=\"menuitem\" id=\"radix-:R35klH1:\" aria-haspopup=\"menu\" aria-expanded=\"false\" data-state=\"closed\" class=\"group flex select-none items-center justify-between gap-0.5 rounded px-1.5…\" tabindex=\"-1\" data-orientation=\"horizontal\" data-radix-collection-item=\"\">",
        "selector": "div.mx-auto > aside.flex > div.flex > button#radix-:R35klH1:",
        "nodeLabel": "div.mx-auto > aside.flex > div.flex > button#radix-:R35klH1:",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 14,
          "left": 356,
          "right": 396,
          "width": 40,
          "bottom": 42,
          "height": 28
        }
      }
    },
    {
      "node": {
        "lhId": "1-4-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,SPAN,0,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded-full border text-primary transition-…\" state=\"[object Object]\">",
        "selector": "div.flex > span > div.w-auto > button.relative",
        "nodeLabel": "div.flex > span > div.w-auto > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 54,
          "left": 372,
          "right": 398,
          "width": 26,
          "bottom": 80,
          "height": 26
        }
      }
    },
    {
      "node": {
        "lhId": "1-5-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,3,DIV,2,DIV,1,DIV,1,DIV,0,DIV,0,DIV,1,DIV,0,SPAN,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded border text-primary transition-color…\" state=\"[object Object]\">",
        "selector": "div > div.absolute > span > button.relative",
        "nodeLabel": "div > div.absolute > span > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 1963,
          "left": 189,
          "right": 222,
          "width": 33,
          "bottom": 1999,
          "height": 36
        }
      }
    },
    {
      "node": {
        "lhId": "1-6-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL,0,LI,1,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded border text-primary transition-color…\" state=\"[object Object]\" type=\"button\" data-radix-toast-announce-exclude=\"\" data-radix-toast-announce-alt=\"Close\">",
        "selector": "ol.fixed > li.ToastRoot > div.w-auto > button.relative",
        "nodeLabel": "ol.fixed > li.ToastRoot > div.w-auto > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 351,
          "left": 353,
          "right": 379,
          "width": 26,
          "bottom": 373,
          "height": 22
        }
      }
    },
    {
      "node": {
        "lhId": "1-7-BUTTON",
        "path": "1,HTML,1,BODY,9,DIV,2,DIV,1,OL,1,LI,1,DIV,0,BUTTON",
        "type": "node",
        "snippet": "<button class=\"relative items-center rounded rounded border text-primary transition-color…\" state=\"[object Object]\" type=\"button\" data-radix-toast-announce-exclude=\"\" data-radix-toast-announce-alt=\"Close\">",
        "selector": "ol.fixed > li.ToastRoot > div.w-auto > button.relative",
        "nodeLabel": "ol.fixed > li.ToastRoot > div.w-auto > button.relative",
        "explanation": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 532,
          "left": 361,
          "right": 387,
          "width": 26,
          "bottom": 554,
          "height": 22
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.name-role-value",
      "wcag2a",
      "wcag412",
      "section508",
      "section508.22.a",
      "TTv5",
      "TT6.a",
      "EN-301-549",
      "EN-9.4.1.2",
      "ACT",
      "RGAAv4",
      "RGAA-11.9.1"
    ],
    "type": "debugdata",
    "impact": "critical"
  }
}

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-8-H3",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,2,DIV,0,DIV,0,DIV,0,DIV,0,H3",
        "type": "node",
        "snippet": "<h3 class=\"!text-lg font-bold text-primary m-0 flex items-center gap-2\">",
        "selector": "div.w-full > div.not-prose > div.p-4 > h3.!text-lg",
        "nodeLabel": "Set up\nfor free",
        "explanation": "Fix any of the following:\n  Heading order invalid",
        "boundingRect": {
          "top": 527,
          "left": 41,
          "right": 371,
          "width": 330,
          "bottom": 555,
          "height": 28
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.semantics",
      "best-practice"
    ],
    "type": "debugdata",
    "impact": "moderate"
  }
}

Image elements do not have `[alt]` attributes

Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more about the `alt` attribute.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-9-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,0,SPAN,0,DIV,0,DIV,3,DIV,5,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img height=\"1262\" loading=\"lazy\" draggable=\"false\" class=\"\" data-src=\"https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_1555/9000_hedg…\">",
        "selector": "div.hidden > div.absolute > div.inline-block > img",
        "nodeLabel": "div.hidden > div.absolute > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 727,
          "left": 428,
          "right": 428,
          "width": 0,
          "bottom": 727,
          "height": 0
        }
      }
    },
    {
      "node": {
        "lhId": "1-10-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,0,SPAN,0,DIV,0,DIV,3,DIV,5,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img height=\"1262\" loading=\"lazy\" draggable=\"false\" class=\"\" data-src=\"https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_1555/9000_hedg…\">",
        "selector": "div.hidden > div.absolute > div.inline-block > img",
        "nodeLabel": "div.hidden > div.absolute > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 727,
          "left": 428,
          "right": 428,
          "width": 0,
          "bottom": 727,
          "height": 0
        }
      }
    },
    {
      "node": {
        "lhId": "1-11-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,5,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/hogmillionaire_6a6c2c958d\" class=\"\">",
        "selector": "div.space-y-12 > div#pricing > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#pricing > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 3906,
          "left": 268,
          "right": 388,
          "width": 120,
          "bottom": 4016,
          "height": 110
        }
      }
    },
    {
      "node": {
        "lhId": "1-12-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,6,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/steve_hogs_17c7900b07\" class=\"\">",
        "selector": "div.space-y-12 > div#why-posthog > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#why-posthog > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 4973,
          "left": 24,
          "right": 324,
          "width": 300,
          "bottom": 5211,
          "height": 237
        }
      }
    },
    {
      "node": {
        "lhId": "1-13-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,7,DIV,1,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/night_hog_219fff00f3\" class=\"\">",
        "selector": "div.space-y-12 > div#bedtime-reading > div.inline-block > img",
        "nodeLabel": "div.space-y-12 > div#bedtime-reading > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 5725,
          "left": 14,
          "right": 374,
          "width": 360,
          "bottom": 5993,
          "height": 268
        }
      }
    },
    {
      "node": {
        "lhId": "1-14-IMG",
        "path": "1,HTML,1,BODY,9,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,ARTICLE,0,DIV,0,DIV,0,DIV,8,DIV,2,DIV,0,DIV,0,DIV,0,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"https://res.cloudinary.com/dmukukwp6/image/upload/haha_bizzniss_5bc44659ec\" class=\"\">",
        "selector": "div.absolute > div > div.inline-block > img",
        "nodeLabel": "div.absolute > div > div.inline-block > img",
        "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\"",
        "boundingRect": {
          "top": 6666,
          "left": 252,
          "right": 372,
          "width": 120,
          "bottom": 6801,
          "height": 135
        }
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.text-alternatives",
      "wcag2a",
      "wcag111",
      "section508",
      "section508.22.a",
      "TTv5",
      "TT7.a",
      "TT7.b",
      "EN-301-549",
      "EN-9.1.1.1",
      "ACT",
      "RGAAv4",
      "RGAA-1.1.1"
    ],
    "type": "debugdata",
    "impact": "critical"
  }
}
Environment & raw metrics
{
  "finalUrl": "https://posthog.com/",
  "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": 37436.33799999999
    },
    {
      "id": "cumulative-layout-shift",
      "unit": "unitless",
      "value": 0.2263343736226506
    },
    {
      "id": "total-blocking-time",
      "unit": "millisecond",
      "value": 3271
    },
    {
      "id": "first-contentful-paint",
      "unit": "millisecond",
      "value": 2492.5629999999996
    },
    {
      "id": "speed-index",
      "unit": "millisecond",
      "value": 12600.812232096716
    }
  ]
}

01 / WHAT WORKS

What makes it work

The operating-system metaphor is coherent

The grassy background, shortcuts, window borders and internal tabs form a coherent world.

Explanation sits beside setup

The setup panel sits beside the proposition with practical onboarding information such as card requirements and the installer.

02 / NEXT STEPS

Where to go next

  1. 01

    Keep one clear mobile primary action

    Multiple icon routes and two installation methods can compete for attention when compressed onto mobile.

    Prioritize free setup on mobile, then explain AI installation; consolidate shortcuts into labeled navigation and keep overlays away from the main action.

03 / DESIGN LANGUAGE

A design system you can reuse

Colors

Background

#eeefe9

Text

#111827

Accent

#eb9d2a

Border

#374151

Typography

Display font
RoundHog
Body font
RoundHog
Heading / body
36px / 16px

Spacing & shape

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

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

Keep one clear mobile primary action

Multiple icon routes and two installation methods can compete for attention when compressed onto mobile.

Prioritize free setup on mobile, then explain AI installation; consolidate shortcuts into labeled navigation and keep overlays away from the main action.

desktop.png: multiple icon rails and setup choices; mobile.png: narrow central window
Launch2 observations

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:28:48.916Z snapshot of https://posthog.com. First identify changes since capture; do not revert newer behavior to the old snapshot.

Design baseline
Outer icon rails hold product, documentation and company routes. A central application window explains the value, with a separate panel for free setup and AI installation; tabs demonstrate questions, Slack and improvements. Mobile compresses the desktop into a reading window. Adapt window chrome and functional grouping rather than reproducing every decorative window.
{
  "colors": [
    {
      "role": "bg",
      "hex": "#eeefe9"
    },
    {
      "role": "ink",
      "hex": "#111827"
    },
    {
      "role": "accent",
      "hex": "#eb9d2a"
    },
    {
      "role": "line",
      "hex": "#374151"
    }
  ],
  "fonts": {
    "body": "RoundHog",
    "display": "RoundHog",
    "stack": [
      "RoundHog"
    ]
  },
  "radius": {
    "button": "8px",
    "card": "0px",
    "field": ""
  },
  "space": {
    "section": "0px",
    "card": "0px"
  },
  "type": {
    "h1": "36px",
    "body": "16px",
    "weight": "800",
    "lineHeight": "24px",
    "letterSpacing": "-0.9px"
  }
}
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. Keep one clear mobile primary action
Prioritize free setup on mobile, then explain AI installation; consolidate shortcuts into labeled navigation and keep overlays away from the main action.
Evidence: desktop.png: multiple icon rails and setup choices; mobile.png: narrow central window

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

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

Acceptance
- Check text, layout and the main action “Get started – free” 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.