PageSourceSearch

https://srini.codes/assets/index-4004d077.js

js srini.codes collected 2026-10-08 01:13:09 UTC 63,492 bytes, 87 lines download raw bytes

vendor: 4,879 bytes, line 1
1import{j as e,L as h,r as c,u as U,_ as y,B as O,R as $,a as b,b as W,c as H}from"./react-vendor-01a8f52a.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const o of n)if(o.type==="childList")for(const d of o.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&a(d)}).observe(document,{childList:!0,subtree:!0});function i(n){const o={};return n.integrity&&(o.integrity=n.integrity),n.referrerPolicy&&(o.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?o.credentials="include":n.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(n){if(n.ep)return;n.ep=!0;const o=i(n);fetch(n.href,o)}})();const z=[{title:"TechXpresso Chennai 2026",description:"Testing Autonomous AI Agents: Beyond Traditional QA",imageURL:"",url:"",reverse:!1,tags:["AI","Agents","Testing","Quality"]},{title:"NullCon Goa 2026",description:"Hacking with AI: MCP for Security Testing",imageURL:"",url:"",reverse:!1,tags:["AI","MCP","Security","Testing"]},{title:"Automation Guild 2026",description:"Testing Autonomous AI Agents: A QA Practitioner's Guide",imageURL:"",url:"https://testguild.com/automation-guild-2026/",reverse:!0,tags:["AI","Agents","Testing","Quality"]},{title:"TestCon Europe 2025",description:"Testing Agentic AI Applications: Beyond Traditional QA",imageURL:"",url:"https://www.testconeurope.com/",reverse:!1,tags:["AI","Agentic","Testing","Quality"]},{title:"TestMu Conf 2025",description:"Mastering Appium 3: Architecture, Gestures & Beyond and Testing the Untestable: QA Strategies for Autonomous AI Agents",imageURL:"",url:"https://www.testmuai.com/testmuconf-2025/",reverse:!0,tags:["AI","Appium","MCP","Agents"]},{title:"SeleniumConf & AppiumConf Valencia 2025",description:"Beyond DOM: Leveraging Open-Source LLMs in an AI-Powered Appium Plugin",imageURL:"",url:"https://youtu.be/lugEm6j1Nl8",reverse:!1,tags:["Mobile","Appium","AI","LLM"]},{title:"Nordic Testing Days 2025",description:"Advanced Appium Workshop: Simplifying Mobile Test Automation",imageURL:"",url:"https://nordictestingdays.eu/",reverse:!0,tags:["Mobile","Appium","Testing","Workshop"]},{title:"Spartans Summit 2025",description:"Building and Testing AI-Agent Powered LLM Applications",imageURL:"",url:"https://www.youtube.com/watch?v=9mHfvGN7FwU",reverse:!1,tags:["AI","LLM","Agents","Testing"]},{title:"HUSTEF 2024",description:"Mobile App Crashes in Production: Lessons Learned from a Tester's Viewpoint",imageURL:"",url:"https://hustef.com/",reverse:!0,tags:["Mobile","Testing","Quality","Crashes"]},{title:"SeleniumConf 2024",description:"Harnessing Power of Open-Source: Building a Cutting-Edge Device Farm",imageURL:"",url:"",reverse:!1,tags:["Open Source","Device Farm","Testing"]},{title:"AppiumConf 2024",description:"The Performance Paradox: Navigating the Complexities of Modern Mobile App Optimisation",imageURL:"",url:"",reverse:!0,tags:["Mobile","Appium","Performance"]},{title:"Spartans Summit 2024",description:"Unveiling the Power of Web Performance Metrics for Testers",imageURL:"",url:"https://www.youtube.com/watch?v=uo_lX1pUv9o",reverse:!1,tags:["Performance","Web","Testing","Metrics"]},{title:"SeleniumConf Chicago 2023",description:"Clean Code Practices for Test Automation & Advanced Appium 2.0 Workshop",imageURL:"",url:"",reverse:!0,tags:["Appium","Clean Code","Testing"]},{title:"XConf Singapore 2023",description:"Path to a more equitable testing process: Addressing unconscious bias and ethics",imageURL:"",url:"https://youtu.be/QMr30Za_-vM",reverse:!1,tags:["Ethics","Bias","Testing"]},{title:"TestMu Conf 2023",description:"Elevate your testing game: Building Appium 2.0 plugin Live",imageURL:"",url:"https://www.youtube.com/watch?v=b6yWXfLpazc",reverse:!0,tags:["Mobile","Appium","Testing"]},{title:"VodQA Singapore 2023",description:"Navigating mobile app testing challenges in today's tech landscape",imageURL:"",url:"",reverse:!1,tags:["Mobile","Challenges","Testing"]},{title:"SeleniumConf 2022",description:"Build your own Appium 2.0 Driver",imageURL:"",url:"",reverse:!0,tags:["Mobile","Appium","Selenium"]},{title:"TestMu Conf 2022",description:"Appium: Endgame & What's Next?",imageURL:"",url:"",reverse:!1,tags:["Mobile","Appium","Testing"]},{title:"Automation Guild 2022",description:"Benefits and Best Practices: Testing Containers & k8s Manifests",imageURL:"",url:"",reverse:!0,tags:["Containers","Kubernetes","Testing"]},{title:"Worqference 2022",description:"Automate Mobile Gestures Using Appium",imageURL:"",url:"",reverse:!1,tags:["Mobile","Appium","Gestures"]},{title:"Agile India 2022",description:"Speed Matters: Client Side Performance Improvement Tips & Tricks",imageURL:"",url:"",reverse:!0,tags:["Performance","UI","Testing"]}
1,{title:"AppiumConf 2021",description:"Build your own Appium plugin",imageURL:"",url:"",reverse:!1,tags:["Appium","Mobile","Plugins"]},{title:"Agile India 2021",description:"Testing Service Mesh configs and k8s manifests",imageURL:"",url:"",reverse:!0,tags:["Agile","DevOps","Kubernetes"]},{title:"Automation Guild 2021",description:"Consumer Driven Contracts",imageURL:"",url:"",reverse:!1,tags:["Testing","Contracts","API"]},{title:"Future of Testing: Mobile 2021",description:"Appium 2.0: What's Next",imageURL:"",url:"https://applitools.com/future-of-testing-mobile-apac-2021/",reverse:!0,tags:["Mobile","Appium","Testing"]},{title:"SeleniumConf 2020",description:"Advanced Appium Workshop & Appium-Android: From Surface To Core",imageURL:"",url:"",reverse:!1,tags:["Mobile","Appium","Android"]},{title:"SLASSCOM Quality Summit 2019",description:"Shift Left for Better End-User Experience",imageURL:"",url:"",reverse:!0,tags:["Quality","Shift Left","Testing"]},{title:"AppiumConf 2019",description:"Life Cycle of an Appium Command & Native Mobile Commands in Appium",imageURL:"",url:"",reverse:!1,tags:["Mobile","Appium","Testing"]},{title:"SeleniumConf Bangalore 2018",description:"Code Once Test Anywhere: On Demand Private Appium Device Cloud using ATD",imageURL:"",url:"",reverse:!0,tags:["Mobile","Appium","Device Farm"]},{title:"SeleniumConf Barcelona 2018",description:"Next Level of Front-end Testing with DevTools and WebDriver",imageURL:"",url:"",reverse:!1,tags:["Frontend","DevTools","WebDriver"]},{title:"Belgrade Test Conference 2018",description:"On Demand Private Appium Device Cloud",imageURL:"",url:"",reverse:!0,tags:["Mobile","Appium","Device Farm"]},{title:"Quest for Quality Dublin 2018",description:"On Demand Private Appium Device Cloud using ATD",imageURL:"",url:"",reverse:!1,tags:["Mobile","Appium","Device Farm"]},{title:"FOSDEM Brussels 2017",description:"Future of Mobile Automation Testing, Appium Steals It",imageURL:"",url:"https://video.fosdem.org/2017/H.2213/mobile_testing_with_appium.mp4",reverse:!0,tags:["Mobile","Appium","Open Source"]},{title:"SeleniumConf Austin 2017",description:"Test Inside Containers: Dockerize Appium Tests",imageURL:"",url:"https://youtu.be/jGW6ycW_tTQ",reverse:!1,tags:["Mobile","Appium","Docker","Containers"]}],F="https://gql.hashnode.com/",P="blog.srini.codes",G=`
2  query GetPosts($host: String!, $first: Int!, $after: String) {
3    publication(host: $host) {
4      posts(first: $first, after: $after) {
5        edges {
6          node {
7            id
8            title
9            brief
10            slug
11            publishedAt
12            coverImage {
13              url
14            }
15            tags {
16              name
17              slug
18            }
19            readTimeInMinutes
20            url
21          }
22        }
23        pageInfo {
24          hasNextPage
25          endCursor
26        }
27      }
28    }
29  }
30`,q=`
31  query GetPostBySlug($host: String!, $slug: String!) {
32    publication(host: $host) {
33      post(slug: $slug) {
34        id
35        title
36        brief
37        slug
38        publishedAt
39        coverImage {
40          url
41        }
42        tags {
43          name
44          slug
45        }
46        readTimeInMinutes
47        url
48        content {
49          html
50          markdown
51        }
52      }
53    }
54  }
55`;class V{static async makeRequest(s,i){try{const a=await fetch(F,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:s,variables:i})});if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);const n=await a.json();if(n.errors)throw new Error(`GraphQL error: ${n.errors[0].message}`);return n}catch(a){throw console.error("Hashnode API request failed:",a),a}}static async getPosts(s=10,i){const a=await this.makeRequest(G,{host:P,first:s,after:i}),n=a.data.publication.posts.edges.map(r=>r.node),{hasNextPage:o,endCursor:d}=a.data.publication.posts.pageInfo;return{posts:n,hasNextPage:o,endCursor:d}}static async getPostBySlug(s){return(await this.makeRequest(q,{host:P,slug:s})).data.publication.post}static async getAllPosts(s){const i=[],a=s?Math.min(s,20):20;let n=!0,o;for(;n;){const d=await this.getPosts(a,o);if(i.push(...d.posts),s&&i.length>=s)break;n=d.hasNextPage,o=d.endCursor}return s?i.slice(0,s):i}}const M=[{title:"Optimizing Client-Side Performance: A Comprehensive Guide To Improving User Experience",tags:"Performance, Web, Testing",source:"https://www.lambdatest.com/blog/optimizing-client-side-performance/"},{title:"Mastering Android: A Comprehensive Guide to ADB Commands",tags:"Android, ADB, Testing",source:"https://www.lambdatest.com/blog/adb-commands/"},{title:"Exploring Responsible Tech in Testing: Ethical Frameworks and Real-World Implications",tags:"Testing, Ethical, AI",source:"https://www.lambdatest.com/blog/exploring-responsible-tech-in-testing/"},{title:"Exploring Responsible Tech in Testing: Ethical Frameworks and Real-World Implications",tags:"Testing, Ethical, AI",source:"https://www.lambdatest.com/blog/exploring-responsible-tech-in-testing/"},{title:"Unveiling the Power of Web Performance Metrics for Testers",tags:"Performance, Web, Testing",source:"https://www.lambdatest.com/blog/web-performance-metrics-for-testers/"},{title:"Getting Started with Appium 2.0 Beta",tags:"Mobile, Appium 2.0, Automation",source:"https://applitools.com/blog/appium-2-0-beta/"},{title:"How to Automate Gesture Testing with Appium",tags:"Mobile, Appium 2.0, Automation",source:"https://applitools.com/blog/how-to-automate-gesture-testing-appium/"},{title:"How to Build Your Own Appium Plugin",tags:"Mobile, Appium 2.0, Automation",source:"https://applitools.com/blog/how-to-build-your-own-appium-plugin/"}
55,{title:"Appium vs Espresso vs XCUITest Understanding how Appium Compares to Espresso & XCUITest",tags:"Mobile, Appium 2.0, Automation",source:"https://applitools.com/blog/appium-vs-espresso-vs-xcui/"},{title:"What's New in Appium Java Client 8.0.0",tags:"Mobile, Appium 2.0, Automation",source:"https://applitools.com/blog/whats-new-appium-java-client-8/"}];class Q{static async getAllBlogs(s){try{const a=(await V.getAllPosts(s)).map(r=>({id:r.id,title:r.title,brief:r.brief,slug:r.slug,publishedAt:r.publishedAt,coverImage:r.coverImage,tags:r.tags.map(u=>u.name),readTimeInMinutes:r.readTimeInMinutes,url:`/blog/${r.slug}`,source:"hashnode",platform:"Personal Blog"})),o=M.filter((r,u,m)=>u===m.findIndex(f=>f.source===r.source&&f.title===r.title)).map((r,u)=>{let m="External";return r.source.includes("testproject.io")?m="TestProject":r.source.includes("applitools.com")?m="Applitools":r.source.includes("lambdatest.com")&&(m="TestMu AI"),{id:`external-${u}`,title:r.title,tags:r.tags.split(", "),url:r.source,source:"external",platform:m}});return[...a,...o].sort((r,u)=>r.source==="hashnode"&&u.source==="hashnode"?new Date(u.publishedAt).getTime()-new Date(r.publishedAt).getTime():r.source==="hashnode"&&u.source==="external"?-1:r.source==="external"&&u.source==="hashnode"?1:0)}catch(i){return console.error("Failed to fetch unified blogs:",i),M.filter((n,o,d)=>o===d.findIndex(r=>r.source===n.source&&r.title===n.title)).map((n,o)=>{let d="External";return n.source.includes("testproject.io")?d="TestProject":n.source.includes("applitools.com")?d="Applitools":n.source.includes("lambdatest.com")&&(d="TestMu AI"),{id:`external-${o}`,title:n.title,tags:n.tags.split(", "),url:n.source,source:"external",platform:d}})}}static async getRecentBlogs(s=6){return(await this.getAllBlogs(s)).slice(0,s)}}const X=[{title:"Jarvis Appium",description:"An intelligent MCP server that provides AI assistants with powerful tools and resources for Appium mobile automation",source:"https://github.com/AppiumTestDistribution/jarvis-appium",imgSource:"jarvislogo.webp"},{title:"Secure Hulk",description:"Secure-Hulk is a security scanner for Model Context Protocol.",source:"https://github.com/AppiumTestDistribution/secure-hulk",imgSource:"MCPSecureHulk.webp"},{title:"MCP WebDriverAgent Server",description:"Model Context Protocol server for WebDriverAgent - enabling AI integration with iOS automation and device management.",source:"https://github.com/AppiumTestDistribution/mcp-webdriveragent",imgSource:"mcp-wdalogo.webp"},{title:"MCP Appium Gestures Server",description:"Model Context Protocol server for Appium Gestures - bringing AI-powered gesture automation to mobile testing.",source:"https://github.com/AppiumTestDistribution/mcp-appium-gestures",imgSource:"mcp-appium-gestures.webp"},{title:"Appium",description:"cross-platform test automation tool for native, hybrid, and mobile web and desktop apps.",source:"https://github.com/appium/java-client",imgSource:"appium.webp"},{title:"Selenium",description:"Browser automation tool that can be used to test web applications.",source:"https://github.com/SeleniumHQ/selenium",imgSource:"selenium.webp"},{title:"webdriverio",description:"Test automation framework that allows you to run tests based on the Webdriver protocol and Appium.",source:"https://github.com/webdriverio/webdriverio",imgSource:"webdriverio.webp"},{title:"Appium Test Distribution",description:"A tool for running android and iOS appium tests in parallel across devices.",source:"https://github.com/AppiumTestDistribution/AppiumTestDistribution",imgSource:"ATD.webp"},{title:"Appium Device Farm",description:"Appium 2.0 plugin designed to manage and create driver sessions on available devices.",source:"https://github.com/AppiumTestDistribution/appium-device-farm",imgSource:"DeviceFarmLogo.webp"},{title:"Appium Wait Plugin",description:"Appium plugin designed to wait for element to be present.",source:"https://github.com/AppiumTestDistribution/appium-wait-plugin",imgSource:"AppiumWait2.webp"},{title:"Appium Gestures Plugin",description:"Appium plugin designed to perform gestures using W3C Actions.",source:"https://github.com/AppiumTestDistribution/appium-gestures-plugin",imgSource:"ATD.webp"},{title:"Angular Testing Library",description:"Simple and complete Angular testing utilities that encourage good testing practices.",source:"https://github.com/testing-library/angular-testing-library",imgS
55ource:"AngularTestingLibrary.webp"}];class Y{static async makeRequest(s){try{const i=await fetch(`https://api.github.com${s}`,{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"srini.codes-portfolio"}});if(!i.ok)throw new Error(`GitHub API error: ${i.status}`);return await i.json()}catch(i){throw console.error("GitHub API request failed:",i),i}}static async getRepository(s,i){return await this.makeRequest(`/repos/${s}/${i}`)}static extractRepoInfo(s){const i=s.match(/github\.com\/([^/]+)\/([^/]+)/);return i?{owner:i[1],repo:i[2]}:null}static categorizeProject(s){const i=s.toLowerCase();return i.includes("mcp")?"mcp":i.includes("appium")?"appium":i.includes("testing")||i.includes("angular testing")?"testing":i.includes("selenium")||i.includes("webdriver")?"automation":"other"}static getProjectLogo(s){const i=s.toLowerCase();return i.includes("mcp")?"🤖":i.includes("appium")?"📱":i.includes("selenium")?"🌐":i.includes("webdriver")?"⚡":i.includes("angular")?"🅰️":"🔧"}static isContributor(s){const i=["AppiumTestDistribution"],a=["mcp-webdriveragent","mcp-appium-gestures"];return i.some(n=>s.includes(n))||a.some(n=>s.includes(n))||s.includes("srinivasanTarget")}static async getEnhancedProjects(){return Promise.all(X.map(async s=>{const i=this.extractRepoInfo(s.source);let a;if(i)try{const n=await this.getRepository(i.owner,i.repo);a={stars:n.stargazers_count,forks:n.forks_count,language:n.language,topics:n.topics||[],lastUpdated:n.updated_at,openIssues:n.open_issues_count}}catch(n){console.warn(`Could not fetch GitHub data for ${s.title}:`,n)}return{title:s.title,description:s.description,source:s.source,imgSource:s.imgSource,githubData:a,category:this.categorizeProject(s.title),isContributor:this.isContributor(s.source),logo:this.getProjectLogo(s.title)}}))}static formatNumber(s){return s>=1e3?(s/1e3).toFixed(1)+"k":s.toString()}static getLanguageColor(s){return{JavaScript:"#f1e05a",TypeScript:"#2b7489",Python:"#3572A5",Java:"#b07219",Swift:"#ffac45",Kotlin:"#F18E33",Go:"#00ADD8",Rust:"#dea584","C++":"#f34b7d","C#":"#239120",Ruby:"#701516",PHP:"#4F5D95",Shell:"#89e051",HTML:"#e34c26",CSS:"#1572B6"}[s||""]||"#6b7280"}}const C="/assets/TestMu AI White Logo 512px-6429f2c8.svg";function J({post:t}){const s=n=>n?new Date(n).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"}):null,i=n=>{switch(n){case"TestMu AI":return"bg-yellow-600/20 text-yellow-300";case"Applitools":return"bg-green-600/20 text-green-300";case"TestProject":return"bg-orange-600/20 text-orange-300";case"Personal Blog":return"bg-white/10 text-gray-300";default:return"bg-gray-600/20 text-gray-300"}},a=t.source==="external";return e.jsxs("article",{className:"glass-card-hover rounded-xl overflow-hidden",children:[t.coverImage&&e.jsx("div",{className:"aspect-video overflow-hidden",children:e.jsx("img",{src:t.coverImage.url,alt:t.title,loading:"lazy",decoding:"async",className:"w-full h-full object-cover hover:scale-110 transition-transform duration-500"})}),e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex flex-wrap gap-2 mb-3",children:[t.platform&&e.jsx("span",{className:`px-2 py-1 rounded text-xs font-medium inline-flex items-center ${i(t.platform)}`,children:t.platform==="TestMu AI"?e.jsx("img",{src:C,alt:"TestMu AI",width:62,height:12,className:"h-3"}):t.platform}),t.tags.slice(0,2).map((n,o)=>e.jsx("span",{className:"glass-pill text-gray-300 px-2.5 py-1 rounded-md text-xs",children:n},o))]}),e.jsx("h2",{className:"text-xl font-heading font-bold mb-3 text-white line-clamp-2",children:t.title}),t.brief&&e.jsx("p",{className:"text-gray-400 mb-4 line-clamp-3",children:t.brief}),e.jsxs("div",{className:"flex items-center justify-between text-sm text-gray-500 mb-4",children:[t.publishedAt&&e.jsx("time",{dateTime:t.publishedAt,children:s(t.publishedAt)}),t.readTimeInMinutes&&e.jsxs("span",{children:[t.readTimeInMinutes," min read"]})]}),a?e.jsxs("a",{href:t.url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center text-gray-300 hover:text-white transition-colors duration-200 font-medium",children:["Read Article",e.jsx("svg",{className:"ml-1 w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})})]}):e.jsx(h,{to:t.url,className:"inline-flex items-center text-gray-300 hover:text-white transition-colors duration-200 font-medium",children:"Read Article →"})]})]})}function K({project:t}){const s=i=>{const a=i.split(".")[0];return a.length>60?a.substring(0,60)+"...":a+"."};return e.jsxs("a",{href:t.source,target:"_blank",rel:"noopener noreferrer",className:"group block glass-card-hover rounded-xl p-6",children:[e.jsx("div",{className:"flex justify-center mb-4",children:e.jsx("div",{className:"relative w-16 h-16 rounded-lg overflow-hidden bg-white/[0.06] flex items-center justify-center",children:e.jsx("img",{src:`/assets/images/${t.imgSource}`,alt:t.title,width:128,height:128,loading:"lazy",decoding:"async",className:"w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",onError:i=>{const a=i.target;a.style.display="none";const n=a.parentElement;n.innerHTML=`<div class="text-2xl">${t.logo}</div>`}})})}),e.jsx("h3",{className:"text-lg font-heading font-bold text-white text-center mb-2 group-hover:text-white transition-colors duration-200",children:t.title}),e.jsx("p",{className:"text-sm text-gray-400 text-center leading-relaxed",children:s(t.description)}),t.githubData&&e.jsxs("div",{className:"flex justify-center items-center space-x-4 mt-3 text-xs text-gray-500",children:[e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx("svg",{className:"w-3 h-3",fill:"
55currentColor",viewBox:"0 0 20 20",children:e.jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"})}),e.jsx("span",{children:t.githubData.stars>1e3?`${(t.githubData.stars/1e3).toFixed(1)}k`:t.githubData.stars})]}),t.githubData.language&&e.jsx("span",{children:t.githubData.language})]})]})}const Z="/assets/ProfilePic-19402318.webp",ee=({src:t,alt:s,className:i=""})=>{const a=c.useRef(null),[n,o]=c.useState({rotateX:0,rotateY:0,scale:1}),[d,r]=c.useState({x:50,y:50}),[u,m]=c.useState(!1),f=c.useCallback(v=>{if(!a.current)return;const g=a.current.getBoundingClientRect(),l=g.left+g.width/2,x=g.top+g.height/2,N=(v.clientX-l)/(g.width/2)*12,S=(x-v.clientY)/(g.height/2)*12,R=(v.clientX-g.left)/g.width*100,_=(v.clientY-g.top)/g.height*100;o({rotateX:S,rotateY:N,scale:1.02}),r({x:R,y:_})},[]),j=c.useCallback(()=>{m(!0)},[]),k=c.useCallback(()=>{m(!1),o({rotateX:0,rotateY:0,scale:1}),r({x:50,y:50})},[]);return e.jsx("div",{ref:a,className:`relative cursor-pointer ${i}`,onMouseMove:f,onMouseEnter:j,onMouseLeave:k,style:{perspective:"1000px",transformStyle:"preserve-3d"},children:e.jsxs("div",{className:"relative w-full h-full transition-transform duration-200 ease-out",style:{transform:`
56            rotateX(${n.rotateX}deg)
57            rotateY(${n.rotateY}deg)
58            scale(${n.scale})
59          `,transformStyle:"preserve-3d"},children:[e.jsx("img",{src:t,alt:s,width:800,height:723,fetchPriority:"high",decoding:"async",className:"w-full h-full object-cover",style:{objectPosition:"50% 30%",maskImage:`
60              radial-gradient(
61                ellipse 70% 70% at 50% 45%,
62                black 40%,
63                transparent 70%
64              )
65            `,WebkitMaskImage:`
66              radial-gradient(
67                ellipse 70% 70% at 50% 45%,
68                black 40%,
69                transparent 70%
70              )
71            `}}),e.jsx("div",{className:"absolute inset-0 pointer-events-none transition-opacity duration-300",style:{background:`radial-gradient(
72              circle at ${d.x}% ${d.y}%,
73              rgba(255, 255, 255, 0.08) 0%,
74              transparent 40%
75            )`,opacity:u?1:0,maskImage:`
76              radial-gradient(
77                ellipse 70% 70% at 50% 45%,
78                black 40%,
79                transparent 70%
80              )
81            `,WebkitMaskImage:`
82              radial-gradient(
83                ellipse 70% 70% at 50% 45%,
84                black 40%,
85                transparent 70%
86              )
87            `}})]})})},te="/assets/mic-9cba18a2.webp";const se=({className:t=""})=>e.jsxs("div",{className:`${t} space-bg`,children:[e.jsx("div",{className:"stars-layer stars-small"}),e.jsx("div",{className:"stars-layer stars-medium"}),e.jsx("div",{className:"stars-layer stars-large"})]}),ie="/assets/breaking-mcp-book-7564a463.webp",ne="/assets/MCP-Book-8022c69a.webp",ae=[{slug:"breaking-the-model-context-protocol",title:"Breaking the Model Context Protocol",subtitle:"Agentic Attacks and Defenses for MCP-Powered AI Systems",authors:["Thejes Sree Satheesh Kumar","Srinivasan Sekar"],foreword:{name:"Angie Jones",title:"VP of Engineering, AI Tools & Enablement, Block"},publisher:"Apress",date:"August 2026",isbn:"979-8-8688-2968-0",printIsbn:"979-8-8688-2967-3",cover:ie,blurb:["As AI agents plug into more tools and internal systems, the Model Context Protocol is becoming a core part of how modern platforms work, and with it comes a fast-growing attack surface where probabilistic models touch real APIs, data, and networks.","The book maps today’s MCP trust boundaries, explains why traditional security assumptions stop holding when the “client” is an LLM, and works through real attack stories and hands-on labs before turning to the defenses that hold up in production."],learnings:["Map MCP trust boundaries and see why traditional security assumptions break when the client is an LLM","Run hands-on labs covering tool poisoning, signature cloaking, and sampling-based abuse","Trace environment-level attacks: DNS rebinding, malicious MCP servers, and confused-deputy chains","Contain over-permissioned tools with schemas, contracts, and least-privilege design","Stand up monitoring and continuous red-team testing for MCP-powered agents"],audience:"Security engineers, AI platform teams, red-teamers, DevSecOps practitioners, MCP implementers, agent-framework developers, and technical leaders responsible for securing AI-driven systems.",links:[{label:"Read on Springer",url:"https://link.springer.com/book/10.1007/979-8-8688-2968-0",icon:"book",primary:!0},{label:"Buy on Amazon",url:"https://www.amazon.com/Breaking-Model-Context-Protocol-MCP%E2%80%91Powered/dp/B0H2L3V8VH",icon:"cart"}]},{slug:"the-mcp-standard",title:"The MCP Standard",subtitle:"A Developer’s Guide to Building Universal AI Tools with the Model Context Protocol",authors:["Srinivasan Sekar"],foreword:{name:"Angie Jones",title:"VP of Engineering, AI Tools & Enablement, Block"},publisher:"Apress",date:"February 2026",pages:285,isbn:"979-8-8688-2364-0",cover:ne,blurb:["A ground-up guide to the Model Context Protocol: the architecture behind Hosts, Clients, and Servers, and how to build production-ready MCP servers that any model vendor can talk to."],learnings:["Build production-ready MCP servers in TypeScript from the ground up","Understand the complete protocol architecture: Host, Client, and Server roles","Implement Tools, Resources, and Prompts with schema design using Zod","Apply multi-layered security strategies including threat analysis and client-side hardening","Design decoupled, scalable AI systems independent of specific model vendors"],links:[{label:"Get on Springer",url:"https://link.springer.com/book/10.1007/979-8-8688-2364-0",icon:"book",primary:!0},{label:"Buy on Amazon",url:"https://www.amazon.com/MCP-Standard-Developers-Building-Universal/dp/B0G2WVSXC6",icon:"cart"},{label:"Read on O’Reilly",url:"https://www.oreilly.com/library/view/the-mcp-standard/9798868823640/",icon:"external"}]}],I=ae[0],re=()=>U().pathname==="/book"?null:e.jsx("div",{className:"w-full border-b border-white/[0.08]",style:{background:"rgba(212, 149, 106, 0.1)"},children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 py-2.5 flex items-center justify-center gap-2 sm:gap-3",children:e.jsxs(h,{to:`/book#${I.slug}`,className:"flex items-center gap-2 sm:gap-3 group",children:[e.jsx("span",{className:"text-[10px] sm:text-xs text-accent-light/70 font-mono uppercase tracking-wider",children:"New Book"}),e.jsx("span",{className:"hidden sm:inline text-white/30",children:"|"}),e.jsx("span",{className:"text-xs sm:text-sm text-white/90 font-medium",children:I.title}),e.jsx("span",{className:"text-xs sm:text-sm text-accent-light/70 group-hover:text-white transition-colors duration-200",children:"→"})]})})}),oe={"/":{path:"/",title:"Srinivasan Sekar: Open Source Advocate, Speaker & Author",description:"Srinivasan Sekar is a software engineer, open source advocate, and Apress author of The MCP Standard and Breaking the Model Context Protocol. Creator of AppiumTestDistribution, international speaker, and expert in AI tooling, MCP, and mobile test automation.",type:"website"},"/conferences":{path:"/conferences",title:"Conference Talks & Speaker Map | Srinivasan Sekar",description:"34+ conference talks across 12 countries and 16 cities, plus 18 virtual events. An interactive speaker map of talks on Appium, Selenium, MCP, AI agents, and test automation by Srinivasan Sekar.",type:"website"},"/book":{path:"/book",title:"Books | The MCP Standard & Breaking the Model Context Protocol",description:"Two Apress books on the Model Context Protocol by Srinivasan Sekar: The MCP Standard (February 2026), a developer’s guide to building universal AI tools, and Breaking the Model Context Protocol (August 2026), agentic attacks and defenses for MCP-powered AI systems.",type:"book",image:"https://srini.codes/og-book.png",imageWidth:659,imageHeight:997,imageAlt:"Cover of The MCP Standard"},"/presentations":{path:"/presentations",title:"Presentations & Workshop Decks | Srinivasan Sekar",description:"Workshop slides and presentation decks from conferences and events: AI agent testing, Appium with MCP-powered tooling, and AI agent frameworks.",type:"website"},"/blog":{path:"/blog",title:"Blog | Srinivasan Sekar",description:"Technical articles by Srinivasan Sekar on the Model Context Protocol, AI agents, Appium, mobile test automation, and open source.",type:"website"},"/contact":{path:"/contact",title:"Contact | Srinivasan Sekar",description:"Get in touch with Srinivasan Sekar for conference speaking, workshops, open source collaboration, or consulting on MCP, AI agents, and test automation.",type:"website"}},w="https://srini.codes",le="Srinivasan Sekar",B=`${w}/og-image.png`,ce=t=>oe[t],p=(t,s,i)=>{let a=document.head.querySelector(`meta[${t}="${s}"]`);a||(a=document.createElement("meta"),a.setAttribute(t,s),document.head.appendChild(a)),a.setAttribute("content",i)},de=t=>{let s=document.head.querySelector('link[rel="canonical"]');s||(s=document.createElement("link"),s.setAttribute("rel","canonical"),document.head.appendChild(s)),s.setAttribute("href",t)},ue=({title:t,description:s,path:i,type:a="website",image:n,imageWidth:o=1200,imageHeight:d=1085,imageAlt:r="Portrait of Srinivasan Sekar"})=>{c.useEffect(()=>{const u=`${w}${i}`,m=n||B;document.title=t,de(u),p("name","title",t),p("name","description",s),p("property","og:title",t),p("property","og:description",s),p("property","og:url",u),p("property","og:type",a),p("property","og:image",m),p("property","og:image:width",String(o)),p("property","og:image:height",String(d)),p("property","og:image:alt",r),p("property","og:site_name",le),p("name","twitter:title",t),p("name","twitter:description",s),p("name","twitter:url",u),p("name","twitter:image",m),p("name","twitter:image:alt",r)},[t,s,i,a,n,o,d,r])},Ee=t=>{c.useEffect(()=>{var a;const s="article-jsonld";if((a=document.getElementById(s))==null||a.remove(),!t)return;const i=document.createElement("script");return i.type="application/ld+json",i.id=s,i.textContent=JSON.stringify({"@context":"https://schema.org","@type":"Article",headline:t.title,de
87scription:t.description,image:t.image||B,datePublished:t.publishedAt,url:`${w}/blog/${t.slug}`,mainEntityOfPage:`${w}/blog/${t.slug}`,author:{"@id":`${w}/#person`},publisher:{"@id":`${w}/#person`}}),document.head.appendChild(i),()=>{var n;return(n=document.getElementById(s))==null?void 0:n.remove()}},[t==null?void 0:t.title,t==null?void 0:t.description,t==null?void 0:t.slug,t==null?void 0:t.publishedAt,t==null?void 0:t.image])},L=[{label:"Open Source Advocate",icon:"⌘"},{label:"International Speaker",icon:"◉"},{label:"Technical Author",icon:"✦"}],me=()=>{const[t,s]=c.useState(0),[i,a]=c.useState(!1),n=c.useCallback(()=>{a(!0),setTimeout(()=>{s(d=>(d+1)%L.length),a(!1)},400)},[]);c.useEffect(()=>{const d=setInterval(n,3e3);return()=>clearInterval(d)},[n]);const o=L[t];return e.jsx("div",{className:"h-8 sm:h-9 overflow-hidden relative flex items-center justify-center lg:justify-start",children:e.jsxs("div",{className:`flex items-center gap-2.5 transition-all duration-400 ease-out ${i?"opacity-0 -translate-y-3":"opacity-100 translate-y-0"}`,style:{transitionDuration:"400ms",transitionTimingFunction:"cubic-bezier(0.16, 1, 0.3, 1)"},children:[e.jsx("span",{className:"text-accent-light/50 text-sm",children:o.icon}),e.jsx("span",{className:"text-sm sm:text-base text-white/70 font-medium tracking-wide",children:o.label}),e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-accent-light/40 animate-pulse"})]})})},pe=(t=[])=>{c.useEffect(()=>{const s={root:null,rootMargin:"0px 0px -50px 0px",threshold:.05},i=new IntersectionObserver(n=>{n.forEach(o=>{o.isIntersecting&&o.target.classList.add("visible")})},s),a=setTimeout(()=>{document.querySelectorAll(".section-animate, .stagger-animate, .title-animate").forEach(o=>i.observe(o))},100);return()=>{clearTimeout(a),i.disconnect()}},t)},A=[{title:"Better Context Will Always Beat a Better Model",source:"The New Stack",url:"https://thenewstack.io/better-context-will-always-beat-a-better-model/",color:"#1d9bf0",thumbnail:"https://cdn.thenewstack.io/media/2026/01/5d7625ac-blendingin.jpg"},{title:"Ready or Not, AI Is Rewriting the Rules for Software Testing",source:"DevOps.com",url:"https://devops.com/ready-or-not-ai-is-rewriting-the-rules-for-software-testing/",color:"#f97316",thumbnail:""},{title:"The CISO's Guide to Model Context Protocol (MCP)",source:"Security Boulevard",url:"https://securityboulevard.com/2025/10/the-cisos-guide-to-model-context-protocol-mcp/",color:"#ef4444",thumbnail:"https://securityboulevard.com/wp-content/uploads/2025/10/770-330-2025-10-23T132954.417.png"},{title:"It's Time to Build APIs for AI, Not Just for Developers",source:"The New Stack",url:"https://thenewstack.io/its-time-to-build-apis-for-ai-not-just-for-developers/",color:"#1d9bf0",thumbnail:"https://cdn.thenewstack.io/media/2025/10/35c6b952-agent.jpg"},{title:"Architecting for Agent-to-Agent Communication and AI Protocols",source:"Techstrong AI",url:"https://techstrong.ai/features/architecting-for-agent-to-agent-communication-and-ai-protocols/",color:"#a855f7",thumbnail:"https://techstrong.ai/wp-content/uploads/2024/10/AIOps.jpg"},{title:"AI Agents Inherit the API Sprawl Problem",source:"InfoSec Relations",url:"https://infosecrelations.com/ai-agents-inherit-the-api-sprawl-problem/",color:"#22c55e",thumbnail:""},{title:"Interview with Indian Express",source:"The Indian Express · March 28, 2026",url:"/assets/indian_express_28th_march.pdf",color:"#ff6b00",thumbnail:"https://images.indianexpress.com/2026/03/AI-detection-human-and-AI-writing.jpg"}],ge=()=>{const[t,s]=c.useState(0),[i,a]=c.useState(!1),[n,o]=c.useState(!1);c.useEffect(()=>{if(n)return;const u=setInterval(()=>{a(!0),setTimeout(()=>{s(m=>(m+1)%A.length),a(!1)},500)},4e3);return()=>clearInterval(u)},[n]);const d=u=>{u!==t&&(a(!0),setTimeout(()=>{s(u),a(!1)},300))},r=A[t];return e.jsx("div",{className:"glass-card-hover rounded-2xl overflow-hidden section-animate h-[calc(100%-3.5rem)] sm:h-[calc(100%-4rem)] flex flex-col",onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),children:e.jsxs("div",{className:"p-6 sm:p-8 flex-1 flex flex-col",children:[e.jsx("div",{className:"flex-1 flex flex-col",children:e.jsxs("a",{href:r.url,target:"_blank",rel:"noopener noreferrer",className:`flex-1 flex flex-col group transition-all duration-500 ease-out ${i?"opacity-0 translate-y-4":"opacity-100 translate-y-0"}`,children:[e.jsxs("div",{className:"w-full h-36 sm:h-44 rounded-xl overflow-hidden mb-5 relative",children:[r.thumbnail?e.jsx("img",{src:r.thumbnail,alt:r.title,loading:"lazy",decoding:"async",className:"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"}):e.jsx("div",{className:"w-full h-full flex items-center justify-center",style:{backgroundColor:r.color+"22"},children:e.jsx("span",{className:"text-3xl font-heading font-bold",style:{color:r.color},children:r.source.split(/[·]/)[0].trim().split(" ").map(u=>u[0]).join("")})}),e.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-12 bg-gradient-to-t from-black/40 to-transparent"})]}),e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"text-sm text-gray-400",children:r.source}),e.jsx("svg",{className:"w-5 h-5 text-gray-500 group-hover:text-accent-light flex-shrink-0 transition-all duration-200 group-hover:translate-x-0.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})})]}),e.jsx("h3",{className:"text-lg sm:text-xl font-heading font-bold text-white group-hover:text-accent-light transition-colors leading-snug",children:r.title})]})}),e.jsxs("div",{className:"flex items-center justify-between mt-6 pt-5 border-t border-white/5",children:[e.jsx("div",{className:"flex gap-2",children:A.map((u,m)=>e.jsx("button",{onClick:()=>d(m),className:`transition-all duration-300 rounded-full ${m===t?"w-6 h-2 bg-accent":"w-2 h-2 bg-white/20 hover:bg-white/40"}`,"aria-label":`Go to citation ${m+1}`},m))}),e.jsxs("span",{className:"text-xs text-gray-500 font-mono",children:[String(t+1).padStart(2,"0")," / ",String(A.length).padStart(2,"0")]})]})]})})},he=()=>{ue(ce("/"));const[t,s]=c.useState(!1),[i,a]=c.useState(!1),[n,o]=c.useState([]),[d,r]=c.useState(!0),[u,m]=c.useState([]),[f,j]=c.useState(!0);pe([d,f]),c.useEffect(()=>{const l=()=>{s(window.scrollY>50)};return window.addEventListener("scroll",l),()=>window.removeEventListener("scroll",l)},[]),c.useEffect(()=>{k(),v()},[]);const k=async()=>{try{r(!0);const l=await Q.getRecentBlogs(3);o(l)}catch(l){console.error("Failed to load recent blogs:",l)}finally{r(!1)}},v=async()=>{try{j(!0);const l=await Y.getEnhancedProjects();m(l)}catch(l){console.error("Failed to load enhanced projects:",l)}finally{j(!1)}},g=l=>{const x=document.getElementById(l);x&&x.scrollIntoView({behavior:"smooth"}),a(!1)};return e.jsxs("div",{className:"bg-black text-white",children:[e.jsx(re,{}),e.jsxs("nav",{className:`sticky top-0 w-full z-50 transition-all duration-300 ${t?"glass-nav":"bg-transparent"}`,children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 py-3 sm:py-4",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("div",{className:"flex items-center",children:e.jsx("div",{className:"text-2xl sm:text-3xl font-signature text-accent-light",style:{WebkitFontSmoothing:"antialiased"},children:"Srinivasan Sekar"})}),e.jsxs("div",{className:"hidden md:flex space-x-6 lg:space-x-8",children:[["About","Projects","Talks","Podcast","Citations"].map(l=>e.jsx("button",{onClick:()=>g(l.toLowerCase()),className:"nav-link font-medium",children:l},l)),e.jsx("button",{onClick:()=>g("blogs"),className:"nav-link font-medium",children:"Blogs"}),e.jsx(h,{to:"/contact",className:"nav-link font-medium",children:"Contact"}),e.jsx(h,{to:"/conferences",className:"nav-link font-medium",children:"Speaker Map"}),e.jsx(h,{to:"/presentations",className:"nav-link font-medium",children:"Presentations"}),e.jsx(h,{to:"/book",className:"nav-link font-medium",children:"Books"})]}),e.jsx("div",{className:"md:hidden",children:e.jsx("button",{onClick:()=>a(!i),className:"text-white hover:text-gray-300 p-2 touch-target","aria-label":i?"Close menu":"Open menu",children:i?e.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}):e.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})})]})}),e.jsx("div",{className:`md:hidden mobile-menu-panel overflow-hidden transition-all duration-300 ${i?"max-h-[32rem] opacity-100":"max-h-0 opacity-0"}`,children:e.jsxs("div",{className:"px-4 py-4 space-y-1",children:[["About","Projects","Talks","Podcast","Citations"].map(l=>e.jsx("button",{onClick:()=>g(l.toLowerCase()),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:l},l)),e.jsx("button",{onClick:()=>g("blogs"),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:"Latest Blogs"}),e.jsx(h,{to:"/contact",onClick:()=>a(!1),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:"Contact"}),e.jsx(h,{to:"/conferences",onClick:()=>a(!1),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:"Speaker Map"}),e.jsx(h,{to:"/presentations",onClick:()=>a(!1),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:"Presentations"}),e.jsx(h,{to:"/book",onClick:()=>a(!1),className:"mobile-nav-link block w-full text-left py-3 px-4 text-white rounded-lg transition-all duration-200 touch-target",children:"Books"})]})})]}),e.jsxs("section",{id:"hero",className:"min-h-[calc(100vh-6rem)] flex items-center justify-center relative overflow-hidden",children:[e.jsx(se,{className:"absolute inset-0 z-0"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-black/20 via-trans
87parent to-black/40 z-[1]"}),e.jsx("div",{className:"relative z-20 flex items-center justify-center w-full max-w-7xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid lg:grid-cols-2 gap-8 sm:gap-12 items-center w-full",children:[e.jsx("div",{className:"relative flex justify-center lg:justify-end order-1 lg:order-1",children:e.jsx(ee,{src:Z,alt:"Srinivasan Sekar",className:"w-64 sm:w-72 md:w-80 lg:w-96 h-64 sm:h-72 md:h-80 lg:h-96"})}),e.jsxs("div",{className:"text-center lg:text-left order-2 lg:order-2",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl lg:text-7xl font-heading font-bold mb-4 text-white leading-tight",children:["Srinivasan",e.jsx("br",{}),e.jsx("span",{className:"text-accent-light",children:"Sekar"})]}),e.jsx("div",{className:"mb-6",children:e.jsxs("span",{className:"text-white font-mono text-base sm:text-lg inline-flex items-center gap-2",children:["Director of Engineering at ",e.jsx("img",{src:C,alt:"TestMu AI",width:104,height:20,className:"inline h-4 sm:h-5"})]})}),e.jsx("div",{className:"mb-6",children:e.jsx(me,{})}),e.jsxs("div",{className:"flex flex-wrap justify-center lg:justify-start gap-3",children:[e.jsx("a",{href:"https://github.com/srinivasanTarget",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center justify-center w-10 h-10 rounded-xl border border-white/[0.08] bg-white/[0.03] hover:border-accent/30 hover:bg-accent/[0.06] transition-all duration-300","aria-label":"GitHub",children:e.jsx("svg",{className:"w-[18px] h-[18px] text-gray-400 group-hover:text-white transition-colors duration-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"})})}),e.jsx("a",{href:"https://twitter.com/srinivasanskr",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center justify-center w-10 h-10 rounded-xl border border-white/[0.08] bg-white/[0.03] hover:border-accent/30 hover:bg-accent/[0.06] transition-all duration-300","aria-label":"Twitter",children:e.jsx("svg",{className:"w-[18px] h-[18px] text-gray-400 group-hover:text-white transition-colors duration-300",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),e.jsx("a",{href:"https://www.linkedin.com/in/srinivasan-sekar/",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center justify-center w-10 h-10 rounded-xl border border-white/[0.08] bg-white/[0.03] hover:border-accent/30 hover:bg-accent/[0.06] transition-all duration-300","aria-label":"LinkedIn",children:e.jsxs("svg",{className:"w-[18px] h-[18px] text-gray-400 group-hover:text-white transition-colors duration-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"}),e.jsx("rect",{x:"2",y:"9",width:"4",height:"12"}),e.jsx("circle",{cx:"4",cy:"4",r:"2"})]})})]})]})]})})]}),e.jsx("section",{id:"about",className:"py-20 sm:py-28 lg:py-36 glass-section",children:e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsx("h2",{className:"text-3xl sm:text-4xl font-heading font-bold text-center mb-10 sm:mb-16 text-white title-animate",children:"About Me"}),e.jsxs("div",{className:"max-w-4xl mx-auto glass-card p-6 sm:p-8 lg:p-10 rounded-2xl section-animate",children:[e.jsxs("p",{className:"text-base sm:text-lg lg:text-xl text-gray-200 mb-6 leading-relaxed font-medium",children:["I'm a passionate technologist and leader in software testing and automation. As"," ",e.jsxs("span",{className:"modern-highlight inline-flex items-center gap-1.5",children:["Director of Engineering at ",e.jsx("img",{src:C,alt:"TestMu AI",width:83,height:16,className:"inline h-4"})]}),", I drive innovation in cloud-based testing platforms serving millions of developers worldwide."]}),e.jsxs("p",{className:"text-base sm:text-lg lg:text-xl text-gray-200 mb-6 leading-relaxed font-medium",children:["My open source journey began with ",e.jsx("span",{className:"modern-highlight",children:"Appium"}),", where I became a core maintainer and helped architect Appium 2.0. I've created plugins like"," ",e.jsx("span",{className:"modern-highlight",children:"Device Farm, Wait Plugin, and Gestures Plugin"})," ","used by millions globally. Recently, I pioneered"," ",e.jsx("span",{className:"modern-highlight",children:"Model Context Protocol (MCP) servers"})," for mobile automation, bridging AI and testing workflows."]}),e.jsxs("p",{className:"text-base sm:text-lg lg:text-xl text-gray-200 mb-6 leading-relaxed font-medium",children:["I've written two ",e.jsx("span",{className:"modern-highlight",children:"Apress"})," books on that protocol: ",e.jsx(h,{to:"/book#the-mcp-standard",className:"modern-highlight underline decoration-white/20 underline-offset-4 hover:
87decoration-white/60 transition-colors",children:"The MCP Standard"})," ","on building universal AI tools with MCP, and"," ",e.jsx(h,{to:"/book#breaking-the-model-context-protocol",className:"modern-highlight underline decoration-white/20 underline-offset-4 hover:decoration-white/60 transition-colors",children:"Breaking the Model Context Protocol"})," ","on the attacks and defenses that decide whether MCP-powered systems hold up in production."]}),e.jsxs("p",{className:"text-base sm:text-lg lg:text-xl text-gray-200 leading-relaxed font-medium",children:["As an ",e.jsx("span",{className:"modern-highlight",children:"international speaker"}),", I've presented at ",e.jsx("span",{className:"modern-highlight",children:"25+ conferences"})," including SeleniumConf, AppiumConf, FOSDEM, and Agile India, sharing insights on mobile automation and testing innovation."]})]})]})}),e.jsx("section",{id:"projects",className:"py-20 sm:py-28 lg:py-36 glass-section",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsx("h2",{className:"text-3xl sm:text-4xl font-heading font-bold text-center mb-6 sm:mb-8 text-white title-animate",children:"Open Source Contributions"}),e.jsx("p",{className:"text-base sm:text-lg lg:text-xl text-gray-300 text-center mb-12 sm:mb-16 max-w-3xl mx-auto section-animate",children:"Key contributions to testing and automation ecosystem"}),f?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-gray-400 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-400",children:"Loading projects..."})]}):e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 sm:gap-8 lg:gap-10 stagger-animate",children:u.map((l,x)=>e.jsx(K,{project:l},x))})]})}),e.jsx("section",{id:"talks",className:"py-20 sm:py-28 lg:py-36",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsx("h2",{className:"text-3xl sm:text-4xl font-heading font-bold text-center mb-10 sm:mb-16 text-white title-animate",children:"Conference Talks & Presentations"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 sm:gap-8 lg:gap-10 stagger-animate",children:z.slice(0,4).map((l,x)=>e.jsxs("div",{className:"glass-card-hover p-5 sm:p-6 rounded-xl",children:[e.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:l.tags.map((N,S)=>e.jsx("span",{className:"glass-pill text-gray-300 px-2.5 py-1 rounded-md text-xs",children:N},S))}),e.jsx("h3",{className:"text-base sm:text-lg font-heading font-bold mb-2 text-white",children:l.title}),e.jsx("p",{className:"text-gray-400 mb-4 text-sm sm:text-base",children:l.description}),l.url&&e.jsx("a",{href:l.url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center text-gray-300 hover:text-white transition-colors duration-200 touch-target",children:"Watch Talk →"})]},x))}),e.jsx("div",{className:"text-center mt-8 sm:mt-12",children:e.jsxs(h,{to:"/conferences",className:"glass-button bg-accent-hover/80 hover:bg-accent-hover px-6 sm:px-8 py-3 sm:py-4 rounded-lg transition-all duration-200 inline-flex items-center space-x-2 touch-target",children:[e.jsx("span",{children:"View All Talks"}),e.jsx("span",{children:"→"})]})})]})}),e.jsx("section",{id:"podcast",className:"py-20 sm:py-28 lg:py-36 glass-section",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"flex flex-col lg:flex-row gap-8 lg:gap-10 items-stretch",children:[e.jsxs("div",{className:"flex-1 lg:w-1/2",children:[e.jsx("h2",{className:"text-2xl sm:text-3xl font-heading font-bold mb-6 sm:mb-8 text-white title-animate",children:"Featured Podcast"}),e.jsx("div",{className:"glass-card-hover rounded-2xl overflow-hidden section-animate h-[calc(100%-3.5rem)] sm:h-[calc(100%-4rem)]",children:e.jsx("div",{className:"p-6 sm:p-8",children:e.jsxs("div",{className:"flex flex-col items-center text-center",children:[e.jsx("div",{className:"flex-shrink-0 mb-5",children:e.jsx("img",{src:te,alt:"Podcast microphone",width:256,height:256,loading:"lazy",decoding:"async",className:"w-24 h-24 sm:w-32 sm:h-32 object-contain drop-shadow-[0_0_25px_rgba(212,149,106,0.3)]"})}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-2 mb-3",children:[e.jsx("span",{className:"glass-pill text-accent-light px-2.5 py-1 rounded-md text-xs font-medium",children:"Thoughtworks Technology Podcast"}),e.jsx("span",{className:"glass-pill text-gray-300 px-2.5 py-1 rounded-md text-xs",children:"November 2023"})]}),e.jsx("h3",{className:"text-lg sm:text-xl font-heading font-bold mb-3 text-white leading-snug",children:"What's it like to maintain an award-winning open source tool?"}),e.jsxs("p",{className:"text-gray-300 text-sm mb-4 leading-relaxed",children:["Joined ",e.jsx("span",{className:"text-white font-medium",children:"Rebecca Parsons"})," and"," ",e.jsx("span",{className:"text-white font-medium",children:"Scott Shaw"}
87)," to discuss building and maintaining ",e.jsx("span",{className:"modern-highlight",children:"AppiumTestDistribution"}),", from parallel mobile test execution to winning the"," ",e.jsx("span",{className:"modern-highlight",children:"LambdaTest Delta Award"}),"."]}),e.jsx("div",{className:"flex flex-wrap justify-center gap-2 mb-5",children:["Open Source","Appium","Mobile Testing","Community"].map(l=>e.jsx("span",{className:"glass-pill text-white px-2.5 py-1 rounded-md text-xs",children:l},l))}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://www.thoughtworks.com/insights/podcasts/technology-podcasts/whats-like-maintain-award-winning-open-source-tool",target:"_blank",rel:"noopener noreferrer",className:"group inline-flex items-center gap-2 glass-button bg-accent-hover/80 hover:bg-accent-hover px-4 py-2 rounded-full transition-all duration-200 text-sm font-medium touch-target",children:[e.jsx("svg",{className:"w-4 h-4",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("polygon",{points:"5 3 19 12 5 21 5 3"})}),"Listen"]}),e.jsxs("a",{href:"https://open.spotify.com/episode/2BW0anDAIp98ukoDzvMjBl",target:"_blank",rel:"noopener noreferrer",className:"group inline-flex items-center gap-2 glass-button px-4 py-2 rounded-full transition-all duration-200 text-sm text-gray-300 hover:text-[#1DB954] hover:border-[#1DB954]/30 touch-target",children:[e.jsx("svg",{className:"w-4 h-4",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z"})}),"Spotify"]}),e.jsxs("a",{href:"https://podcasts.apple.com/gb/podcast/whats-it-like-to-maintain-an-award-winning-open-source-tool/id881136697?i=1000633439939",target:"_blank",rel:"noopener noreferrer",className:"group inline-flex items-center gap-2 glass-button px-4 py-2 rounded-full transition-all duration-200 text-sm text-gray-300 hover:text-[#D56DFB] hover:border-[#D56DFB]/30 touch-target",children:[e.jsx("svg",{className:"w-4 h-4",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M5.34 0A5.328 5.328 0 0 0 0 5.34v13.32A5.328 5.328 0 0 0 5.34 24h13.32A5.328 5.328 0 0 0 24 18.66V5.34A5.328 5.328 0 0 0 18.66 0H5.34zm6.525 2.568c2.336 0 4.448.902 6.056 2.587 1.224 1.272 1.912 2.619 2.264 4.392.12.604-.336 1.14-.952 1.14h-.12c-.5 0-.9-.36-.992-.852-.264-1.392-.804-2.496-1.728-3.42-1.296-1.308-2.872-1.968-4.68-1.968-1.648 0-3.12.588-4.404 1.764-1.308 1.2-2.028 2.748-2.148 4.632-.036.468-.396.852-.864.852h-.156c-.648 0-1.14-.552-1.104-1.2.132-2.34 1.044-4.308 2.748-5.856C7.236 3.396 9.18 2.568 11.865 2.568zM12 7.128c1.416 0 2.7.528 3.756 1.464 1.02.912 1.608 2.1 1.752 3.492.06.5-.348.948-.852.984h-.096c-.468 0-.864-.348-.924-.816-.096-.9-.504-1.668-1.212-2.292-.72-.636-1.536-.972-2.472-.972-.888 0-1.716.312-2.424.912-.756.648-1.2 1.476-1.332 2.412-.072.48-.48.828-.96.828h-.06c-.576 0-1.008-.504-.936-1.08.204-1.44.84-2.664 1.932-3.54 1.02-.828 2.184-1.248 3.528-1.392h.3zM12 11.7a2.4 2.4 0 0 1 2.4 2.4c0 .528-.18 1.044-.504 1.464l.024.024-1.08 3.54c-.108.372-.456.612-.84.612-.384 0-.732-.24-.84-.612l-1.08-3.54.024-.024A2.371 2.371 0 0 1 9.6 14.1a2.4 2.4 0 0 1 2.4-2.4z"})}),"Apple"]})]})]})})})]}),e.jsxs("div",{id:"citations",className:"flex-1 lg:w-1/2",children:[e.jsx("h2",{className:"text-2xl sm:text-3xl font-heading font-bold mb-6 sm:mb-8 text-white title-animate",children:"Citations & Press"}),e.jsx(ge,{})]})]})})}),e.jsx("section",{id:"blogs",className:"py-20 sm:py-28 lg:py-36 glass-section",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsx("h2",{className:"text-3xl sm:text-4xl font-heading font-bold text-center mb-10 sm:mb-16 text-white title-animate",children:"Latest Writings"}),e.jsx("p",{className:"text-base sm:text-lg lg:text-xl text-gray-300 text-center mb-8 sm:mb-12 max-w-3xl mx-auto 
87section-animate",children:"Recent articles from my personal blog and guest posts on leading tech platforms"}),d?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-gray-400 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-400",children:"Loading latest articles..."})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 sm:gap-8 lg:gap-10 mb-8 sm:mb-12 stagger-animate",children:n.map(l=>e.jsx(J,{post:l},l.id))}),e.jsx("div",{className:"text-center",children:e.jsxs(h,{to:"/blog",className:"glass-button bg-accent-hover/80 hover:bg-accent-hover px-6 sm:px-8 py-3 sm:py-4 rounded-lg transition-all duration-200 inline-flex items-center space-x-2 touch-target",children:[e.jsx("span",{children:"View All Articles"}),e.jsx("span",{children:"→"})]})})]})]})}),e.jsx("section",{id:"contact",className:"py-20 sm:py-28 lg:py-36 glass-section",children:e.jsxs("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 text-center",children:[e.jsx("h2",{className:"text-3xl sm:text-4xl font-heading font-bold mb-6 sm:mb-8 text-white title-animate",children:"Let's Connect"}),e.jsxs("div",{className:"glass-card rounded-2xl p-8 sm:p-12 max-w-2xl mx-auto",children:[e.jsx("p",{className:"text-base sm:text-lg lg:text-xl text-gray-300 mb-8 sm:mb-10 section-animate",children:"Interested in collaboration, speaking opportunities, or just want to chat about testing and automation?"}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3 sm:gap-4 lg:gap-6 section-animate",children:[e.jsx("a",{href:"mailto:[email protected]",className:"glass-button bg-accent-hover/80 hover:bg-accent-hover p-3 sm:p-4 rounded-full transition-all duration-200 touch-target","aria-label":"Email Me",children:e.jsxs("svg",{className:"w-6 h-6",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),e.jsx("polyline",{points:"3 7 12 13 21 7"})]})}),e.jsx("a",{href:"https://twitter.com/srinivasanskr",target:"_blank",rel:"noopener noreferrer",className:"glass-button p-3 sm:p-4 rounded-full transition-colors duration-200 touch-target","aria-label":"Twitter",children:e.jsx("svg",{className:"w-6 h-6",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),e.jsx("a",{href:"https://github.com/srinivasanTarget",target:"_blank",rel:"noopener noreferrer",className:"glass-button p-3 sm:p-4 rounded-full transition-colors duration-200 touch-target","aria-label":"GitHub",children:e.jsx("svg",{className:"w-6 h-6",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"})})})]})]})]})}),e.jsx("footer",{className:"py-6 sm:py-8 glass-section",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 text-center",children:e.jsx("p",{className:"text-gray-500 text-sm sm:text-base",children:"© 2026 Srinivasan Sekar"})})})]})};var xe="@vercel/analytics",fe="1.6.1",be=()=>{window.va||(window.va=function(...s){(window.vaq=window.vaq||[]).push(s)})};function E(){return typeof window<"u"}function D(){try{const t="production"}catch{}return"production"}function ve(t="auto"){if(t==="auto"){window.vam=D();return}window.vam=t}function we(){return(E()?window.vam:D())||"production"}function T(){return we()==="development"}function ye(t){return t.scriptSrc?t.scriptSrc:T()?"https://va.vercel-scripts.com/v1/script.debug.js":t.basePath?`${t.basePath}/insights/script.js`:"/_vercel/insights/script.js"}function je(t={debug:!0}){var s;if(!E())return;ve(t.mode),be(),t.beforeSend&&((s=window.va)==null||s.call(window,"beforeSend",t.beforeSend));const i=ye(t);if(document.head.querySelector(`script[src*="${i}"]`))return;const a=document.createElement("script");a.src=i,a.defer=!0,a.dataset.sdkn=xe+(t.framework?`/${t.framework}`:""),a.dataset.sdkv=fe,t.disableAutoTrack&&(a.dataset.disableAutoTrack="1"),t.endpoint?a.dataset.endpoint=t.endpoint:t.basePath&&(a.dataset.endpoint=`${t.basePath}/insights`),t.dsn&&(a.dataset.dsn=t.dsn),a.onerror=()=>{const n=T()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${i}. ${n}`)},T()&&t.debug===!1&&(a.dataset.debug="false"),document.head.appendChild(a)}function Ae({route:t,path:s}){var i;(i=window.va)==null||i.call(window,"pageview",{route:t,path:s})}
87function ke(){if(!(typeof process>"u"||typeof process.env>"u"))return{}.REACT_APP_VERCEL_OBSERVABILITY_BASEPATH}function Ne(t){return c.useEffect(()=>{var s;t.beforeSend&&((s=window.va)==null||s.call(window,"beforeSend",t.beforeSend))},[t.beforeSend]),c.useEffect(()=>{je({framework:t.framework||"react",basePath:t.basePath??ke(),...t.route!==void 0&&{disableAutoTrack:!0},...t})},[]),c.useEffect(()=>{t.route&&t.path&&Ae({route:t.route,path:t.path})},[t.route,t.path]),null}const Se=c.lazy(()=>y(()=>import("./BlogList-7f4e7cf3.js"),["assets/BlogList-7f4e7cf3.js","assets/react-vendor-01a8f52a.js","assets/BlogNavigation-54eb74ad.js"])),Ce=c.lazy(()=>y(()=>import("./BlogPost-51df1d37.js"),["assets/BlogPost-51df1d37.js","assets/react-vendor-01a8f52a.js","assets/BlogNavigation-54eb74ad.js"])),Te=c.lazy(()=>y(()=>import("./Contact-7219e9ff.js"),["assets/Contact-7219e9ff.js","assets/react-vendor-01a8f52a.js"])),Pe=c.lazy(()=>y(()=>import("./Conferences-b28ebc91.js").then(t=>t.c),["assets/Conferences-b28ebc91.js","assets/react-vendor-01a8f52a.js"])),Me=c.lazy(()=>y(()=>import("./Book-59b541d4.js"),["assets/Book-59b541d4.js","assets/react-vendor-01a8f52a.js"])),Ie=c.lazy(()=>y(()=>import("./Presentations-913873e0.js"),["assets/Presentations-913873e0.js","assets/react-vendor-01a8f52a.js"]));function Le(){return e.jsxs("div",{className:"bg-black min-h-screen",children:[e.jsx(O,{children:e.jsx(c.Suspense,{fallback:e.jsx("div",{className:"min-h-screen bg-black"}),children:e.jsxs($,{children:[e.jsx(b,{path:"/",element:e.jsx(he,{})}),e.jsx(b,{path:"/contact",element:e.jsx(Te,{})}),e.jsx(b,{path:"/conferences",element:e.jsx(Pe,{})}),e.jsx(b,{path:"/book",element:e.jsx(Me,{})}),e.jsx(b,{path:"/presentations",element:e.jsx(Ie,{})}),e.jsx(b,{path:"/blog",element:e.jsx(Se,{})}),e.jsx(b,{path:"/blog/:slug",element:e.jsx(Ce,{})})]})})}),e.jsx(Ne,{mode:"production"})]})}W.createRoot(document.getElementById("root")).render(e.jsx(H.StrictMode,{children:e.jsx(Le,{})}));export{V as H,Q as U,J as a,Ee as b,ae as c,Z as h,ce as r,C as t,ue as u};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.