<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="preload" href="/fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin><link rel="icon" type="image/svg+xml" href="/favicon.svg"><title>Psychologist, Psychometrician, Product Builder</title><meta name="title" content="Psychologist, Psychometrician, Product Builder"><meta name="description" content="Blazej Mrozinski, PhD — psychometrician and product leader. I design validated assessments, build SEO systems, and consult where science meets product."><meta name="robots" content="index, follow"><meta name="author" content="Blazej Mrozinski"><meta name="publisher" content="Blazej Mrozinski"><link rel="canonical" href="https://www.blazejmrozinski.com/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://www.blazejmrozinski.com/"><meta property="og:title" content="Psychologist, Psychometrician, Product Builder"><meta property="og:description" content="Blazej Mrozinski, PhD — psychometrician and product leader. I design validated assessments, build SEO systems, and consult where science meets product."><meta property="og:image" content="https://www.blazejmrozinski.com/og-default.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:site_name" content="Blazej Mrozinski"><meta property="og:locale" content="en_US"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:url" content="https://www.blazejmrozinski.com/"><meta name="twitter:title" content="Psychologist, Psychometrician, Product Builder"><meta name="twitter:description" content="Blazej Mrozinski, PhD — psychometrician and product leader. I design validated assessments, build SEO systems, and consult where science meets product."><meta name="twitter:image" content="https://www.blazejmrozinski.com/og-default.png"><!-- Sitemap & RSS --><link rel="sitemap" href="/sitemap-index.xml"><link rel="alternate" type="application/rss+xml" title="Blazej Mrozinski Blog" href="/rss.xml"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://www.blazejmrozinski.com/#website","url":"https://www.blazejmrozinski.com/","name":"Blazej Mrozinski","description":"Personal site of Blazej Mrozinski, PhD — psychologist, psychometrician, product leader.","inLanguage":"en-US","publisher":{"@id":"https://www.blazejmrozinski.com/about/#person"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.blazejmrozinski.com/search/?q={search_term_string}"},"query-input":"required name=search_term_string"}},{"@type":"Person","@id":"https://www.blazejmrozinski.com/about/#person","name":"Blazej Mrozinski","givenName":"Blazej","familyName":"Mrozinski","url":"https://www.blazejmrozinski.com/about/","mainEntityOfPage":{"@id":"https://www.blazejmrozinski.com/about/#profile"},"image":"https://www.blazejmrozinski.com/headshot.png","jobTitle":"Psychologist, Psychometrician, Product Leader, Data Scientist","description":"PhD psychologist and psychometrician building products at the intersection of behavioral science, AI, and growth engineering.","alumniOf":[{"@type":"EducationalOrganization","name":"SWPS University"},{"@type":"EducationalOrganization","name":"London School of Economics"}],"hasCredential":{"@type":"EducationalOccupationalCredential","credentialCategory":"PhD in Psychology","recognizedBy":{"@type":"EducationalOrganization","name":"SWPS University"}},"knowsAbout":["Psychometrics","Item Response Theory","Cognitive Psychology","Social Cognition","Product Management","SEO","AI Workflows","Statistical Modeling"],"worksFor":[{"@type":"Organization","name":"Digital Savages","url":"https://seosavages.com"},{"@type":"Organization","name":"Gyfted / Human Exponent","url":"https://gyfted.me"},{"@type":"Organization","name":"legitnyhr","url":"https://www.legitnyhr.com"},{"@type":"Organization","name":"SWPS University","url":"https://english.swps.pl"}],"sameAs":["https://www.linkedin.com/in/bmrozinski/","https://github.com/b1azk0","https://scholar.google.com/citations?user=RpSeDYwAAAAJ","https://orcid.org/0000-0002-5423-2291"]}]}</script><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.j56hQv-j.js"></script><script>
  (function() {
    function applyTheme() {
      const theme = localStorage.getItem("theme");
      if (theme === "dark") {
        document.documentElement.classList.add("dark");
      } else {
        document.documentElement.classList.remove("dark");
      }
    }
    applyTheme();
    if (!window.__themeSwapInit) {
      window.__themeSwapInit = true;
      document.addEventListener("astro:after-swap", applyTheme);
    }
  })();
