https://supabase.com

Page structure & technical metrics

Words

1162

Action candidates

10

Images

57

HTML

1301 KB

Copy

Title chars
44
Meta chars
159
H1
1
H2
10

Action

Primary

Start your project

Forms
1/ 1 fields
On-site links
87
Off-site links
30

Security & metadata

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

Page

Next.js / Tailwind

Scripts
31 ext / 55 inline
Alt
6 missing
Lang
en
Third-party hosts
no

Lighthouse

Simulated mobile · Performance

52 / 100

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

View details

Simulated mobile · Lab data, not field data
2026-09-05T03:59:22.292Z · Lighthouse 13.4.1

Performance52/ 100
Accessibility92/ 100
Best practices100/ 100
SEO100/ 100
LCP · Largest content8,501 ms
CLS · Layout shift0.063
TBT · Blocking time506 ms
FCP · First content3,101 ms
SI · Speed index5,241 ms

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

Minimize main-thread work

4.2 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": 1435.6359999999602,
      "groupLabel": "Script Evaluation"
    },
    {
      "group": "other",
      "duration": 1158.000000000074,
      "groupLabel": "Other"
    },
    {
      "group": "styleLayout",
      "duration": 1023.2759999999982,
      "groupLabel": "Style & Layout"
    },
    {
      "group": "scriptParseCompile",
      "duration": 253.88400000000004,
      "groupLabel": "Script Parsing & Compilation"
    },
    {
      "group": "paintCompositeRender",
      "duration": 196.34000000000196,
      "groupLabel": "Rendering"
    },
    {
      "group": "parseHTML",
      "duration": 85.85199999999998,
      "groupLabel": "Parse HTML & CSS"
    },
    {
      "group": "garbageCollection",
      "duration": 37.29600000000002,
      "groupLabel": "Garbage Collection"
    }
  ],
  "headings": [
    {
      "key": "groupLabel",
      "label": "Category",
      "valueType": "text"
    },
    {
      "key": "duration",
      "label": "Time Spent",
      "valueType": "ms",
      "granularity": 1
    }
  ],
  "sortedBy": [
    "duration"
  ]
}

Reduce JavaScript execution time

