1:"$Sreact.fragment" 2:I[79520,["/_next/static/chunks/0a3f498ef71c618e.js","/_next/static/chunks/61bc785dc6bd3109.js","/_next/static/chunks/a676f0ced11453e9.js","/_next/static/chunks/4b778b2e48718709.js","/_next/static/chunks/95a5e382a1e8200a.js","/_next/static/chunks/06fe5961b16f81d0.js","/_next/static/chunks/8c955ce35598c7b8.js","/_next/static/chunks/c17b6b84f9eabd23.js"],""] 8:I[88754,["/_next/static/chunks/0a3f498ef71c618e.js","/_next/static/chunks/61bc785dc6bd3109.js","/_next/static/chunks/a676f0ced11453e9.js","/_next/static/chunks/4b778b2e48718709.js","/_next/static/chunks/95a5e382a1e8200a.js","/_next/static/chunks/06fe5961b16f81d0.js","/_next/static/chunks/8c955ce35598c7b8.js","/_next/static/chunks/c17b6b84f9eabd23.js"],"ClientPageWrapper"] 9:I[3601,["/_next/static/chunks/0a3f498ef71c618e.js","/_next/static/chunks/61bc785dc6bd3109.js","/_next/static/chunks/a676f0ced11453e9.js","/_next/static/chunks/4b778b2e48718709.js","/_next/static/chunks/95a5e382a1e8200a.js","/_next/static/chunks/06fe5961b16f81d0.js","/_next/static/chunks/8c955ce35598c7b8.js","/_next/static/chunks/c17b6b84f9eabd23.js"],"AnimatedSection"] a:I[22016,["/_next/static/chunks/0a3f498ef71c618e.js","/_next/static/chunks/61bc785dc6bd3109.js","/_next/static/chunks/a676f0ced11453e9.js","/_next/static/chunks/4b778b2e48718709.js","/_next/static/chunks/95a5e382a1e8200a.js","/_next/static/chunks/06fe5961b16f81d0.js","/_next/static/chunks/8c955ce35598c7b8.js","/_next/static/chunks/c17b6b84f9eabd23.js"],""] b:I[85437,["/_next/static/chunks/0a3f498ef71c618e.js","/_next/static/chunks/61bc785dc6bd3109.js","/_next/static/chunks/a676f0ced11453e9.js","/_next/static/chunks/4b778b2e48718709.js","/_next/static/chunks/95a5e382a1e8200a.js","/_next/static/chunks/06fe5961b16f81d0.js","/_next/static/chunks/8c955ce35598c7b8.js","/_next/static/chunks/c17b6b84f9eabd23.js"],"Image"] 14:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"OutletBoundary"] 15:"$Sreact.suspense" 3:T10d3,{"@context":"https://schema.org","@type":"CollectionPage","name":"Hussein Maghrabi — Blog","description":"Naman Barkiya's blog — thoughts on AI, software engineering, and building in public.","url":"https://h-maghrabi.tech//blogs","isPartOf":{"@type":"WebSite","name":"Hussein Maghrabi - Senior PHP / Laravel Developer","url":"https://h-maghrabi.tech/"},"author":{"@type":"Person","name":"Hussein Maghrabi","url":"https://h-maghrabi.tech/"},"mainEntity":{"@type":"Blog","name":"Hussein Maghrabi's Blog","description":"Naman Barkiya's blog — thoughts on AI, software engineering, and building in public.","url":"https://h-maghrabi.tech//blogs","author":{"@type":"Person","name":"Hussein Maghrabi","url":"https://h-maghrabi.tech/"},"blogPost":[{"@type":"BlogPosting","headline":"How I Got 150+ Stars on GitHub for a Next.js Portfolio Template","description":"The story behind minimal-next-portfolio — an open-source Next.js 16 portfolio template that grew from a personal project to 148 stars, 41 forks, and developers worldwide using it to showcase their work.","datePublished":"2026-02-01","url":"https://h-maghrabi.tech//blogs/how-i-got-150-stars-nextjs-portfolio-template","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"Next.js, Open Source, GitHub, Portfolio, React","image":"https://h-maghrabi.tech//blogs/star-history-portfolio.svg"},{"@type":"BlogPosting","headline":"Ship Your Backend in 10 Minutes: The Niya FastAPI Template","description":"A production-ready FastAPI template with Supabase auth, rate limiting, connection pooling, and clean architecture — built so you never waste another week on backend boilerplate.","datePublished":"2025-03-01","url":"https://h-maghrabi.tech//blogs/niya-fastapi-starter-template","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"FastAPI, Python, Supabase, Backend, API","image":"https://h-maghrabi.tech//blogs/niya-fastpi.png"},{"@type":"BlogPosting","headline":"I Built a Free SaaS Starter Template — Here's Everything Inside","description":"Niya SaaS Template is a production-ready, open-source Next.js 15 starter kit with Supabase auth, Zustand, React Query, Magic UI animations, and clean architecture. Built for developers and AI startups who want to ship fast.","datePublished":"2025-02-20","url":"https://h-maghrabi.tech//blogs/niya-saas-starter-template","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"Next.js, SaaS, Supabase, Open Source, Boilerplate","image":"https://h-maghrabi.tech//projects/niya/logo.png"},{"@type":"BlogPosting","headline":"Building a Production-Ready AI Chatbot Platform: Lessons from Convot","description":"Deep-dive into the architecture decisions, ingestion pipelines, and hard-won lessons from building Convot — an embeddable AI chatbot that retrieves answers from your own knowledge base.","datePublished":"2025-02-15","url":"https://h-maghrabi.tech//blogs/building-production-ai-chatbot-convot","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"AI, LLM, RAG, FastAPI, Next.js, Vector Search","image":"https://h-maghrabi.tech//projects/convot/logo.png"},{"@type":"BlogPosting","headline":"AEO vs SEO: How I Ranked #1 on ChatGPT for a Next.js Template","description":"Answer Engine Optimization (AEO) is the new frontier. Here's the exact strategy I used to get my open-source Next.js portfolio template to rank #1 on ChatGPT search — and what it means for developers building in public.","datePublished":"2024-11-20","url":"https://h-maghrabi.tech//blogs/aeo-vs-seo-chatgpt-ranking","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"SEO, AEO, Next.js, Open Source, Growth","image":"https://h-maghrabi.tech//projects/portfolio/logo.png"},{"@type":"BlogPosting","headline":"3D Card with Embedded Links Using Three.js and Blender","description":"Ever thought your traditional business card could use a serious upgrade? Here's how I used Three.js and Blender to transform a plain business card into an interactive 3D masterpiece with embedded clickable links.","datePublished":"2023-11-01","url":"https://h-maghrabi.tech//blogs/3d-card-threejs-blender","author":{"@type":"Person","name":"Hussein Maghrabi"},"keywords":"Three.js, Blender, 3D, JavaScript, WebGL","image":"https://h-maghrabi.tech//projects/card/card_2.webp"}]}}0:{"buildId":"pOVubU_Kt6m3SrfLgqzM-","rsc":["$","$1","c",{"children":[[["$","$L2",null,{"id":"schema-blog-list","type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$3"}}],"$L4","$L5"],["$L6"],"$L7"]}],"loading":null,"isPartial":false} 4:["$","$L2",null,{"id":"schema-breadcrumb-blogs","type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://h-maghrabi.tech/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blogs\",\"item\":\"https://h-maghrabi.tech//blogs\"}]}"}}] 5:["$","$L8",null,{"children":["$","div",null,{"children":[[["$","div",null,{"className":"flex flex-col mt-5 items-start gap-4 md:flex-row md:justify-between md:gap-8","children":["$","div",null,{"className":"flex-1 space-y-4","children":[["$","h1",null,{"className":"inline-block font-heading text-4xl tracking-tight lg:text-5xl capitalize ","children":"Blogs"}],["$","p",null,{"className":"text-lg text-muted-foreground","children":"Thoughts on AI, software engineering, and building in public."}]]}]}],["$","hr",null,{"className":"my-6"}]],["$","div",null,{"className":"mx-4 sm:mx-6 lg:mx-8 max-w-full overflow-x-hidden","children":["$","div",null,{"className":"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5 mt-2","children":[["$","$L9","how-i-got-150-stars-nextjs-portfolio-template",{"delay":0,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/how-i-got-150-stars-nextjs-portfolio-template","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/blogs/star-history-portfolio.svg","alt":"How I Got 150+ Stars on GitHub for a Next.js Portfolio Template","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","Next.js",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Next.js"}],["$","span","Open Source",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Open Source"}],["$","span","GitHub",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"GitHub"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",2]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"How I Got 150+ Stars on GitHub for a Next.js Portfolio Template"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"The story behind minimal-next-portfolio — an open-source Next.js 16 portfolio template that grew from a personal project to 148 stars, 41 forks, and developers worldwide using it to showcase their work."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2026-02-01T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"February 1, 2026"]}],["$","span",null,{"className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-clock w-3.5 h-3.5","children":["$Lc","$Ld","$undefined"]}],6," min read"]}]]}],"$Le"]}]]}]]}]}]}],"$Lf","$L10","$L11","$L12","$L13"]}]}]]}]}] 6:["$","script","script-0",{"src":"/_next/static/chunks/c17b6b84f9eabd23.js","async":true}] 7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] c:["$","circle","1mglay",{"cx":"12","cy":"12","r":"10"}] d:["$","polyline","68esgv",{"points":"12 6 12 12 16 14"}] e:["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":[["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}],"$undefined"]}]]}] f:["$","$L9","niya-fastapi-starter-template",{"delay":0.05,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/niya-fastapi-starter-template","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/blogs/niya-fastpi.png","alt":"Ship Your Backend in 10 Minutes: The Niya FastAPI Template","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","FastAPI",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"FastAPI"}],["$","span","Python",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Python"}],["$","span","Supabase",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Supabase"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",2]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"Ship Your Backend in 10 Minutes: The Niya FastAPI Template"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"A production-ready FastAPI template with Supabase auth, rate limiting, connection pooling, and clean architecture — built so you never waste another week on backend boilerplate."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2025-03-01T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"March 1, 2025"]}],["$","span",null,{"className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-clock w-3.5 h-3.5","children":[["$","circle","1mglay",{"cx":"12","cy":"12","r":"10"}],["$","polyline","68esgv",{"points":"12 6 12 12 16 14"}],"$undefined"]}],6," min read"]}]]}],["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":["$L17","$undefined"]}]]}]]}]]}]]}]}]}] 10:["$","$L9","niya-saas-starter-template",{"delay":0.1,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/niya-saas-starter-template","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/projects/niya/logo.png","alt":"I Built a Free SaaS Starter Template — Here's Everything Inside","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","Next.js",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Next.js"}],["$","span","SaaS",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"SaaS"}],["$","span","Supabase",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Supabase"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",2]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"I Built a Free SaaS Starter Template — Here's Everything Inside"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"Niya SaaS Template is a production-ready, open-source Next.js 15 starter kit with Supabase auth, Zustand, React Query, Magic UI animations, and clean architecture. Built for developers and AI startups who want to ship fast."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2025-02-20T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"February 20, 2025"]}],["$","span",null,{"className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-clock w-3.5 h-3.5","children":[["$","circle","1mglay",{"cx":"12","cy":"12","r":"10"}],["$","polyline","68esgv",{"points":"12 6 12 12 16 14"}],"$undefined"]}],8," min read"]}]]}],["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":["$L18","$undefined"]}]]}]]}]]}]]}]}]}] 11:["$","$L9","building-production-ai-chatbot-convot",{"delay":0.15000000000000002,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/building-production-ai-chatbot-convot","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/projects/convot/logo.png","alt":"Building a Production-Ready AI Chatbot Platform: Lessons from Convot","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","AI",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"AI"}],["$","span","LLM",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"LLM"}],["$","span","RAG",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"RAG"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",3]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"Building a Production-Ready AI Chatbot Platform: Lessons from Convot"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"Deep-dive into the architecture decisions, ingestion pipelines, and hard-won lessons from building Convot — an embeddable AI chatbot that retrieves answers from your own knowledge base."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2025-02-15T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"February 15, 2025"]}],"$undefined"]}],["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":[["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}],"$undefined"]}]]}]]}]]}]]}]}]}] 12:["$","$L9","aeo-vs-seo-chatgpt-ranking",{"delay":0.2,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/aeo-vs-seo-chatgpt-ranking","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/projects/portfolio/logo.png","alt":"AEO vs SEO: How I Ranked #1 on ChatGPT for a Next.js Template","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","SEO",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"SEO"}],["$","span","AEO",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"AEO"}],["$","span","Next.js",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Next.js"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",2]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"AEO vs SEO: How I Ranked #1 on ChatGPT for a Next.js Template"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"Answer Engine Optimization (AEO) is the new frontier. Here's the exact strategy I used to get my open-source Next.js portfolio template to rank #1 on ChatGPT search — and what it means for developers building in public."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2024-11-20T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"November 20, 2024"]}],"$undefined"]}],["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":[["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}],"$undefined"]}]]}]]}]]}]]}]}]}] 13:["$","$L9","3d-card-threejs-blender",{"delay":0.25,"direction":"up","className":"h-full","children":["$","$La",null,{"href":"/blogs/3d-card-threejs-blender","className":"group relative flex flex-col bg-background border border-border rounded-lg overflow-hidden h-full transition-all duration-300 hover:shadow-lg hover:border-primary/40 hover:-translate-y-0.5","children":["$","article",null,{"className":"flex flex-col h-full","children":[["$","div",null,{"className":"relative w-full h-[180px] flex-shrink-0 overflow-hidden bg-muted","children":[["$","$Lb",null,{"src":"/projects/card/card_2.webp","alt":"3D Card with Embedded Links Using Three.js and Blender","fill":true,"className":"object-cover transition-transform duration-500 group-hover:scale-105"}],["$","div",null,{"className":"absolute inset-0 bg-gradient-to-t from-background/60 to-transparent"}]]}],["$","div",null,{"className":"p-5 flex flex-col flex-grow gap-3","children":[["$","div",null,{"className":"flex flex-wrap gap-1.5","aria-label":"Tags","children":[[["$","span","Three.js",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Three.js"}],["$","span","Blender",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"Blender"}],["$","span","3D",{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-primary/10 text-primary border border-primary/20","children":"3D"}]],["$","span",null,{"className":"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium bg-muted text-muted-foreground","children":["+",2]}]]}],["$","h3",null,{"className":"text-lg font-bold text-foreground leading-snug line-clamp-2 group-hover:text-primary transition-colors duration-200","children":"3D Card with Embedded Links Using Three.js and Blender"}],["$","p",null,{"className":"text-sm text-muted-foreground line-clamp-3 flex-grow leading-relaxed","children":"Ever thought your traditional business card could use a serious upgrade? Here's how I used Three.js and Blender to transform a plain business card into an interactive 3D masterpiece with embedded clickable links."}],["$","div",null,{"className":"flex items-center justify-between pt-2 border-t border-border mt-auto","children":[["$","div",null,{"className":"flex items-center gap-3 text-xs text-muted-foreground","children":[["$","time",null,{"dateTime":"2023-11-01T00:00:00.000Z","className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-calendar w-3.5 h-3.5","children":[["$","path","1cmpym",{"d":"M8 2v4"}],["$","path","4m81vk",{"d":"M16 2v4"}],["$","rect","1hopcy",{"width":"18","height":"18","x":"3","y":"4","rx":"2"}],["$","path","8toen8",{"d":"M3 10h18"}],"$undefined"]}],"November 1, 2023"]}],["$","span",null,{"className":"flex items-center gap-1","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-clock w-3.5 h-3.5","children":[["$","circle","1mglay",{"cx":"12","cy":"12","r":"10"}],["$","polyline","68esgv",{"points":"12 6 12 12 16 14"}],"$undefined"]}],7," min read"]}]]}],["$","span",null,{"className":"inline-flex items-center gap-0.5 text-xs font-medium text-muted-foreground group-hover:text-primary transition-colors duration-200","aria-hidden":"true","children":["Read",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-3 h-3 transition-transform duration-200 group-hover:translate-x-0.5","children":["$L19","$undefined"]}]]}]]}]]}]]}]}]}] 16:null 17:["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}] 18:["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}] 19:["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}]