</script><script src="https://analytics.ahrefs.com/analytics.js" data-key="qWgVwo9uidCazr1PFSsOYA" async></script><link rel="stylesheet" href="/_astro/Base.DSkq8srJ.css"></head> <body class="min-h-screen flex flex-col antialiased"> <a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 bg-primary text-primary-foreground px-4 py-2 rounded-md font-medium">
Skip to content
</a> <header data-pagefind-ignore class="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"> <div class="container max-w-5xl mx-auto px-4 sm:px-6 flex h-14 items-center justify-between"> <!-- Wordmark --> <a href="/" title="Blazej Mrozinski — Home" class="hover:opacity-80 transition-opacity shrink-0"> <img src="/_astro/logo-light.B1uqV4iN_1tQFix.webp" alt="Blazej Mrozinski" loading="eager" fetchpriority="high" decoding="async" width="82" height="40" class="block dark:hidden"> <img src="/_astro/logo-dark.DNArtOFT_Z10kRQC.webp" alt="Blazej Mrozinski" loading="eager" fetchpriority="high" decoding="async" width="82" height="40" class="hidden dark:block"> </a> <!-- Desktop Navigation --> <nav class="hidden md:flex items-center gap-6 text-sm" aria-label="Main navigation"> <a href="/work/" title="Work" class="transition-colors text-foreground/60 hover:text-foreground/80"> Work </a><a href="/projects/" title="Case Studies" class="transition-colors text-foreground/60 hover:text-foreground/80"> Case Studies </a><a href="/blog/" title="Blog" class="transition-colors text-foreground/60 hover:text-foreground/80"> Blog </a><a href="/publications/" title="Publications" class="transition-colors text-foreground/60 hover:text-foreground/80"> Publications </a><a href="/about/" title="About" class="transition-colors text-foreground/60 hover:text-foreground/80"> About </a><a href="/cv/" title="CV" class="transition-colors text-foreground/60 hover:text-foreground/80"> CV </a><a href="/contact/" title="Contact" class="transition-colors text-foreground/60 hover:text-foreground/80"> Contact </a> </nav> <!-- Desktop Actions --> <div class="hidden md:flex items-center space-x-2"> <button class="theme-toggle inline-flex items-center justify-center rounded-md h-9 w-9 text-foreground/60 hover:text-foreground hover:bg-accent transition-colors" type="button" role="switch" aria-checked="false" aria-label="Dark mode" data-astro-cid-x3pjskd3> <svg class="sun-icon h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-x3pjskd3> <circle cx="12" cy="12" r="4" data-astro-cid-x3pjskd3></circle> <path d="M12 2v2" data-astro-cid-x3pjskd3></path> <path d="M12 20v2" data-astro-cid-x3pjskd3></path> <path d="m4.93 4.93 1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="m17.66 17.66 1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="M2 12h2" data-astro-cid-x3pjskd3></path> <path d="M20 12h2" data-astro-cid-x3pjskd3></path> <path d="m6.34 17.66-1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="m19.07 4.93-1.41 1.41" data-astro-cid-x3pjskd3></path> </svg> <svg class="moon-icon h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-x3pjskd3> <path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" data-astro-cid-x3pjskd3></path> </svg> </button>  <script type="module">function o(){const e=document.documentElement.classList.contains("dark");document.querySelectorAll(".theme-toggle").forEach(t=>{t.setAttribute("aria-checked",String(e)),t.setAttribute("aria-label",e?"Switch to light mode":"Switch to dark mode")})}function n(){o(),document.querySelectorAll(".theme-toggle").forEach(e=>{const t=e.cloneNode(!0);e.replaceWith(t),t.addEventListener("click",()=>{document.documentElement.classList.contains("dark")?(document.documentElement.classList.remove("dark"),localStorage.setItem("theme","light")):(document.documentElement.classList.add("dark"),localStorage.setItem("theme","dark")),o()})})}n();window.__themeToggleInit||(window.__themeToggleInit=!0,document.addEventListener("astro:after-swap",n));</script> </div> <!-- Mobile Actions --> <div class="flex md:hidden items-center space-x-2"> <button class="theme-toggle inline-flex items-center justify-center rounded-md h-9 w-9 text-foreground/60 hover:text-foreground hover:bg-accent transition-colors" type="button" role="switch" aria-checked="false" aria-label="Dark mode" data-astro-cid-x3pjskd3> <svg class="sun-icon h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-x3pjskd3> <circle cx="12" cy="12" r="4" data-astro-cid-x3pjskd3></circle> <path d="M12 2v2" data-astro-cid-x3pjskd3></path> <path d="M12 20v2" data-astro-cid-x3pjskd3></path> <path d="m4.93 4.93 1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="m17.66 17.66 1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="M2 12h2" data-astro-cid-x3pjskd3></path> <path d="M20 12h2" data-astro-cid-x3pjskd3></path> <path d="m6.34 17.66-1.41 1.41" data-astro-cid-x3pjskd3></path> <path d="m19.07 4.93-1.41 1.41" data-astro-cid-x3pjskd3></path> </svg> <svg class="moon-icon h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-x3pjskd3> <path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" data-astro-cid-x3pjskd3></path> </svg> </button>   <button id="mobile-menu-button" class="inline-flex items-center justify-center rounded-md p-2 hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-2 focus:ring-inset focus:ring-primary" aria-expanded="false" aria-label="Toggle navigation menu"> <div class="w-6 h-6 relative flex flex-col justify-center items-center"> <span id="hamburger-top" class="block w-5 h-0.5 bg-current transform transition-all duration-300 absolute -translate-y-1.5"></span> <span id="hamburger-middle" class="block w-5 h-0.5 bg-current transform transition-all duration-300"></span> <span id="hamburger-bottom" class="block w-5 h-0.5 bg-current transform transition-all duration-300 absolute translate-y-1.5"></span> </div> </button> </div> </div> <!-- Mobile Menu --> <nav id="mobile-menu" class="hidden md:hidden border-t bg-background" aria-label="Mobile navigation"> <div class="container max-w-5xl mx-auto px-4 py-4 space-y-1"> <a href="/work/" title="Work" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> Work </a><a href="/projects/" title="Case Studies" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> Case Studies </a><a href="/blog/" title="Blog" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> Blog </a><a href="/publications/" title="Publications" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> Publications </a><a href="/about/" title="About" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> About </a><a href="/cv/" title="CV" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> CV </a><a href="/contact/" title="Contact" class="block px-3 py-2 rounded-md text-base font-medium transition-colors hover:bg-accent hover:text-accent-foreground"> Contact </a> <button id="mobile-menu-close" class="block w-full text-center px-3 py-2 mt-2 rounded-md text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-colors border">
Close menu
</button> </div> </nav> </header> <script type="module">function l(){const e=document.getElementById("mobile-menu-button"),a=document.getElementById("mobile-menu"),s=document.getElementById("hamburger-top"),i=document.getElementById("hamburger-middle"),n=document.getElementById("hamburger-bottom");function d(t){t?(s?.classList.add("rotate-45","translate-y-0"),s?.classList.remove("-translate-y-1.5"),i?.classList.add("opacity-0","scale-0"),n?.classList.add("-rotate-45","translate-y-0"),n?.classList.remove("translate-y-1.5")):(s?.classList.remove("rotate-45","translate-y-0"),s?.classList.add("-translate-y-1.5"),i?.classList.remove("opacity-0","scale-0"),n?.classList.remove("-rotate-45","translate-y-0"),n?.classList.add("translate-y-1.5"))}e?.addEventListener("click",()=>{const t=e.getAttribute("aria-expanded")==="true";a?.classList.toggle("hidden"),d(!t),e.setAttribute("aria-expanded",String(!t))}),a?.querySelectorAll("a")?.forEach(t=>{t.addEventListener("click",()=>{a?.classList.add("hidden"),d(!1),e?.setAttribute("aria-expanded","false")})}),document.getElementById("mobile-menu-close")?.addEventListener("click",()=>{a?.classList.add("hidden"),d(!1),e?.setAttribute("aria-expanded","false")}),document.addEventListener("keydown",t=>{t.key==="Escape"&&e?.getAttribute("aria-expanded")==="true"&&(a?.classList.add("hidden"),d(!1),e?.setAttribute("aria-expanded","false"),e?.focus())})}l();document.addEventListener("astro:after-swap",l);</script> <main id="main-content" class="flex-1 w-full">  <nav class="hidden md:flex fixed right-4 lg:right-6 top-1/2 -translate-y-1/2 z-40 flex-col items-end gap-3" aria-label="Page sections"><a href="#services" class="section-dot group flex items-center gap-2" data-heading-id="services" title="What I Can Help With"><span class="text-xs text-muted-foreground whitespace-nowrap">What I Can Help With</span><span class="dot-indicator block w-1.5 h-1.5 rounded-full bg-muted-foreground/40 transition-all duration-200"></span></a><a href="#case-studies" class="section-dot group flex items-center gap-2" data-heading-id="case-studies" title="Case Studies"><span class="text-xs text-muted-foreground whitespace-nowrap">Case Studies</span><span class="dot-indicator block w-1.5 h-1.5 rounded-full bg-muted-foreground/40 transition-all duration-200"></span></a><a href="#companies" class="section-dot group flex items-center gap-2" data-heading-id="companies" title="Companies"><span class="text-xs text-muted-foreground whitespace-nowrap">Companies</span><span class="dot-indicator block w-1.5 h-1.5 rounded-full bg-muted-foreground/40 transition-all duration-200"></span></a><a href="#writing" class="section-dot group flex items-center gap-2" data-heading-id="writing" title="Writing"><span class="text-xs text-muted-foreground whitespace-nowrap">Writing</span><span class="dot-indicator block w-1.5 h-1.5 rounded-full bg-muted-foreground/40 transition-all duration-200"></span></a><a href="#book" class="section-dot group flex items-center gap-2" data-heading-id="book" title="Let's Talk"><span class="text-xs text-muted-foreground whitespace-nowrap">Let&#39;s Talk</span><span class="dot-indicator block w-1.5 h-1.5 rounded-full bg-muted-foreground/40 transition-all duration-200"></span></a></nav><script type="module">function l(){const n=document.querySelectorAll(".section-dot");if(!n.length)return;const o=Array.from(n).map(e=>e.dataset.headingId).map(e=>document.getElementById(e)).filter(Boolean);if(!o.length)return;function d(e){n.forEach(t=>{const r=t.querySelector(".dot-indicator");t.dataset.headingId===e?(r.classList.remove("w-1.5","h-1.5","bg-muted-foreground/40"),r.classList.add("w-2","h-2","bg-primary")):(r.classList.remove("w-2","h-2","bg-primary"),r.classList.add("w-1.5","h-1.5","bg-muted-foreground/40"))})}const s=new IntersectionObserver(e=>{for(const t of e)if(t.isIntersecting){d(t.target.id);break}},{rootMargin:"0px 0px -70% 0px",threshold:0});o.forEach(e=>s.observe(e));const c=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return n.forEach(e=>{e.addEventListener("click",t=>{t.preventDefault();const r=e.dataset.headingId;document.getElementById(r)?.scrollIntoView({behavior:c?"auto":"smooth"}),history.replaceState(null,"",`#${r}`)})}),()=>s.disconnect()}let i;function a(){i?.(),i=l()}a();document.addEventListener("astro:after-swap",a);</script>  <section class="py-20 md:py-28" data-animate> <div class="container max-w-5xl mx-auto px-4 sm:px-6 text-center"> <img src="/_astro/headshot.BPjNcVzg_Z19DdMH.webp" alt="Blazej Mrozinski" loading="eager" fetchpriority="high" decoding="async" width="80" height="80" class="rounded-full mx-auto mb-6 opacity-90"> <h1 class="text-5xl md:text-7xl font-bold tracking-tight mb-2">
Blazej Mrozinski, PhD
</h1> <p class="text-lg md:text-xl italic text-muted-foreground max-w-2xl mx-auto mb-4">
Science gives us clarity, but product work gives it purpose.
</p> <p class="text-xl md:text-2xl text-muted-foreground max-w-2xl mx-auto mb-4">
Psychologist · Psychometrician · Product Leader · Data Scientist
</p> <p class="text-base text-muted-foreground max-w-2xl mx-auto mb-8 leading-relaxed">
I'm a psychometrician and product designer with a PhD in social cognition who spent twenty years in the lab studying how people think — then started building products that use that science. Think of me as a human translator between science and product — curious by default, never fully satisfied with easy answers.
</p> <div class="flex gap-4 justify-center flex-wrap"> <a href="#book" class="inline-flex items-center justify-center rounded-md text-sm font-medium h-11 px-8 bg-primary text-primary-foreground hover:bg-primary/90 transition-colors">
Book a Call
</a> <a href="#services" class="inline-flex items-center justify-center rounded-md text-sm font-medium h-11 px-8 border hover:bg-accent hover:text-accent-foreground transition-colors">
What I Do
</a> </div> </div> </section>  <section id="services" class="section-muted py-16"> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <div class="text-center mb-10" data-animate> <h2 class="text-3xl md:text-4xl font-bold tracking-tight">What I Can Help With</h2> <p class="text-muted-foreground mt-2">Problems I solve — as an independent consultant or through my companies</p> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-6"> <div class="rounded-lg border bg-card text-card-foreground p-6" data-animate data-delay="1"> <h3 class="font-semibold text-lg mb-2">Psychometric Assessment &amp; Matching</h3> <p class="text-sm text-muted-foreground leading-relaxed mb-4">Career quizzes, competency batteries, personality instruments, cognitive ability tests — designed with IRT and CTT, validated before deployment. Plus the scoring and matching systems that make results actionable. Used by LSEG, EPAM, and HSE Ireland.</p> <a href="/work/gyfted/" class="text-sm font-medium text-foreground hover:text-primary/80 transition-colors inline-flex items-center gap-1"> See Gyfted <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div><div class="rounded-lg border bg-card text-card-foreground p-6" data-animate data-delay="2"> <h3 class="font-semibold text-lg mb-2">Growth Engineering &amp; SEO</h3> <p class="text-sm text-muted-foreground leading-relaxed mb-4">Programmatic SEO at scale (1,200+ pages for Prawomat, 1.2M users for Gyfted), AI/LLM optimization for ChatGPT and Google AI Overviews, and product-led growth systems. Zero paid spend — all organic, all compounding.</p> <a href="/work/digital-savages/" class="text-sm font-medium text-foreground hover:text-primary/80 transition-colors inline-flex items-center gap-1"> See Digital Savages <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div><div class="rounded-lg border bg-card text-card-foreground p-6" data-animate data-delay="3"> <h3 class="font-semibold text-lg mb-2">Product Consulting</h3> <p class="text-sm text-muted-foreground leading-relaxed mb-4">From concept to production — scoping, specification, and product direction for assessment platforms, workforce development systems, AI editorial tools, and legal tech. I lead product, engineering teams handle code.</p> <a href="/work/" class="text-sm font-medium text-foreground hover:text-primary/80 transition-colors inline-flex items-center gap-1"> See my work <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div><div class="rounded-lg border bg-card text-card-foreground p-6" data-animate data-delay="4"> <h3 class="font-semibold text-lg mb-2">Statistical Modeling &amp; Research</h3> <p class="text-sm text-muted-foreground leading-relaxed mb-4">SEM, multilevel modeling, latent class analysis for complex research. Published in JPSP, Self and Identity, Frontiers in Psychology. Teaching stats and research methods at SWPS University since 2006.</p> <a href="/work/swps-university/" class="text-sm font-medium text-foreground hover:text-primary/80 transition-colors inline-flex items-center gap-1"> See SWPS <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div> </div> </div> </section>  <section class="py-16 border-t" data-animate="fade"> <div class="container max-w-3xl mx-auto px-4 sm:px-6 text-center"> <h2 class="text-sm font-semibold text-muted-foreground uppercase tracking-wider mb-4">Why these worlds belong together</h2> <p class="text-xl md:text-2xl text-muted-foreground leading-relaxed">
Psychometrics, product consulting, growth engineering, and statistical modeling sit on the same page because they run on the same engine: measurement, systems thinking, and turning fuzzy human problems into testable product logic. The gap between "we think this works" and "we measured that this works" is where most products fail — and where all of this work lives.
</p> </div> </section>  <section class="section-muted py-16" data-animate> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-center"> <div> <p class="text-3xl md:text-4xl font-bold">15</p> <p class="text-sm text-muted-foreground mt-1">Peer-Reviewed Papers</p> </div> <div> <p class="text-3xl md:text-4xl font-bold">4</p> <p class="text-sm text-muted-foreground mt-1">Ventures Co-Founded</p> </div> <div> <p class="text-3xl md:text-4xl font-bold">7+</p> <p class="text-sm text-muted-foreground mt-1">Products Shipped</p> </div> <div> <p class="text-3xl md:text-4xl font-bold">20+</p> <p class="text-sm text-muted-foreground mt-1">Years in Academia</p> </div> </div> </div> </section>  <section class="section-muted py-12" data-animate> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <p class="text-center text-sm font-semibold text-muted-foreground uppercase tracking-wider mb-5">Selected clients & partners</p> <div class="flex flex-wrap justify-center gap-x-10 gap-y-3 text-base font-medium text-foreground/60"> <span>LSEG</span> <span>EPAM</span> <span>gr8.tech</span> <span>Relativity</span> <span>HSE Ireland</span> <span>UCL</span> <span>esportsLABgg</span> </div> </div> </section>  <section id="case-studies" class="py-16"> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <div class="text-center mb-10" data-animate> <h2 class="text-3xl md:text-4xl font-bold tracking-tight">Case Studies</h2> <p class="text-muted-foreground mt-2">How I approach problems — the methodology, the results, and what I learned</p> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 max-w-4xl mx-auto"> <div data-animate data-delay="1"> <a href="/projects/prawomat/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <p class="font-semibold group-hover:text-primary/80 transition-colors">Prawomat</p> <div class="flex gap-2 shrink-0"> <span class="text-xs bg-primary text-primary-foreground px-2.5 py-1 rounded-full">Case Study</span> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> Legal Tech · SEO </span> </div> </div> <p class="text-sm text-muted-foreground mt-2 leading-relaxed">Poland&#39;s first AI-powered legal document generator — grown from zero to 1,700+ indexed pages and 9,000+ documents generated through programmatic SEO.</p> </a> </div><div data-animate data-delay="2"> <a href="/projects/hse-career-quiz/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <p class="font-semibold group-hover:text-primary/80 transition-colors">HSE Career Quiz</p> <div class="flex gap-2 shrink-0"> <span class="text-xs bg-primary text-primary-foreground px-2.5 py-1 rounded-full">Case Study</span> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> Psychometrics </span> </div> </div> <p class="text-sm text-muted-foreground mt-2 leading-relaxed">Career interest assessment for Irish school leavers built on IRT and CTT. Designed by Blazej Mrozinski — 30 items, 9 career clusters.</p> </a> </div><div data-animate data-delay="3"> <a href="/projects/new-aggregator/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <p class="font-semibold group-hover:text-primary/80 transition-colors">News Aggregator</p> <div class="flex gap-2 shrink-0"> <span class="text-xs bg-primary text-primary-foreground px-2.5 py-1 rounded-full">Case Study</span> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> Content Automation · WordPress · SEO </span> </div> </div> <p class="text-sm text-muted-foreground mt-2 leading-relaxed">AI-powered content engine that crawls news sources, generates SEO-optimized commentary, and publishes to WordPress with quality scoring, scheduling, and.</p> </a> </div><div data-animate data-delay="4"> <a href="/projects/legitnyhr-app/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <p class="font-semibold group-hover:text-primary/80 transition-colors">legitnyhr App</p> <div class="flex gap-2 shrink-0"> <span class="text-xs bg-primary text-primary-foreground px-2.5 py-1 rounded-full">Case Study</span> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> Compliance Tech · Internal Tooling </span> </div> </div> <p class="text-sm text-muted-foreground mt-2 leading-relaxed">Internal consultant tool for end-to-end job-evaluation engagements — methodology design, JD scoring, grading, worker categories, GPG report, and PDF.</p> </a> </div> </div> <div class="text-center mt-6"> <a href="/projects/" class="text-sm font-medium text-muted-foreground hover:text-foreground transition-colors">
View all case studies &rarr;
</a> </div> </div> </section> <section class="py-12" data-animate="fade"> <div class="container max-w-3xl mx-auto px-4 sm:px-6 text-center"> <blockquote class="text-xl md:text-2xl italic text-muted-foreground leading-relaxed">
"I'm not a developer. I'm a psychologist who builds products. The science disappears into the product — that's the point."
</blockquote> </div> </section>  <section id="companies" class="section-muted py-16" data-animate> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <div class="text-center mb-10"> <h2 class="text-3xl md:text-4xl font-bold tracking-tight">Companies</h2> <p class="text-muted-foreground mt-2">Things I started, run, or helped build from the ground up</p> </div> <div class="grid grid-cols-1 sm:grid-cols-2 gap-4"> <div data-animate data-delay="1"> <a href="/work/digital-savages/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <div> <p class="font-semibold group-hover:text-primary/80 transition-colors">Digital Savages</p> <p class="text-sm text-muted-foreground mt-1">Co-founder</p> </div> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full shrink-0"> Growth &amp; SEO </span> </div> </a> </div><div data-animate data-delay="2"> <a href="/work/gyfted/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <div> <p class="font-semibold group-hover:text-primary/80 transition-colors">Gyfted / Human Exponent</p> <p class="text-sm text-muted-foreground mt-1">Co-founder, Chief of Product &amp; Psychometrics</p> </div> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full shrink-0"> AI Psychometrics </span> </div> </a> </div><div data-animate data-delay="3"> <a href="/work/legitnyhr/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <div> <p class="font-semibold group-hover:text-primary/80 transition-colors">legitnyhr</p> <p class="text-sm text-muted-foreground mt-1">Co-founder</p> </div> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full shrink-0"> Compliance &amp; HR Tech </span> </div> </a> </div><div data-animate data-delay="4"> <a href="/work/swps-university/" class="group block rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"> <div class="flex items-start justify-between gap-4"> <div> <p class="font-semibold group-hover:text-primary/80 transition-colors">SWPS University</p> <p class="text-sm text-muted-foreground mt-1">Adjunct, Dept. of Psychological Research Methodology</p> </div> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full shrink-0"> Academia </span> </div> </a> </div> </div> </div> </section>  <section id="writing" class="py-16" data-animate> <div class="container max-w-5xl mx-auto px-4 sm:px-6"> <div class="text-center mb-10"> <h2 class="text-3xl md:text-4xl font-bold tracking-tight">Writing</h2> <p class="text-muted-foreground mt-2">AI as CTO · infrastructure from scratch · psychometrics in production · growth systems · rigorous experimentation</p> </div> <div class="grid gap-4 max-w-3xl mx-auto"> <div data-animate data-delay="1"> <article class="group rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all" data-tags="psychometrics-meets-tech,quantitative-research,operator-lessons"> <a href="/blog/discriminant-validity-new-construct-or-renamed/" class="block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"> <h3 class="font-bold tracking-tight group-hover:text-primary/80 transition-colors text-2xl"> Discriminant Validity in Practice: How to Tell a New Construct From a Renamed One </h3> </a> <p class="text-sm text-muted-foreground mt-2 leading-relaxed"> Trust ambiguity, grit, and the test that separates a real construct from a relabel. Convergent and discriminant validity in practice, with a worked example. </p> <div class="flex items-center gap-3 mt-4 flex-wrap"> <time class="text-xs text-muted-foreground" datetime="2026-06-02T00:00:00.000Z"> Jun 2, 2026 </time>  <div class="flex gap-1.5 flex-wrap"> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> psychometrics-meets-tech </span><span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> quantitative-research </span><span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> operator-lessons </span> </div> </div> </article> </div><div data-animate data-delay="2"> <article class="group rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all" data-tags="psychometrics-meets-tech,operator-lessons"> <a href="/blog/leader-traits-have-scales-uncertainty-agency/" class="block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"> <h3 class="font-bold tracking-tight group-hover:text-primary/80 transition-colors text-lg"> Tolerance for Ambiguity, Locus of Control, and What These Leader Traits Actually Measure </h3> </a> <p class="text-sm text-muted-foreground mt-2 leading-relaxed"> Two HBR articles invoke leader traits as advice. The scales exist: IUS-12, tolerance for ambiguity, locus of control. What they actually predict for executives. </p> <div class="flex items-center gap-3 mt-4 flex-wrap"> <time class="text-xs text-muted-foreground" datetime="2026-05-22T00:00:00.000Z"> May 22, 2026 </time>  <div class="flex gap-1.5 flex-wrap"> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> psychometrics-meets-tech </span><span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> operator-lessons </span> </div> </div> </article> </div><div data-animate data-delay="3"> <article class="group rounded-lg border bg-card text-card-foreground p-6 hover:shadow-md transition-all" data-tags="psychometrics-meets-tech,operator-lessons,quantitative-research"> <a href="/blog/popular-leadership-constructs-actual-measurement/" class="block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"> <h3 class="font-bold tracking-tight group-hover:text-primary/80 transition-colors text-lg"> Three Popular Leadership Constructs Through the Lens of Their Actual Scales </h3> </a> <p class="text-sm text-muted-foreground mt-2 leading-relaxed"> Wise empathy SJT, Edmondson&#39;s psychological safety scale in human-AI teams, and the contested ALQ. What three leadership constructs actually measure. </p> <div class="flex items-center gap-3 mt-4 flex-wrap"> <time class="text-xs text-muted-foreground" datetime="2026-05-18T00:00:00.000Z"> May 18, 2026 </time>  <div class="flex gap-1.5 flex-wrap"> <span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> psychometrics-meets-tech </span><span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> operator-lessons </span><span class="text-xs bg-secondary text-secondary-foreground px-2.5 py-1 rounded-full"> quantitative-research </span> </div> </div> </article> </div> <div class="text-center mt-4"> <a href="/blog/" class="text-sm font-medium text-muted-foreground hover:text-foreground transition-colors">
View all posts &rarr;
</a> </div> </div> </div> </section>  <section class="section-muted py-12" data-animate> <div class="container max-w-3xl mx-auto px-4 sm:px-6 text-center"> <p class="text-sm font-semibold text-muted-foreground uppercase tracking-wider mb-4">Not ready to talk yet? Start here instead.</p> <div class="flex gap-3 justify-center flex-wrap"> <a href="/about/#what-i-actually-do" class="text-sm font-medium px-4 py-2 rounded-full bg-secondary text-secondary-foreground hover:bg-accent transition-colors inline-flex items-center gap-1.5">
How I work
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> <a href="/work/" class="text-sm font-medium px-4 py-2 rounded-full bg-secondary text-secondary-foreground hover:bg-accent transition-colors inline-flex items-center gap-1.5">
See selected projects
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> <a href="/blog/" class="text-sm font-medium px-4 py-2 rounded-full bg-secondary text-secondary-foreground hover:bg-accent transition-colors inline-flex items-center gap-1.5">
Read the blog
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div> </div> </section>  <section id="book" class="section-inverted py-16" data-animate> <div class="container max-w-3xl mx-auto px-4 sm:px-6 text-center"> <h2 class="text-3xl md:text-4xl font-bold tracking-tight mb-3">Let's talk</h2> <p class="text-muted-foreground mb-8 max-w-lg mx-auto leading-relaxed">
If any of this maps to a problem you're working on — pick a 30-minute slot. No pitch, no deck. Just a conversation about what you're trying to solve.
</p> <div class="flex gap-4 justify-center flex-wrap mb-8"> <a href="https://app.reclaim.ai/m/blazej/virtual-coffee" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center rounded-md text-sm font-medium h-11 px-8 bg-primary text-primary-foreground hover:bg-primary/90 transition-colors gap-2"> <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path> </svg>
Book 30 Minutes
</a> <a href="/contact/" class="inline-flex items-center justify-center rounded-md text-sm font-medium h-11 px-8 border border-input hover:bg-accent hover:text-accent-foreground transition-colors">
Or Send a Message
</a> </div> <p class="text-xs text-muted-foreground">Prefer email? Drop a line below — I read everything.</p> <div class="flex justify-center mt-4"> <form action="https://api.web3forms.com/submit" method="POST" class="flex gap-2 items-center max-w-lg"> <input type="hidden" name="access_key" value="cf967f81-97f2-40b1-aa99-2df8749e6369"> <input type="hidden" name="subject" value="Newsletter signup — blazejmrozinski.com homepage"> <input type="hidden" name="from_name" value="blazejmrozinski.com homepage form"> <input type="hidden" name="redirect" value="https://blazejmrozinski.com/thanks"> <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off"> <label for="contact-email" class="sr-only">Email address</label> <input type="email" id="contact-email" name="email" required placeholder="your@email.com" aria-label="Email address" class="flex-1 h-10 px-3 text-sm rounded-md border border-input bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background"> <button type="submit" class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium h-10 px-4 bg-primary text-primary-foreground hover:bg-primary/90 transition-colors">
Send
</button> </form> </div> </div> </section>  </main> <footer class="border-t bg-background" data-pagefind-ignore> <div class="container max-w-5xl mx-auto px-4 sm:px-6 py-12"> <div class="grid grid-cols-2 gap-8 md:grid-cols-4"> <!-- Brand --> <div class="col-span-2 md:col-span-1"> <a href="/" title="Blazej Mrozinski — Home" class="inline-block hover:opacity-80 transition-opacity"> <img src="/_astro/logo-light.B1uqV4iN_ZOVciP.webp" alt="Blazej Mrozinski" loading="lazy" decoding="async" width="163" height="80" class="block dark:hidden"> <img src="/_astro/logo-dark.DNArtOFT_Z26dQl8.webp" alt="Blazej Mrozinski" loading="lazy" decoding="async" width="163" height="80" class="hidden dark:block"> </a> <p class="mt-3 text-sm text-muted-foreground leading-relaxed">
Psychologist, psychometrician, product builder. Building at the intersection of cognitive science, AI, and growth engineering.
</p> <a href="/changelog/" class="inline-block mt-2 text-[11px] text-muted-foreground/70 hover:text-muted-foreground transition-colors">
v0.15.9 · <span class="underline underline-offset-2">view changelog</span> </a> </div> <!-- Pages --> <nav aria-label="Footer navigation"> <p class="font-semibold mb-4 text-sm">Pages</p> <ul class="space-y-2"> <li> <a href="/work/" title="Work" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Work </a> </li><li> <a href="/projects/" title="Case Studies" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Case Studies </a> </li><li> <a href="/blog/" title="Blog" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Blog </a> </li><li> <a href="/publications/" title="Publications" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Publications </a> </li><li> <a href="/glossary/" title="Glossary" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Glossary </a> </li><li> <a href="/search/" title="Search" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Search </a> </li><li> <a href="/about/" title="About" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> About </a> </li><li> <a href="/cv/" title="CV" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> CV </a> </li><li> <a href="/changelog/" title="Changelog" class="text-sm text-muted-foreground hover:text-foreground transition-colors"> Changelog </a> </li> </ul> </nav> <!-- Connect --> <div> <p class="font-semibold mb-4 text-sm">Connect</p> <ul class="space-y-2"> <li> <a href="https://www.linkedin.com/in/bmrozinski/" title="LinkedIn" target="_blank" rel="noopener noreferrer" class="text-sm text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1"> LinkedIn <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li><li> <a href="https://github.com/b1azk0" title="GitHub" target="_blank" rel="noopener noreferrer" class="text-sm text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1"> GitHub <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li><li> <a href="https://scholar.google.com/citations?user=RpSeDYwAAAAJ" title="Google Scholar" target="_blank" rel="noopener noreferrer" class="text-sm text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1"> Google Scholar <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li><li> <a href="https://orcid.org/0000-0002-5423-2291" title="ORCID" target="_blank" rel="noopener noreferrer" class="text-sm text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1"> ORCID <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li> </ul> </div> <!-- Contact --> <div> <p class="font-semibold mb-4 text-sm">Get in Touch</p> <p class="text-sm text-muted-foreground">
Interested in working together?
</p> <a href="/contact/" title="Contact me" class="inline-flex items-center gap-2 mt-3 text-sm font-medium text-foreground hover:text-primary transition-colors">
Contact me
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> </svg> </a> </div> </div> <div class="mt-8 border-t pt-8 text-center text-sm text-muted-foreground"> <p>&copy; 2026 Blazej Mrozinski. All rights reserved.</p> </div> </div> </footer> <script>
      (function() {
        // Initialize dataLayer and gtag function
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}

        // Set default consent: basic analytics allowed, ads denied until consent
        gtag('consent', 'default', {
          ad_user_data: 'denied',
          ad_personalization: 'denied',
          ad_storage: 'denied',
          analytics_storage: 'granted'
        });

        // Load gtag.js immediately (consent mode handles blocking)
        var gtagScript = document.createElement('script');
        gtagScript.async = true;
        gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-FLKVTLL23M';
        var firstScript = document.getElementsByTagName('script')[0];
        firstScript.parentNode.insertBefore(gtagScript, firstScript);

        gtag('js', new Date());
        gtag('config', 'G-FLKVTLL23M');

        // Check stored consent
        var CONSENT_KEY = 'analytics-consent';
        var consentValue = localStorage.getItem(CONSENT_KEY);

        if (consentValue === 'accepted') {
          gtag('consent', 'update', {
            ad_user_data: 'granted',
            ad_personalization: 'granted',
            ad_storage: 'granted',
            analytics_storage: 'granted'
          });
        }

        if (!consentValue) {
          var banner = document.getElementById('cookie-consent-banner');
          if (banner) banner.classList.remove('hidden');
        }

        window.acceptCookies = function() {
          localStorage.setItem(CONSENT_KEY, 'accepted');
          gtag('consent', 'update', {
            ad_user_data: 'granted',
            ad_personalization: 'granted',
            ad_storage: 'granted',
            analytics_storage: 'granted'
          });
          var banner = document.getElementById('cookie-consent-banner');
          if (banner) banner.remove();
        };

        window.declineCookies = function() {
          localStorage.setItem(CONSENT_KEY, 'declined');
          var banner = document.getElementById('cookie-consent-banner');
          if (banner) banner.remove();
        };
      })();
    </script><div id="cookie-consent-banner" class="hidden fixed bottom-0 left-0 right-0 z-50 border-t bg-card text-card-foreground p-4 md:p-6 flex flex-col md:flex-row md:items-center md:justify-between gap-4 shadow-lg"><p class="text-sm">
We use cookies to enhance your experience. This site uses Google Analytics to understand how you use it.
</p><div class="flex gap-3 shrink-0"><button onclick="window.declineCookies()" class="px-4 py-2 text-sm font-medium rounded-md border hover:bg-accent transition-colors">
Decline
</button><button onclick="window.acceptCookies()" class="px-4 py-2 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors">
Accept
</button></div></div> <script type="module">function i(){const t=document.querySelectorAll("[data-animate]");if(!t.length)return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){t.forEach(e=>e.classList.add("is-visible"));return}const s=new IntersectionObserver(e=>{e.forEach(r=>{r.isIntersecting&&(r.target.classList.add("is-visible"),s.unobserve(r.target))})},{threshold:.1,rootMargin:"0px 0px -50px 0px"});t.forEach(e=>s.observe(e))}i();document.addEventListener("astro:after-swap",i);</script> <!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d554caae92334a8ea15fef9ced082c00"}'></script><!-- Cloudflare Pages Analytics --></body></html>