1.4 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://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2379-53c0641973837d68.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 1002.3600000000001,
      "scripting": 507.88400000000007,
      "scriptParseCompile": 10.844
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3592-68b2373e3453ac5b.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 864.9959999999983,
      "scripting": 92.42399999999998,
      "scriptParseCompile": 6.3999999999999995
    },
    {
      "url": "https://supabase.com/",
      "total": 815.3159999999993,
      "scripting": 14.115999999999959,
      "scriptParseCompile": 11.691999999999986
    },
    {
      "url": "Unattributable",
      "total": 387.12400000007807,
      "scripting": 34.968,
      "scriptParseCompile": 0
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/d0d393d5-cd06a51e85f11ccd.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 188.7959999999992,
      "scripting": 174.0159999999992,
      "scriptParseCompile": 12.244
    },
    {
      "url": "https://ss.supabase.com/4icgbaujh/7wnp?1c28fa44=L2d0YWcvanM%2FaWQ9Ry1YVzE4S0dLR05SJmN4PWMmZ3RtPTRlNjkyMWgx",
      "total": 153.5720000000013,
      "scripting": 124.0880000000013,
      "scriptParseCompile": 25.999999999999996
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3927.76adfdefcb88e649.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 144.9919999999997,
      "scripting": 132.83999999999972,
      "scriptParseCompile": 1.66
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/84ae39ca-db4a5ea287046f08.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 108.40400000000007,
      "scripting": 67.33200000000008,
      "scriptParseCompile": 9.756
    },
    {
      "url": "https://ss.supabase.com/4icgbaujh.js?60a389s=aWQ9R1RNLVdDVlJMTU43&page=2",
      "total": 102.29999999999981,
      "scripting": 71.92399999999981,
      "scriptParseCompile": 23.336000000000002
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3167-484866ee3bef4898.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 70.66799999999998,
      "scripting": 47.91599999999998,
      "scriptParseCompile": 21.132
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9147-faf0c6699201f2f3.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "total": 50.31599999999992,
      "scripting": 33.055999999999926,
      "scriptParseCompile": 14.843999999999998
    }
  ],
  "summary": {
    "wastedMs": 1438.472
  },
  "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"
  ]
}

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-SPAN",
        "path": "2,HTML,1,BODY,10,DIV,0,MAIN,4,HEADER,0,DIV,0,DIV,0,DIV,0,H1,1,SPAN",
        "type": "node",
        "snippet": "<span class=\"text-brand block\">",
        "selector": "div.flex > div.grid > h1.text-foreground > span.text-brand",
        "nodeLabel": "Scale to millions",
        "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 1.96 (foreground color: #3fcf8e, background color: #fdfdfd, font size: 25.5pt (34px), font weight: normal). Expected contrast ratio of 3:1",
        "boundingRect": {
          "top": 207,
          "left": 24,
          "right": 388,
          "width": 364,
          "bottom": 245,
          "height": 38
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-1-BODY",
              "path": "2,HTML,1,BODY",
              "type": "node",
              "snippet": "<body style=\"overflow: auto;\">",
              "selector": "body",
              "nodeLabel": "body",
              "boundingRect": {
                "top": 0,
                "left": 0,
                "right": 412,
                "width": 412,
                "bottom": 9846,
                "height": 9846
              }
            }
          }
        ]
      }
    }
  ],
  "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-2-H6",
        "path": "2,HTML,1,BODY,11,FOOTER,2,DIV,0,DIV,1,DIV,0,DIV,0,DIV,0,H6",
        "type": "node",
        "snippet": "<h6 class=\"text-foreground overwrite text-base\">",
        "selector": "div.mt-12 > div.grid > div > h6.text-foreground",
        "nodeLabel": "Product",
        "explanation": "Fix any of the following:\n  Heading order invalid",
        "boundingRect": {
          "top": 8309,
          "left": 24,
          "right": 198,
          "width": 174,
          "bottom": 8332,
          "height": 23
        }
      }
    }
  ],
  "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-3-DIV",
        "path": "2,HTML,1,BODY,10,DIV,0,MAIN,10,SECTION,0,DIV,1,DIV,0,DIV,0,DIV",
        "type": "node",
        "snippet": "<div role=\"button\" tabindex=\"0\" aria-expanded=\"true\" aria-label=\"Lovable\" class=\"text-left rounded-lg p-5 flex flex-col gap-4 overflow-hidden transition-op…\" style=\"\">",
        "selector": "div.py-24 > div.section-container > div.flex > div.text-left",
        "nodeLabel": "Lovable\n\nPowering millions of AI-generated apps with a complete Supabase backen…",
        "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name",
        "boundingRect": {
          "top": 5137,
          "left": 24,
          "right": 388,
          "width": 364,
          "bottom": 5487,
          "height": 350
        }
      }
    }
  ],
  "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"
  }
}

Touch targets do not have sufficient size or spacing.

Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. Learn more about touch targets.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "node": {
        "lhId": "1-4-A",
        "path": "2,HTML,1,BODY,10,DIV,0,MAIN,10,SECTION,0,DIV,1,DIV,0,DIV,0,DIV,1,DIV,3,A",
        "type": "node",
        "snippet": "<a class=\"text-xs underline\" style=\"color:rgba(255,255,255,0.7)\" href=\"/customers/lovable\">",
        "selector": "div.flex > div.text-left > div.flex > a.text-xs",
        "nodeLabel": "Read the story →",
        "explanation": "Fix any of the following:\n  Target has insufficient size (324px by 16px, should be at least 24px by 24px)\n  Target has insufficient space to its closest neighbors. Safe clickable space has a diameter of 16px instead of at least 24px.",
        "boundingRect": {
          "top": 5451,
          "left": 44,
          "right": 368,
          "width": 324,
          "bottom": 5467,
          "height": 16
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "relatedNode": {
              "lhId": "1-3-DIV",
              "path": "2,HTML,1,BODY,10,DIV,0,MAIN,10,SECTION,0,DIV,1,DIV,0,DIV,0,DIV",
              "type": "node",
              "snippet": "<div role=\"button\" tabindex=\"0\" aria-expanded=\"true\" aria-label=\"Lovable\" class=\"text-left rounded-lg p-5 flex flex-col gap-4 overflow-hidden transition-op…\" style=\"\">",
              "selector": "div.py-24 > div.section-container > div.flex > div.text-left",
              "nodeLabel": "Lovable\n\nPowering millions of AI-generated apps with a complete Supabase backen…",
              "boundingRect": {
                "top": 5137,
                "left": 24,
                "right": 388,
                "width": 364,
                "bottom": 5487,
                "height": 350
              }
            }
          }
        ]
      }
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "Failing Elements",
      "valueType": "node",
      "subItemsHeading": {
        "key": "relatedNode",
        "valueType": "node"
      }
    }
  ],
  "debugData": {
    "tags": [
      "cat.sensory-and-visual-cues",
      "wcag22aa",
      "wcag258"
    ],
    "type": "debugdata",
    "impact": "serious"
  }
}

