1<!DOCTYPE html><!--sTjfaZVACxuH8NGVLDoip--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, viewport-fit=cover, user-scalable=yes"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.29207c2f.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Fhiruna-gallage.png&w=48&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=96&q=75 2x"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Fhiruna-gallage.png&w=32&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=64&q=75 2x"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Fhiruna-gallage.png&w=64&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=128&q=75 2x"/><link rel="stylesheet" href="/_next/static/chunks/babf37abb0a806b0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/20a20bc7bec3ddde.js"/>
1<script src="/_next/static/chunks/3cc5679cc0b7800b.js" async=""></script>
1<script src="/_next/static/chunks/8082ab48faca5ea1.js" async=""></script>
1<script src="/_next/static/chunks/5f11500e67954124.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-1e3b3006a84d1909.js" async=""></script>
1<script src="/_next/static/chunks/c6bf19f4878eee1e.js" async=""></script>
1<script src="/_next/static/chunks/e8330230854378e0.js" async=""></script>
1<script src="/_next/static/chunks/685d71e394d561ca.js" async=""></script>
1<script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script>
1<script src="/_next/static/chunks/7dd66bdf8a7e5707.js" async=""></script>
1<script src="/_next/static/chunks/778e7233350936d2.js" async=""></script>
1<script src="/_next/static/chunks/ebb1d953ea00736b.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>Portfolio - Hiruna Gallage | Software Engineer Projects | Hiruna Gallage</title><meta name="description" content="Explore Hiruna Gallage&apos;s portfolio of full-stack development projects. Discover modern web applications, React projects, Next.js applications, Node.js APIs, and innovative software solutions built with cutting-edge technologies."/><meta name="application-name" content="Hiruna Gallage"/><link rel="author" href="https://www.hiruna.dev"/><meta name="author" content="Hiruna Gallage"/><link rel="manifest" href="/manifest.webmanifest"/><meta name="keywords" content="Hiruna Gallage Portfolio,Software Engineer Projects,React Projects,Next.js Applications,Node.js APIs,Web Development Portfolio,JavaScript Projects,TypeScript Applications,Modern Web Apps,Software Development Projects,GitHub Repositories,Professional Web Projects,Web Applications,API Development,Database Projects,Developer Showcase,Code Examples,Programming Portfolio,Project Gallery,Development Showcase,Tech Portfolio,Software Solutions,Web App Examples,Development Work"/><meta name="creator" content="Hiruna Gallage"/><meta name="publisher" content="Hiruna Gallage"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-image-preview:large, max-snippet:-1"/><meta name="category" content="technology"/><meta name="classification" content="Personal Website"/><link rel="canonical" href="https://www.hiruna.dev/portfolio"/><meta name="format-detection" content="telephone=no, address=no, email=no"/><meta name="me" content="[email protected]"/><meta name="me" content="https://www.hiruna.dev"/><meta property="og:title" content="Portfolio - Hiruna Gallage | Software Engineer Projects"/><meta property="og:description" content="Explore my portfolio of full-stack development projects including modern web applications, APIs, and innovative software solutions."/><meta property="og:url" content="https://www.hiruna.dev/portfolio"/><meta property="og:image" content="https://www.hiruna.dev/api/og?title=Portfolio%20Projects&subtitle=Modern%20Web%20Applications%20%26%20Software%20Solutions"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Hiruna Gallage Portfolio - Software Engineer Projects"/><meta property="og:image:type" content="image/png"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Portfolio - Hiruna Gallage | Software Engineer Projects"/><meta name="twitter:description" content="Explore my portfolio of full-stack development projects and innovative software solutions."/><meta name="twitter:image" content="https://www.hiruna.dev/api/og?title=Portfolio%20Projects&subtitle=Modern%20Web%20Applications%20%26%20Software%20Solutions"/><link rel="icon" href="/favicon.ico?favicon.5b396582.ico" sizes="32x32" type="image/x-icon"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/icon1.png" sizes="32x32" type="image/png"/><link rel="icon" href="/icon0.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-icon.png" sizes="180x180" type="image/png"/><link rel="mask-icon" href="/icon0.svg" color="#000000"/>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Hiruna Gallage","jobTitle":"Software Engineer","description":"Software Engineer specializing in modern web applications, scalable systems, and AI-integrated products","url":"https://www.hiruna.dev","image":"https://www.hiruna.dev/api/og","sameAs":["https://github.com/hirunaofficial","https://linkedin.com/in/hirunaofficial","https://medium.com/@hirunaofficial"],"address":{"@type":"PostalAddress","addressLocality":"Colombo","addressRegion":"Western Province","addressCountry":"Sri Lanka"},"email":"[email protected]","worksFor":{"@type":"Organization","name":"Olee AI LLC","url":"https://olee.ai"},"alumniOf":{"@type":"EducationalOrganization","name":"Cardiff Metropolitan University"},"knowsAbout":["JavaScript","TypeScript","React","Next.js","Node.js","Python","Web Development","Software Engineering","Database Design","API Development","Mobile Application Development","Cloud Computing","DevOps","Google Vertex AI","Gemini","Model Context Protocol (MCP)","Agentic AI Systems"],"hasOccupation":{"@type":"Occupation","name":"Software Engineer","occupationLocation":{"@type":"City","name":"Colombo, Sri Lanka"},"skills":["React Development","Next.js Development","Node.js Development","JavaScript Programming","TypeScript Programming","Database Design","API Development","Web Application Development"]}}</script>
1<script> 2 (function() { 3 try { 4 var theme = localStorage.getItem('theme'); 5 if (theme) { 6 document.documentElement.classList.add(theme); 7 } else { 8 document.documentElement.classList.add('light'); 9 } 10 } catch (e) {} 11 })(); 12 </script>
12<script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script>
12</head><body class="geist_2ae47f08-module__h69qWW__variable geist_mono_eb58308d-module__w_p2Lq__variable antialiased min-h-screen transition-colors duration-300"><div hidden=""><!--$--><!--/$--></div><div class="fixed inset-0 z-[10000] flex items-center justify-center bg-white dark:bg-black"><div class="w-12 h-12 rounded-xl overflow-hidden border border-zinc-200 dark:border-zinc-700" style="opacity:0;transform:scale(0.9)"><img alt="Hiruna Gallage" width="48" height="48" decoding="async" data-nimg="1" class="w-full h-full object-cover" style="color:transparent" srcSet="/_next/image?url=%2Fhiruna-gallage.png&w=48&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=96&q=75 2x" src="/_next/image?url=%2Fhiruna-gallage.png&w=96&q=75"/></div></div><div class="flex flex-col min-h-screen"><header class="fixed top-0 left-0 right-0 z-[9999] backdrop-blur-xl border-b transition-all duration-300 bg-white/80 border-transparent dark:bg-black/80"><nav class="max-w-6xl mx-auto px-4 h-14 sm:h-16 flex items-center justify-between gap-4"><a class="flex items-center gap-2.5 flex-shrink-0 transition-transform duration-150 active:scale-[0.97]" href="/"><div class="w-7 h-7 sm:w-8 sm:h-8 rounded-lg overflow-hidden flex-shrink-0 border border-zinc-200 dark:border-zinc-700"><img alt="Hiruna Gallage" width="32" height="32" decoding="async" data-nimg="1" class="w-full h-full object-cover" style="color:transparent" srcSet="/_next/image?url=%2Fhiruna-gallage.png&w=32&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=64&q=75 2x" src="/_next/image?url=%2Fhiruna-gallage.png&w=64&q=75"/></div><span class="text-sm font-medium tracking-tight text-black dark:text-white">hiruna.dev</span></a><div class="hidden lg:flex items-center gap-1"><a class="px-3.5 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] text-zinc-500 hover:text-black hover:bg-black/5 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/6" href="/">Home</a><a class="px-3.5 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] text-zinc-500 hover:text-black hover:bg-black/5 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/6" href="/about">About</a><a class="px-3.5 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] text-black bg-black/8 dark:text-white dark:bg-white/10" href="/portfolio">Portfolio</a><a class="px-3.5 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] text-zinc-500 hover:text-black hover:bg-black/5 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/6" href="/blog">Blog</a><a class="px-3.5 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] text-zinc-500 hover:text-black hover:bg-black/5 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/6" href="/contact">Contact</a></div><div class="flex items-center gap-2"><div class="hidden lg:flex items-center gap-2"><a href="/hiruna-gallage-resume.pdf" target="_blank" rel="noopener noreferrer" class="px-4 py-2 rounded-lg text-sm font-medium transition-all duration-150 active:scale-[0.96] bg-black text-white hover:bg-zinc-900 dark:bg-white dark:text-black dark:hover:bg-zinc-100">Resume</a><a href="https://linkedin.com/in/hirunaofficial" target="_blank" rel="noopener noreferrer" class="w-9 h-9 rounded-lg flex items-center justify-center transition-all duration-150 active:scale-[0.93] border border-zinc-200 text-zinc-500 hover:text-black hover:border-zinc-300 dark:border-zinc-700/60 dark:text-zinc-400 dark:hover:text-white dark:hover:border-zinc-600" aria-label="LinkedIn"><svg class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a></div><button class="w-9 h-9 rounded-lg flex items-center justify-center transition-colors text-zinc-500 hover:text-black hover:bg-black/6 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/8" aria-label="Toggle theme" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun w-4 h-4 hidden dark:block" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon w-4 h-4 dark:hidden" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button><button class="lg:hidden w-9 h-9 rounded-lg flex items-center justify-center transition-colors text-zinc-500 hover:text-black hover:bg-black/6 dark:text-zinc-400 dark:hover:text-white dark:hover:bg-white/8" aria-label="Toggle menu" tabindex="0"><div style="opacity:1;transform:none"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu w-4 h-4" aria-hidden="true"><path d="M4 12h16"></path><path d="M4 18h16"></path><path d="M4 6h16"></path></svg></div></button></div></nav></header><main class="flex-grow pt-16">
12<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"Hiruna Gallage Portfolio","description":"Portfolio of full-stack development projects by Hiruna Gallage","url":"https://www.hiruna.dev/portfolio","about":{"@type":"Person","name":"Hiruna Gallage","jobTitle":"Software Engineer"},"mainEntity":{"@type":"ItemList","name":"Development Projects","description":"Collection of web development projects and applications"}}</script>
12<div class="min-h-screen bg-white dark:bg-black transition-colors duration-300"><section class="max-w-6xl mx-auto px-4 pt-20 sm:pt-28 pb-12 sm:pb-20"><div class="flex flex-col sm:flex-row sm:items-end sm:justify-between gap-6"><div><p class="text-xs font-semibold tracking-widest uppercase mb-4 text-zinc-500" style="opacity:0;transform:translateY(14px)">Web Projects</p><h1 class="font-bold tracking-tight text-black dark:text-white" style="font-size:clamp(3rem, 8vw, 6rem);line-height:0.95;opacity:0;transform:translateY(22px)">Portfolio</h1></div><div style="opacity:0;transform:translateY(16px)"><a href="https://github.com/hirunaofficial" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-5 py-2.5 rounded-xl font-medium text-sm transition-all bg-black text-white hover:bg-zinc-900 dark:bg-white dark:text-black dark:hover:bg-zinc-100" tabindex="0"><svg class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"></path></svg> View on GitHub</a></div></div></section><section class="border-t border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50/60 dark:bg-zinc-950"><div class="max-w-6xl mx-auto px-4 py-8 sm:py-10"><div class="grid grid-cols-2 sm:grid-cols-4 gap-4 sm:gap-6"><div class="" style="opacity:0;transform:translateY(28px)"><div class="flex items-center gap-3 p-4 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-4 h-4 text-zinc-500" aria-hidden="true"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div><div><p class="text-[11px] text-zinc-500 mb-0.5">Repositories</p><div class="animate-pulse rounded h-5 w-12 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="flex items-center gap-3 p-4 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star w-4 h-4 text-zinc-500" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg></div><div><p class="text-[11px] text-zinc-500 mb-0.5">Stars Earned</p><div class="animate-pulse rounded h-5 w-12 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="flex items-center gap-3 p-4 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-fork w-4 h-4 text-zinc-500" aria-hidden="true"><circle cx="12" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9"></path><path d="M12 12v3"></path></svg></div><div><p class="text-[11px] text-zinc-500 mb-0.5">Forks</p><div class="animate-pulse rounded h-5 w-12 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="flex items-center gap-3 p-4 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up w-4 h-4 text-zinc-500" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg></div><div><p class="text-[11px] text-zinc-500 mb-0.5">Contributions</p><div class="animate-pulse rounded h-5 w-12 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div></div></div></section><section class="max-w-6xl mx-auto px-4 pt-14 sm:pt-16 pb-0"><div class="" style="opacity:0;transform:translateY(28px)"><a href="https://committers.top/sri_lanka_private" target="_blank" rel="noopener noreferrer" class="group flex items-center gap-4 p-4 sm:p-5 rounded-2xl border transition-all duration-200 bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60 hover:border-zinc-300 not-dark:hover:shadow-sm dark:hover:border-zinc-600 dark:hover:bg-zinc-800/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-award w-4 h-4 text-zinc-500" aria-hidden="true"><path d="m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526"></path><circle cx="12" cy="8" r="6"></circle></svg></div><div class="flex-1 min-w-0"><p class="text-sm font-semibold text-black dark:text-white">Sri Lanka Top GitHub Contributor ð±ð°</p><p class="text-xs text-zinc-500">Recognized among top GitHub contributors in Sri Lanka · committers.top</p></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link w-4 h-4 flex-shrink-0 text-zinc-500 opacity-0 group-hover:opacity-100 transition-opacity" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div><div class="mt-3" style="opacity:0;transform:translateY(28px)"><a href="https://github.com/hirunaofficial/ieee-codex-web-app" target="_blank" rel="noopener noreferrer" class="group flex items-center gap-4 p-4 sm:p-5 rounded-2xl border transition-all duration-200 bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60 hover:border-zinc-300 not-dark:hover:shadow-sm dark:hover:border-zinc-600 dark:hover:bg-zinc-800/60"><div class="w-9 h-9 rounded-xl flex items-center justify-center flex-shrink-0 bg-zinc-100 dark:bg-zinc-800">
12<svg class="w-4 h-4 text-zinc-500" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"></path></svg></div><div class="flex-1 min-w-0"><p class="text-sm font-semibold text-black dark:text-white">Want to see actual code, not just live sites?</p><p class="text-xs text-zinc-500">Most work below is under client NDA - the IEEE CodeX Sri Lanka repo is public and open-source</p></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link w-4 h-4 flex-shrink-0 text-zinc-500 opacity-0 group-hover:opacity-100 transition-opacity" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></section><section class="max-w-6xl mx-auto px-4 py-16 sm:py-20"><div class="mb-8" style="opacity:0;transform:translateY(28px)"><div class="flex items-center justify-between gap-4"><div><p class="text-xs font-semibold tracking-widest uppercase mb-2 text-zinc-500">Activity</p><h2 class="text-2xl sm:text-3xl font-bold tracking-tight text-black dark:text-white">Contribution Graph</h2></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-6 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="grid grid-cols-2 sm:grid-cols-4 gap-4"><div class="p-4 rounded-xl bg-zinc-50 dark:bg-zinc-800/50"><div class="animate-pulse rounded h-3 w-14 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-6 w-10 bg-zinc-100 dark:bg-zinc-800"></div></div><div class="p-4 rounded-xl bg-zinc-50 dark:bg-zinc-800/50"><div class="animate-pulse rounded h-3 w-14 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-6 w-10 bg-zinc-100 dark:bg-zinc-800"></div></div><div class="p-4 rounded-xl bg-zinc-50 dark:bg-zinc-800/50"><div class="animate-pulse rounded h-3 w-14 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-6 w-10 bg-zinc-100 dark:bg-zinc-800"></div></div><div class="p-4 rounded-xl bg-zinc-50 dark:bg-zinc-800/50"><div class="animate-pulse rounded h-3 w-14 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-6 w-10 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div></div></section><section class="border-t border-zinc-200 dark:border-zinc-800 py-14 sm:py-20"><div class="max-w-6xl mx-auto px-4"><div class="mb-10" style="opacity:0;transform:translateY(28px)"><p class="text-xs font-semibold tracking-widest uppercase mb-3 text-zinc-500">Experience</p><h2 class="text-3xl sm:text-4xl font-bold tracking-tight text-black dark:text-white">Professional Engineering</h2></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-6 rounded-2xl border bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="flex items-start gap-4 mb-5"><div class="w-12 h-12 rounded-xl overflow-hidden flex-shrink-0 border bg-white border-zinc-200 dark:bg-zinc-800 dark:border-zinc-700"><img alt="Olee AI" loading="lazy" width="48" height="48" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" srcSet="/_next/image?url=%2Folee-ai-logo.png&w=48&q=75 1x, /_next/image?url=%2Folee-ai-logo.png&w=96&q=75 2x" src="/_next/image?url=%2Folee-ai-logo.png&w=96&q=75"/></div><div class="flex-1 min-w-0"><div class="flex flex-wrap items-center gap-2 mb-0.5"><h3 class="font-bold text-base text-black dark:text-white">Olee AI LLC</h3><span class="text-[10px] font-semibold px-2 py-0.5 rounded-full bg-emerald-50 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-400">Current</span></div><p class="text-sm font-medium text-zinc-500">Software Engineer · Aug 2025 â Present</p><p class="text-xs text-zinc-500">Intern Software Engineer · Feb â Jul 2025 · Colombo, Sri Lanka</p></div></div><p class="text-sm leading-relaxed mb-5 text-zinc-500">Building production-grade software at a technology company - delivering backend systems, AI-integrated applications, and full-stack platforms used in real enterprise environments.</p><div class="grid grid-cols-1 sm:grid-cols-2 gap-3 mb-5"><div class="p-3.5 rounded-xl bg-zinc-50 dark:bg-zinc-800/60"><p class="text-xs font-semibold mb-0.5 text-black dark:text-white">Backend Systems</p><p class="text-[11px] text-zinc-500">REST APIs, database architecture, microservices</p></div><div class="p-3.5 rounded-xl bg-zinc-50 dark:bg-zinc-800/60"><p class="text-xs font-semibold mb-0.5 text-black dark:text-white">AI Integration</p><p class="text-[11px] text-zinc-500">LLM-powered features, automation pipelines</p></div><div class="p-3.5 rounded-xl bg-zinc-50 dark:bg-zinc-800/60"><p class="text-xs font-semibold mb-0.5 text-black dark:text-white">Full-Stack Development</p><p class="text-[11px] text-zinc-500">Next.js, Node.js, PostgreSQL, React</p></div><div class="p-3.5 rounded-xl bg-zinc-50 dark:bg-zinc-800/60"><p class="text-xs font-semibold mb-0.5 text-black dark:text-white">Enterprise Applications</p><p class="text-[11px] text-zinc-500">Admin platforms, business tools, dashboards</p></div></div><div class="flex flex-wrap gap-1.5"><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">Next.js</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">Node.js</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">TypeScript</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">PostgreSQL</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">DynamoDB</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">
12Docker</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">AWS</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">OpenAI</span><span class="px-2 py-0.5 rounded-md text-[11px] font-medium bg-white text-zinc-500 not-dark:border not-dark:border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400">Vertex AI</span></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><p class="text-xs leading-relaxed mt-4 text-zinc-500">Prior to that, independent development work (2020 â 2024, remote) - 100+ small full-stack projects for clients across 20+ countries.</p></div></div></section><section class="border-t border-zinc-200 dark:border-zinc-800 py-14 sm:py-20 bg-zinc-50/60 dark:bg-zinc-950"><div class="max-w-6xl mx-auto px-4"><div class="mb-10" style="opacity:0;transform:translateY(28px)"><p class="text-xs font-semibold tracking-widest uppercase mb-3 text-zinc-500">Capabilities</p><h2 class="text-3xl sm:text-4xl font-bold tracking-tight text-black dark:text-white">Core Technologies</h2></div><div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-5 gap-4"><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-4 rounded-2xl border h-full bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><p class="text-[10px] font-semibold tracking-widest uppercase mb-3 text-zinc-500">
12Backend</p><div class="space-y-1.5"><p class="text-xs font-medium text-black dark:text-white">Node.js</p><p class="text-xs font-medium text-black dark:text-white">Express.js</p><p class="text-xs font-medium text-black dark:text-white">REST APIs</p><p class="text-xs font-medium text-black dark:text-white">GraphQL</p><p class="text-xs font-medium text-black dark:text-white">Python</p></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-4 rounded-2xl border h-full bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><p class="text-[10px] font-semibold tracking-widest uppercase mb-3 text-zinc-500">Frontend</p><div class="space-y-1.5"><p class="text-xs font-medium text-black dark:text-white">Next.js</p><p class="text-xs font-medium text-black dark:text-white">React</p><p class="text-xs font-medium text-black dark:text-white">TypeScript</p><p class="text-xs font-medium text-black dark:text-white">Tailwind CSS</p><p class="text-xs font-medium text-black dark:text-white">HTML/CSS</p></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-4 rounded-2xl border h-full bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><p class="text-[10px] font-semibold tracking-widest uppercase mb-3 text-zinc-500">Database</p><div class="space-y-1.5"><p class="text-xs font-medium text-black dark:text-white">PostgreSQL</p><p class="text-xs font-medium text-black dark:text-white">MongoDB</p><p class="text-xs font-medium text-black dark:text-white">DynamoDB</p><p class="text-xs font-medium text-black dark:text-white">MySQL</p><p class="text-xs font-medium text-black dark:text-white">Redis</p><p class="text-xs font-medium text-black dark:text-white">Supabase</p></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-4 rounded-2xl border h-full bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><p class="text-[10px] font-semibold tracking-widest uppercase mb-3 text-zinc-500">Infrastructure</p><div class="space-y-1.5"><p class="text-xs font-medium text-black dark:text-white">Docker</p><p class="text-xs font-medium text-black dark:text-white">Jenkins</p><p class="text-xs font-medium text-black dark:text-white">Linux</p><p class="text-xs font-medium text-black dark:text-white">Nginx</p><p class="text-xs font-medium text-black dark:text-white">VPS</p><p class="text-xs font-medium text-black dark:text-white">CI/CD</p></div></div></div><div class="" style="opacity:0;transform:translateY(28px)"><div class="p-4 rounded-2xl border h-full bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><p class="text-[10px] font-semibold tracking-widest uppercase mb-3 text-zinc-500">AI & Cloud</p><div class="space-y-1.5"><p class="text-xs font-medium text-black dark:text-white">OpenAI API</p><p class="text-xs font-medium text-black dark:text-white">Vertex AI</p><p class="text-xs font-medium text-black dark:text-white">LangChain</p><p class="text-xs font-medium text-black dark:text-white">AWS</p><p class="text-xs font-medium text-black dark:text-white">S3</p><p class="text-xs font-medium text-black dark:text-white">AI Agents</p><p class="text-xs font-medium text-black dark:text-white">Automation</p></div></div></div></div></div></section><section class="border-t border-zinc-200 dark:border-zinc-800 py-16 sm:py-20 bg-zinc-50/60 dark:bg-zinc-950"><div class="max-w-6xl mx-auto px-4"><div class="flex items-end justify-between mb-10" style="opacity:0;transform:translateY(28px)"><div><p class="text-xs font-semibold tracking-widest uppercase mb-3 text-zinc-500">Projects</p><h2 class="text-3xl sm:text-4xl font-bold tracking-tight text-black dark:text-white">Featured Projects</h2></div></div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5"><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div><div class="rounded-2xl border overflow-hidden bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-700/60"><div class="animate-pulse rounded w-full aspect-video bg-zinc-100 dark:bg-zinc-800"></div><div class="p-5"><div class="animate-pulse rounded h-4 w-32 mb-2 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-full mb-1.5 bg-zinc-100 dark:bg-zinc-800"></div><div class="animate-pulse rounded h-3 w-2/3 bg-zinc-100 dark:bg-zinc-800"></div></div></div></div></div></section><section class="border-t border-zinc-200 dark:border-zinc-800 bg-zinc-50/60 dark:bg-zinc-950"><div class="max-w-6xl mx-auto px-4 py-20 sm:py-24"><div class="text-center" style="opacity:0;transform:translateY(28px)"><p class="text-xs font-semibold tracking-widest uppercase mb-4 text-zinc-500">Professional Network</p><h2 class="text-3xl sm:text-4xl font-bold tracking-tight mb-5 text-black dark:text-white">Let's connect.</h2><p class="text-lg mb-10 max-w-lg mx-auto text-zinc-500">Open to software engineering opportunities, technical discussions, and open-source collaboration.</p><div class="flex flex-wrap items-center justify-center gap-3"><a href="/hiruna-gallage-resume.pdf" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-7 py-3.5 rounded-xl font-medium transition-all bg-black text-white hover:bg-zinc-900 dark:bg-white dark:text-black dark:hover:bg-zinc-100" tabindex="0">View Resume <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-4 h-4" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="https://linkedin.com/in/hirunaofficial" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-7 py-3.5 rounded-xl font-medium transition-all border border-zinc-200 text-black hover:bg-zinc-50 hover:border-zinc-300 dark:border-zinc-700 dark:text-white dark:hover:bg-zinc-900 dark:hover:border-zinc-600" tabindex="0">LinkedIn Profile</a></div></div></div></section></div><!--$--><!--/$--></main><footer class="border-t border-zinc-200 dark:border-zinc-800 transition-colors duration-300"><div class="max-w-6xl mx-auto px-4 py-12 sm:py-16"><div class="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-8 mb-12"><div class="max-w-xs"><a class="inline-flex items-center gap-2.5 mb-3 transition-transform duration-150 active:scale-[0.97]" href="/"><div class="w-7 h-7 rounded-lg overflow-hidden flex-shrink-0 border border-zinc-200 dark:border-zinc-700"><img alt="Hiruna Gallage" loading="lazy" width="28" height="28" decoding="async" data-nimg="1" class="w-full h-full object-cover" style="color:transparent" srcSet="/_next/image?url=%2Fhiruna-gallage.png&w=32&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=64&q=75 2x" src="/_next/image?url=%2Fhiruna-gallage.png&w=64&q=75"/></div><span class="text-sm font-medium text-black dark:text-white">hiruna.dev</span></a><p class="text-sm leading-relaxed text-zinc-500">Software Engineer building scalable products, backend systems, and AI-powered a
12pplications.</p></div><div class="flex flex-wrap gap-x-6 gap-y-2"><a class="text-sm transition-all duration-150 active:scale-[0.96] inline-block text-zinc-500 hover:text-black dark:hover:text-white" href="/">Home</a><a class="text-sm transition-all duration-150 active:scale-[0.96] inline-block text-zinc-500 hover:text-black dark:hover:text-white" href="/about">About</a><a class="text-sm transition-all duration-150 active:scale-[0.96] inline-block text-zinc-500 hover:text-black dark:hover:text-white" href="/portfolio">Portfolio</a><a class="text-sm transition-all duration-150 active:scale-[0.96] inline-block text-zinc-500 hover:text-black dark:hover:text-white" href="/blog">Blog</a><a class="text-sm transition-all duration-150 active:scale-[0.96] inline-block text-zinc-500 hover:text-black dark:hover:text-white" href="/contact">Contact</a></div><div class="flex items-center gap-2"><a href="https://github.com/hirunaofficial" target="_blank" rel="noopener noreferrer" aria-label="GitHub" class="w-9 h-9 rounded-xl flex items-center justify-center border transition-all border-zinc-200 text-zinc-400 hover:border-zinc-300 hover:text-black dark:border-zinc-700/60 dark:text-zinc-500 dark:hover:border-zinc-600 dark:hover:text-white" tabindex="0"><svg class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://linkedin.com/in/hirunaofficial" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" class="w-9 h-9 rounded-xl flex items-center justify-center border transition-all border-zinc-200 text-zinc-400 hover:border-zinc-300 hover:text-black dark:border-zinc-700/60 dark:text-zinc-500 dark:hover:border-zinc-600 dark:hover:text-white" tabindex="0"><svg class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a href="mailto:[email protected]" aria-label="Email" class="w-9 h-9 rounded-xl flex items-center justify-center border transition-all border-zinc-200 text-zinc-400 hover:border-zinc-300 hover:text-black dark:border-zinc-700/60 dark:text-zinc-500 dark:hover:border-zinc-600 dark:hover:text-white" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mail w-4 h-4" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7"></path><rect x="2" y="4" width="20" height="16" rx="2"></rect></svg></a></div></div><div class="flex flex-col sm:flex-row items-center justify-between gap-4 pt-8 border-t border-zinc-200 dark:border-zinc-800"><p class="text-xs text-center sm:text-left text-zinc-500">© <!-- -->2026<!-- --> Hiruna Gallage. All rights reserved.</p><button class="inline-flex items-center gap-2 px-4 py-2 rounded-lg text-xs font-medium transition-all border border-zinc-200 text-zinc-500 hover:border-zinc-300 hover:text-black dark:border-zinc-700/60 dark:text-zinc-400 dark:hover:border-zinc-600 dark:hover:text-white" tabindex="0">Back to top <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up w-3 h-3" aria-hidden="true"><path d="m5 12 7-7 7 7"></path><path d="M12 19V5"></path></svg></button></div></div></footer></div><button class="fixed z-[10001] bottom-4 right-4 sm:bottom-6 sm:right-6 w-14 h-14 roun
12ded-2xl overflow-hidden border-2 shadow-xl transition-shadow border-zinc-200 dark:border-zinc-700" aria-label="Chat with Hiruna's AI" tabindex="0"><img alt="Chat with Hiruna's AI" width="56" height="56" decoding="async" data-nimg="1" class="w-full h-full object-cover" style="color:transparent" srcSet="/_next/image?url=%2Fhiruna-gallage.png&w=64&q=75 1x, /_next/image?url=%2Fhiruna-gallage.png&w=128&q=75 2x" src="/_next/image?url=%2Fhiruna-gallage.png&w=128&q=75"/><span class="absolute bottom-1 right-1 w-3 h-3 rounded-full border-2 border-white dark:border-black"><span class="absolute inset-0 rounded-full bg-emerald-500"></span><span class="absolute inset-0 rounded-full bg-emerald-500"></span></span></button>
12<script src="/_next/static/chunks/20a20bc7bec3ddde.js" id="_R_" async=""></script>
12<script>(self.__next_f=self.__next_f||[]).push([0])</script>
12<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[10494,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"ThemeProvider\"]\n4:I[83807,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"default\"]\n5:I[91711,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"default\"]\n6:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"default\"]\n7:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"default\"]\n8:I[57390,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\",\"/_next/static/chunks/778e7233350936d2.js\"],\"default\"]\n9:I[40238,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"default\"]\na:I[86849,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"default\"]\ne:I[68027,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\"],\"default\"]\n:HL[\"/_next/static/chunks/babf37abb0a806b0.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.29207c2f.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:T553,"])</script>
12<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@type\":\"Person\",\"name\":\"Hiruna Gallage\",\"jobTitle\":\"Software Engineer\",\"description\":\"Software Engineer specializing in modern web applications, scalable systems, and AI-integrated products\",\"url\":\"https://www.hiruna.dev\",\"image\":\"https://www.hiruna.dev/api/og\",\"sameAs\":[\"https://github.com/hirunaofficial\",\"https://linkedin.com/in/hirunaofficial\",\"https://medium.com/@hirunaofficial\"],\"address\":{\"@type\":\"PostalAddress\",\"addressLocality\":\"Colombo\",\"addressRegion\":\"Western Province\",\"addressCountry\":\"Sri Lanka\"},\"email\":\"[email protected]\",\"worksFor\":{\"@type\":\"Organization\",\"name\":\"Olee AI LLC\",\"url\":\"https://olee.ai\"},\"alumniOf\":{\"@type\":\"EducationalOrganization\",\"name\":\"Cardiff Metropolitan University\"},\"knowsAbout\":[\"JavaScript\",\"TypeScript\",\"React\",\"Next.js\",\"Node.js\",\"Python\",\"Web Development\",\"Software Engineering\",\"Database Design\",\"API Development\",\"Mobile Application Development\",\"Cloud Computing\",\"DevOps\",\"Google Vertex AI\",\"Gemini\",\"Model Context Protocol (MCP)\",\"Agentic AI Systems\"],\"hasOccupation\":{\"@type\":\"Occupation\",\"name\":\"Software Engineer\",\"occupationLocation\":{\"@type\":\"City\",\"name\":\"Colombo, Sri Lanka\"},\"skills\":[\"React Development\",\"Next.js Development\",\"Node.js Development\",\"JavaScript Programming\",\"TypeScript Programming\",\"Database Design\",\"API Development\",\"Web Application Development\"]}}"])</script>
12<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"sTjfaZVACxuH8NGVLDoip\",\"p\":\"\",\"c\":[\"\",\"portfolio\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"portfolio\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/babf37abb0a806b0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/e8330230854378e0.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/685d71e394d561ca.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n var theme = localStorage.getItem('theme');\\n if (theme) {\\n document.documentElement.classList.add(theme);\\n } else {\\n document.documentElement.classList.add('light');\\n }\\n } catch (e) {}\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_2ae47f08-module__h69qWW__variable geist_mono_eb58308d-module__w_p2Lq__variable antialiased min-h-screen transition-colors duration-300\",\"children\":[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"div\",null,{\"className\":\"flex flex-col min-h-screen\",\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-grow pt-16\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L8\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L9\",null,{}]]}],[\"$\",\"$La\",null,{}]]}]}]]}]]}],{\"children\":[\"portfolio\",[\"$\",\"$1\",\"c\",{\"children\":[null,[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"CollectionPage\\\",\\\"name\\\":\\\"Hiruna Gallage Portfolio\\\",\\\"description\\\":\\\"Portfolio of full-stack development projects by Hiruna Gallage\\\",\\\"url\\\":\\\"https://www.hiruna.dev/portfolio\\\",\\\"about\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Hiruna Gallage\\\",\\\"jobTitle\\\":\\\"Software Engineer\\\"},\\\"mainEntity\\\":{\\\"@type\\\":\\\"ItemList\\\",\\\"name\\\":\\\"Development Projects\\\",\\\"description\\\":\\\"Collection of web development projects and applications\\\"}}\"}}],\"$Lb\"]]}],{\"children\":[\"__PAGE__\",\"$Lc\",{},null,false]},null,false]},null,false],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"s\":false,\"S\":true}\n"])</script>
12<script>self.__next_f.push([1,"10:I[47257,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"ClientPageRoot\"]\n11:I[70138,[\"/_next/static/chunks/c6bf19f4878eee1e.js\",\"/_next/static/chunks/e8330230854378e0.js\",\"/_next/static/chunks/685d71e394d561ca.js\",\"/_next/static/chunks/ebb1d953ea00736b.js\"],\"default\"]\n14:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"OutletBoundary\"]\n16:I[11533,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"AsyncMetadataOutlet\"]\n18:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"ViewportBoundary\"]\n1a:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"MetadataBoundary\"]\n1b:\"$Sreact.suspense\"\nb:[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\nc:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L10\",null,{\"Component\":\"$11\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@12\",\"$@13\"]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ebb1d953ea00736b.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L14\",null,{\"children\":[\"$L15\",[\"$\",\"$L16\",null,{\"promise\":\"$@17\"}]]}]]}]\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$1b\",null,{\"fallback\":null,\"children\":\"$L1c\"}]}]}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/babf37abb0a806b0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script>
12<script>self.__next_f.push([1,"12:{}\n13:\"$c:props:children:0:props:params\"\n"])</script>
12<script>self.__next_f.push([1,"19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=5, viewport-fit=cover, user-scalable=yes\"}]]\n15:null\n"])</script>
12<script>self.__next_f.push([1,"1d:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/7dd66bdf8a7e5707.js\"],\"IconMark\"]\n"])</script>
12<script>self.__next_f.push([1,"17:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Portfolio - Hiruna Gallage | Software Engineer Projects | Hiruna Gallage\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Explore Hiruna Gallage\u0026apos;s portfolio of full-stack development projects. Discover modern web applications, React projects, Next.js applications, Node.js APIs, and innovative software solutions built with cutting-edge technologies.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"Hiruna Gallage\"}],[\"$\",\"link\",\"3\",{\"rel\":\"author\",\"href\":\"https://www.hiruna.dev\"}],[\"$\",\"meta\",\"4\",{\"name\":\"author\",\"content\":\"Hiruna Gallage\"}],[\"$\",\"link\",\"5\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"6\",{\"name\":\"keywords\",\"content\":\"Hiruna Gallage Portfolio,Software Engineer Projects,React Projects,Next.js Applications,Node.js APIs,Web Development Portfolio,JavaScript Projects,TypeScript Applications,Modern Web Apps,Software Development Projects,GitHub Repositories,Professional Web Projects,Web Applications,API Development,Database Projects,Developer Showcase,Code Examples,Programming Portfolio,Project Gallery,Development Showcase,Tech Portfolio,Software Solutions,Web App Examples,Development Work\"}],[\"$\",\"meta\",\"7\",{\"name\":\"creator\",\"content\":\"Hiruna Gallage\"}],[\"$\",\"meta\",\"8\",{\"name\":\"publisher\",\"content\":\"Hiruna Gallage\"}],[\"$\",\"meta\",\"9\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"10\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"11\",{\"name\":\"category\",\"content\":\"technology\"}],[\"$\",\"meta\",\"12\",{\"name\":\"classification\",\"content\":\"Personal Website\"}],[\"$\",\"link\",\"13\",{\"rel\":\"canonical\",\"href\":\"https://www.hiruna.dev/portfolio\"}],[\"$\",\"meta\",\"14\",{\"name\":\"format-detection\",\"content\":\"telephone=no, address=no, email=no\"}],[\"$\",\"meta\",\"15\",{\"name\":\"me\",\"content\":\"[email protected]\"}],[\"$\",\"meta\",\"16\",{\"name\":\"me\",\"content\":\"https://www.hiruna.dev\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:title\",\"content\":\"Portfolio - Hiruna Gallage | Software Engineer Projects\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:description\",\"content\":\"Explore my portfolio of full-stack development projects including modern web applications, APIs, and innovative software solutions.\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:url\",\"content\":\"https://www.hiruna.dev/portfolio\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:image\",\"content\":\"https://www.hiruna.dev/api/og?title=Portfolio%20Projects\u0026subtitle=Modern%20Web%20Applications%20%26%20Software%20Solutions\"}],[\"$\",\"meta\",\"21\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"22\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"23\",{\"property\":\"og:image:alt\",\"content\":\"Hiruna Gallage Portfolio - Software Engineer Projects\"}],[\"$\",\"meta\",\"24\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"25\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:title\",\"content\":\"Portfolio - Hiruna Gallage | Software Engineer Projects\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:description\",\"content\":\"Explore my portfolio of full-stack development projects and innovative software solutions.\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:image\",\"content\":\"https://www.hiruna.dev/api/og?title=Portfolio%20Projects\u0026subtitle=Modern%20Web%20Applications%20%26%20Software%20Solutions\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.5b396582.ico\",\"sizes\":\"32x32\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"31\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"32\",{\"rel\":\"icon\",\"href\":\"/icon1.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"33\",{\"rel\":\"icon\",\"href\":\"/icon0.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"34\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"link\",\"35\",{\"rel\":\"mask-icon\",\"href\":\"/icon0.svg\",\"color\":\"#000000\"}],[\"$\",\"$L1d\",\"36\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
12<script>self.__next_f.push([1,"1c:\"$17:metadata\"\n"])</script>
12</body></html>
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.