Reduce unused JavaScript

Est savings of 194 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://ss.supabase.com/4icgbaujh/7wnp?1c28fa44=L2d0YWcvanM%2FaWQ9Ry1YVzE4S0dLR05SJmN4PWMmZ3RtPTRlNjkyMWgx",
      "totalBytes": 158543,
      "wastedBytes": 69738,
      "wastedPercent": 43.986639988798906
    },
    {
      "url": "https://ss.supabase.com/4icgbaujh.js?60a389s=aWQ9R1RNLVdDVlJMTU43&page=2",
      "totalBytes": 131493,
      "wastedBytes": 67481,
      "wastedPercent": 51.318954549248645
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/54b60c1a.6bbda1b675d00c95.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 70226,
      "wastedBytes": 39279,
      "wastedPercent": 55.933336954602865
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2410-f7e4dfa294fdfa0f.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 40436,
      "wastedBytes": 22253,
      "wastedPercent": 55.03292412560802
    }
  ],
  "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": 160
    }
  },
  "overallSavingsMs": 160,
  "overallSavingsBytes": 198751
}

Use efficient cache lifetimes

Est savings of 131 KiB

A long cache lifetime can speed up repeat visits to your page. Learn more about caching.

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://ph.supabase.com/static/surveys.js?v=1.391.2",
      "totalBytes": 35187,
      "wastedBytes": 23927.159999999996,
      "cacheLifetimeMs": 14400000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3167-484866ee3bef4898.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 106619,
      "wastedBytes": 10661.899999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9147-faf0c6699201f2f3.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 73502,
      "wastedBytes": 7350.199999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/54b60c1a.6bbda1b675d00c95.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 70299,
      "wastedBytes": 7029.899999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/d0d393d5-cd06a51e85f11ccd.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 68341,
      "wastedBytes": 6834.0999999999985,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/css/8808287694c9496d.css?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 67089,
      "wastedBytes": 6708.899999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/84ae39ca-db4a5ea287046f08.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 54775,
      "wastedBytes": 5477.499999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/media/e4af272ccee01ff0-s.p.woff2",
      "totalBytes": 49007,
      "wastedBytes": 4900.699999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2379-53c0641973837d68.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 47739,
      "wastedBytes": 4773.899999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/6509-ef965035d6596bd8.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 44460,
      "wastedBytes": 4445.999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2410-f7e4dfa294fdfa0f.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 40785,
      "wastedBytes": 4078.499999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3592-68b2373e3453ac5b.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 30872,
      "wastedBytes": 3087.1999999999994,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2328-096bd7e7df9dd530.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 27931,
      "wastedBytes": 2793.0999999999995,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://ph.supabase.com/array/phc_q2wUqNSr9AsKvH56PBbg9RX5dGKypQZi1gxk3cuSXJ5/config.js",
      "totalBytes": 3755,
      "wastedBytes": 2553.3999999999996,
      "cacheLifetimeMs": 14400000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/media/4c9affa5bc8f420e-s.p.woff2",
      "totalBytes": 24946,
      "wastedBytes": 2494.5999999999995,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/media/443896d591e4f761-s.p.woff2",
      "totalBytes": 22319,
      "wastedBytes": 2231.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/media/DepartureMonoSuperbase-Regular.f37ac6dd.woff2",
      "totalBytes": 21369,
      "wastedBytes": 2136.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/5900-8bd446aaa009cb24.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 18992,
      "wastedBytes": 1899.1999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3689.09100fd8e49c62d2.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 18239,
      "wastedBytes": 1823.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9813.7bf16bdb62d2144c.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 16080,
      "wastedBytes": 1607.9999999999995,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/912-f4e12d8e13c6edfe.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 15899,
      "wastedBytes": 1589.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9e43655a-1ca1fdf7baa25330.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 14582,
      "wastedBytes": 1458.1999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/database/page-849b3dbb1b2c7caf.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 14159,
      "wastedBytes": 1415.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8071-3f35e8b60f126ac7.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 13923,
      "wastedBytes": 1392.2999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/auth/page-f4e32864e038faab.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 12393,
      "wastedBytes": 1239.2999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8124-96d2dcdf9c3a3c74.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 12329,
      "wastedBytes": 1232.8999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8081-5cc4b385c9d22ed4.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 10685,
      "wastedBytes": 1068.4999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/layout-da5b5d4718f35af6.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 10681,
      "wastedBytes": 1068.0999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9066-6d90408c9ab30632.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 10615,
      "wastedBytes": 1061.4999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8883-5a94f7791b534ab2.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 10009,
      "wastedBytes": 1000.8999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/edge-functions/page-35ba8e52cd68ad14.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 9119,
      "wastedBytes": 911.8999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9955-ea6d888312af3252.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 8863,
      "wastedBytes": 886.2999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://app.usercentrics.eu/session/1px.png?settingsId=650dpbAjfyAypn",
      "totalBytes": 1026,
      "wastedBytes": 884.9250000000001,
      "cacheLifetimeMs": 1800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/storage/page-4f63b8c12f46d6c7.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 8749,
      "wastedBytes": 874.8999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(home)/page-f12cbe26d07f6723.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 8568,
      "wastedBytes": 856.7999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3607-8b080a4c46d10792.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 8060,
      "wastedBytes": 805.9999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8075-f89406600877fbef.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 6765,
      "wastedBytes": 676.4999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/realtime/page-0a6b95467784d0d9.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 6574,
      "wastedBytes": 657.3999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/webpack-a5daa55b77231cb5.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 6455,
      "wastedBytes": 645.4999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/5234-d05c0c700bcc9b15.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 6433,
      "wastedBytes": 643.2999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/4511-fb86cf0e6306f626.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 6376,
      "wastedBytes": 637.5999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3064-20b6290885a0b296.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 5695,
      "wastedBytes": 569.4999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2034.73f91b9f547469e6.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 4932,
      "wastedBytes": 493.1999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8112-1ffc260e8706d66e.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 4577,
      "wastedBytes": 457.6999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/css/440c143c26a742d1.css?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 4032,
      "wastedBytes": 403.19999999999993,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9855-505d0c28d86693f8.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3891,
      "wastedBytes": 389.0999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8304-25fc48de99ea754a.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3854,
      "wastedBytes": 385.3999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/4406.21c000fa4e4012a8.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3461,
      "wastedBytes": 346.0999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/6150-3caef68df9832281.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3420,
      "wastedBytes": 341.99999999999994,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9218-3b7e269d5d401d5f.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3377,
      "wastedBytes": 337.69999999999993,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/not-found-286bfe4c161983b7.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3337,
      "wastedBytes": 333.69999999999993,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(products)/layout-efea3f26940f7937.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 3044,
      "wastedBytes": 304.3999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2423-0a67ef0ed2301c36.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 2953,
      "wastedBytes": 295.29999999999995,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/css/da5dd57b3fb05c7f.css?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 2847,
      "wastedBytes": 284.69999999999993,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9906.b191d111e899d529.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 2127,
      "wastedBytes": 212.69999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3927.76adfdefcb88e649.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 2088,
      "wastedBytes": 208.79999999999995,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9479.76652812bd7cec75.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 1890,
      "wastedBytes": 188.99999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/css/4152cb829a1054a7.css?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 1882,
      "wastedBytes": 188.19999999999996,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/app/(home)/layout-dc448a80136ab8b9.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 1334,
      "wastedBytes": 133.39999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/3205.52eb9e316447ce9d.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 1237,
      "wastedBytes": 123.69999999999997,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/1297.d9cfda3e4cc68b41.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 1104,
      "wastedBytes": 110.39999999999998,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/main-app-94029e68171c6454.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 765,
      "wastedBytes": 76.49999999999999,
      "cacheLifetimeMs": 604800000
    },
    {
      "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/4638.b67a4bbac86cdb1a.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
      "totalBytes": 475,
      "wastedBytes": 47.49999999999999,
      "cacheLifetimeMs": 604800000
    }
  ],
  "headings": [
    {
      "key": "url",
      "label": "Request",
      "valueType": "url"
    },
    {
      "key": "cacheLifetimeMs",
      "label": "Cache TTL",
      "valueType": "ms",
      "displayUnit": "duration"
    },
    {
      "key": "totalBytes",
      "label": "Transfer Size",
      "valueType": "bytes",
      "displayUnit": "kb",
      "granularity": 1
    }
  ],
  "sortedBy": [
    "wastedBytes"
  ],
  "debugData": {
    "type": "debugdata",
    "wastedBytes": 134057.78499999992
  },
  "skipSumming": [
    "cacheLifetimeMs"
  ]
}

Forced reflow

A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about forced reflows and possible mitigations.

Elements & resources
{
  "type": "list",
  "items": [
    {
      "type": "table",
      "items": [
        {
          "source": {
            "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2379-53c0641973837d68.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
            "line": 1,
            "type": "source-location",
            "column": 37731,
            "urlProvider": "network"
          },
          "reflowTime": 113.043
        }
      ],
      "headings": [
        {
          "key": "source",
          "label": "Top function call",
          "valueType": "source-location"
        },
        {
          "key": "reflowTime",
          "label": "Total reflow time",
          "valueType": "ms",
          "granularity": 1
        }
      ]
    },
    {
      "type": "table",
      "items": [
        {
          "source": {
            "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/8124-96d2dcdf9c3a3c74.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
            "line": 0,
            "type": "source-location",
            "column": 27438,
            "urlProvider": "network"
          },
          "reflowTime": 0.049
        },
        {
          "source": {
            "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/5900-8bd446aaa009cb24.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
            "line": 0,
            "type": "source-location",
            "column": 8381,
            "urlProvider": "network"
          },
          "reflowTime": 0.519
        },
        {
          "source": {
            "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/9147-faf0c6699201f2f3.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
            "line": 0,
            "type": "source-location",
            "column": 11327,
            "urlProvider": "network"
          },
          "reflowTime": 112.475
        },
        {
          "source": {
            "url": "https://frontend-assets.supabase.com/www/c6cdf4bd5343/_next/static/chunks/2410-f7e4dfa294fdfa0f.js?dpl=dpl_FYe6Hd7m4FrHmHWzyVBGHePPeBXe",
            "line": 0,
            "type": "source-location",
            "column": 65080,
            "urlProvider": "network"
          },
          "reflowTime": 3.939
        }
      ],
      "headings": [
        {
          "key": "source",
          "label": "Source",
          "valueType": "source-location"
        },
        {
          "key": "reflowTime",
          "label": "Total reflow time",
          "valueType": "ms",
          "granularity": 1
        }
      ]
    }
  ]
}

Improve image delivery

Est savings of 122 KiB

Reducing the download time of images can improve the perceived load time of the page and LCP. Learn more about optimizing image size

Elements & resources
{
  "type": "table",
  "items": [
    {
      "url": "https://supabase.com/images/blog/avatars/bryan-byrne-lovable.jpeg",
      "node": {
        "lhId": "page-4-IMG",
        "path": "2,HTML,1,BODY,10,DIV,0,MAIN,10,SECTION,0,DIV,1,DIV,0,DIV,0,DIV,1,DIV,2,DIV,0,IMG",
        "type": "node",
        "snippet": "<img src=\"/images/blog/avatars/bryan-byrne-lovable.jpeg\" alt=\"Bryan Byrne, Product Manager, Lovable\" class=\"h-6 w-6 rounded-full object-cover shrink-0 ring-1 ring-white/30\">",
        "selector": "div.text-left > div.flex > div.flex > img.h-6",
        "nodeLabel": "Bryan Byrne, Product Manager, Lovable",
        "boundingRect": {
          "top": 5399,
          "left": 44,
          "right": 68,
          "width": 24,
          "bottom": 5423,
          "height": 24
        }
      },
      "subItems": {
        "type": "subitems",
        "items": [
          {
            "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
            "wastedBytes": 18376
          },
          {
            "reason": "This image file is larger than it needs to be (800x800) for its displayed dimensions (24x24). Use responsive images to reduce the image download size.",
            "wastedBytes": 124930
          }
        ]
      },
      "totalBytes": 125043,
      "wastedBytes": 124947
    }
  ],
  "headings": [
    {
      "key": "node",
      "label": "",
      "valueType": "node"
    },
    {
      "key": "url",
      "label": "URL",
      "valueType": "url",
      "subItemsHeading": {
        "key": "reason",
        "valueType": "text"
      }
    },
    {
      "key": "totalBytes",
      "label": "Resource Size",
      "valueType": "bytes"
    },
    {
      "key": "wastedBytes",
      "label": "Est Savings",
      "valueType": "bytes",
      "subItemsHeading": {
        "key": "wastedBytes",
        "valueType": "bytes"
      }
    }
  ],
  "debugData": {
    "type": "debugdata",
    "wastedBytes": 124947
  }
}
Environment & raw metrics
{
  "finalUrl": "https://supabase.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": 8501.454999999998
    },
    {
      "id": "cumulative-layout-shift",
      "unit": "unitless",
      "value": 0.06266969227657461
    },
    {
      "id": "total-blocking-time",
      "unit": "millisecond",
      "value": 505.9999999999991
    },
    {
      "id": "first-contentful-paint",
      "unit": "millisecond",
      "value": 3100.8050000000003
    },
    {
      "id": "speed-index",
      "unit": "millisecond",
      "value": 5240.8823853278545
    }
  ]
}

01 / WHAT WORKS

What makes it work

Panel size expresses product hierarchy

The Postgres Database panel is wider than Authentication and Edge Functions, emphasizing the core instead of assigning identical weight to every feature.

Self-service and sales paths are distinct

The green Start your project action sits beside an outlined Request a demo, differentiating intent as well as visual weight.

02 / NEXT STEPS

Where to go next

  1. 01

    Reduce the mobile event banner footprint

    The event banner wraps onto two mobile lines above the brand navigation, pushing the product introduction downward.

    Keep the event and dismiss action but tighten the date and link layout. Ensure dismissal leaves no gap and verify stable headline and primary-action positions.

03 / DESIGN LANGUAGE

A design system you can reuse

Colors

Background

#fdfdfd

Text

#030303

Accent

#72e3ad

Typography

Display font
Manrope
Body font
Inter
Heading / body
46px / 16px

Spacing & shape

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

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.

Taste1 observations

Reduce the mobile event banner footprint

The event banner wraps onto two mobile lines above the brand navigation, pushing the product introduction downward.

Keep the event and dismiss action but tighten the date and link layout. Ensure dismissal leaves no gap and verify stable headline and primary-action positions.

mobile.png: two-line event banner above navigation
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-05T02:31:53.014Z snapshot of https://supabase.com. First identify changes since capture; do not revert newer behavior to the old snapshot.

Design baseline
Pair the promise and technical explanation in desktop columns, then emphasize the database panel alongside supporting auth and function panels. Stack the sequence and simplify illustrations on mobile.
{
  "colors": [
    {
      "role": "bg",
      "hex": "#fdfdfd"
    },
    {
      "role": "ink",
      "hex": "#030303"
    },
    {
      "role": "accent",
      "hex": "#72e3ad"
    }
  ],
  "fonts": {
    "body": "Inter",
    "display": "Manrope",
    "stack": [
      "Inter",
      "Manrope",
      "Departure Mono Superbase"
    ]
  },
  "radius": {
    "button": "6px",
    "card": "",
    "field": ""
  },
  "space": {
    "section": "0px",
    "card": ""
  },
  "type": {
    "h1": "46px",
    "body": "16px",
    "weight": "500",
    "lineHeight": "24px",
    "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. Reduce the mobile event banner footprint
Keep the event and dismiss action but tighten the date and link layout. Ensure dismissal leaves no gap and verify stable headline and primary-action positions.
Evidence: mobile.png: two-line event banner above navigation

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 “Start your project” 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.