{"data":{"featured":{"edges":[{"node":{"frontmatter":{"title":"cmms-sage — Domain-Specific RAG Agent","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAABJ0AAASdAHeZh94AAABvElEQVQoz02QO28TURCF9x+Asumhhr8C2CW0EWTp0kaipKCBgpIWiR5EBERKKAAZApFxyGLMWl7jt732vu/uzNwn2g0Fn45GM8XRORrr0t0b207z6t6d6/s71/Z3ruzdtu83bae55TQuZDvNbadpV0vD3q3lNLZ2b12+d9M6H/Zb/s/n7sdnrXdH3fZpv9vu/+r4njv2K40GnwfdF+6nlud+HXudme/Ohz9m/tlkcDb0LKOkkCLAbMMyIThxIiKtlTG6klIlRy+d/w4nXjwdl8GC4qUpIg1GSQsB0iJ/435bhZswiTdJtI5Cxpg2WiqptQYhgiCcTRfLZTCdLlbLdU4mAQlQWkTIBQEAApoapVRZllrrixMFL/IVFAEUa4SQU1RizKAgIosIiGOSpkmSFEWJVWsSQiqlpFJVMqc0/hOHfhwN02SUZZOczXPIKjMiIFUWWSNENVWNVjoHYIjEsAgzwVCjUiC0NsAVIFRm4pgzlqU554JzIYTgnKs6VkjJCN+Pe4ej7vG492HWP570Xg3Oe2EgOf0zVyWlkv9h6ncbYwqOT78fPTx5/ejk4PHp2yftwwdfXh74HSPVXwwizerqXeKvAAAAAElFTkSuQmCC"},"images":{"fallback":{"src":"/static/6c5f4126effe7efee04b6236462780f6/7b23a/demo.png","srcSet":"/static/6c5f4126effe7efee04b6236462780f6/b9bb2/demo.png 175w,\n/static/6c5f4126effe7efee04b6236462780f6/aa464/demo.png 350w,\n/static/6c5f4126effe7efee04b6236462780f6/7b23a/demo.png 700w,\n/static/6c5f4126effe7efee04b6236462780f6/854f5/demo.png 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/6c5f4126effe7efee04b6236462780f6/c3835/demo.avif 175w,\n/static/6c5f4126effe7efee04b6236462780f6/cdba5/demo.avif 350w,\n/static/6c5f4126effe7efee04b6236462780f6/4fdae/demo.avif 700w,\n/static/6c5f4126effe7efee04b6236462780f6/2644e/demo.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/6c5f4126effe7efee04b6236462780f6/71830/demo.webp 175w,\n/static/6c5f4126effe7efee04b6236462780f6/b0cbb/demo.webp 350w,\n/static/6c5f4126effe7efee04b6236462780f6/d2119/demo.webp 700w,\n/static/6c5f4126effe7efee04b6236462780f6/10957/demo.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":332}}},"tech":["LangChain","ReAct Agent","FastAPI","ChromaDB","Gemini","Python"],"github":"https://github.com/yfkiwi/cmms-sage","external":""},"html":"<p>A domain-specific ReAct RAG agent that accelerates onboarding in a legacy CMMS environment, encoding internal cases, schemas, and API docs into a corpus queryable in natural language. I built a 23-case evaluation set that exposed a silent failure no test caught — tool-argument casing mismatched indexed metadata, leaving 72 curated documents unretrievable. Fixing it raised retrieval pass rate from <strong>25% to 85%</strong>.</p>"}},{"node":{"frontmatter":{"title":"SpeakCanada — AI English Learning Web App","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABy0lEQVQozy2Qy08TURyF5w93585ta2LSRAYisZQao0QlVYTEmkpLRdtOCxUo0hQ6M/fOvfO478fPlHhWZ/PlOzlBvL43mgOAslAwnSYoSZAxBgBoXtwu45u/69V9bK3FCNVq9VqtXq8/D8Ow0WgEKSZKKWsN4zqvpDHGO2+N5YyRvIyJxrnOSpML/2M4GY8nSmlKqbUOYxwcvt+fTMfgvdRGVbxMUYoyKaT3UOD09KSzu/exvR1GvW9fDt5NpzMAcM4BwAa+mY0QSvVjeMVLSgnNK8Yd4yRJRuPotH/+s9/nJF5eRaPxRBujtd7ACAfWe+vBA1jrKHeIsHidxOuUM1EywYX6OlFbJ6I1gLCzvJhtzMZYAEAIBxfdz/T7wdv27vBsUHCT0YqQgtDisZd3y/X57KH7azWYpr3hPIqmQiil5P/ZvU9vcPfFs6dPdpptpaCgMiO50bZkBhPGuVRSaFEC+D/Xd1E0dc4lmF0uzXyRBNY56wEAjmdu8aDKvMxIAVb3L9XgsgKwSiitdMZg+/B2Pp8DwNVK7xzpowEKpBBWKymFkEpow7kgJFfKaG2EEJtbf58dd64XFAqSvNwKm829/dbrzod2q/nqH90W5I85SpawAAAAAElFTkSuQmCC"},"images":{"fallback":{"src":"/static/23cdf22152de0575200628a6b3b8526d/11cb0/demo.jpg","srcSet":"/static/23cdf22152de0575200628a6b3b8526d/09491/demo.jpg 175w,\n/static/23cdf22152de0575200628a6b3b8526d/98dd4/demo.jpg 350w,\n/static/23cdf22152de0575200628a6b3b8526d/11cb0/demo.jpg 700w,\n/static/23cdf22152de0575200628a6b3b8526d/2ada4/demo.jpg 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/23cdf22152de0575200628a6b3b8526d/6916e/demo.avif 175w,\n/static/23cdf22152de0575200628a6b3b8526d/bb2f9/demo.avif 350w,\n/static/23cdf22152de0575200628a6b3b8526d/2e6d1/demo.avif 700w,\n/static/23cdf22152de0575200628a6b3b8526d/ace85/demo.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/23cdf22152de0575200628a6b3b8526d/f6b1d/demo.webp 175w,\n/static/23cdf22152de0575200628a6b3b8526d/1cb72/demo.webp 350w,\n/static/23cdf22152de0575200628a6b3b8526d/15050/demo.webp 700w,\n/static/23cdf22152de0575200628a6b3b8526d/86152/demo.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":298}}},"tech":["Next.js","TypeScript","Supabase","GPT-4o","Azure Speech","Vercel"],"github":"https://github.com/yfkiwi/speak-canada","external":"https://speak-canada.vercel.app/"},"html":"<p>an AI Supported English &#x26; Culture Learning Platform with video, vocab, and AI-powered chatbot which help international students in Canada to practice everyday English in context-rich Canadian scenarios and get instant feedbacks.</p>"}},{"node":{"frontmatter":{"title":"Community Grant Assistant","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAABJ0AAASdAHeZh94AAABvElEQVQoz02QO28TURCF9x+Asumhhr8C2CW0EWTp0kaipKCBgpIWiR5EBERKKAAZApFxyGLMWl7jt732vu/uzNwn2g0Fn45GM8XRORrr0t0b207z6t6d6/s71/Z3ruzdtu83bae55TQuZDvNbadpV0vD3q3lNLZ2b12+d9M6H/Zb/s/n7sdnrXdH3fZpv9vu/+r4njv2K40GnwfdF+6nlud+HXudme/Ohz9m/tlkcDb0LKOkkCLAbMMyIThxIiKtlTG6klIlRy+d/w4nXjwdl8GC4qUpIg1GSQsB0iJ/435bhZswiTdJtI5Cxpg2WiqptQYhgiCcTRfLZTCdLlbLdU4mAQlQWkTIBQEAApoapVRZllrrixMFL/IVFAEUa4SQU1RizKAgIosIiGOSpkmSFEWJVWsSQiqlpFJVMqc0/hOHfhwN02SUZZOczXPIKjMiIFUWWSNENVWNVjoHYIjEsAgzwVCjUiC0NsAVIFRm4pgzlqU554JzIYTgnKs6VkjJCN+Pe4ej7vG492HWP570Xg3Oe2EgOf0zVyWlkv9h6ncbYwqOT78fPTx5/ejk4PHp2yftwwdfXh74HSPVXwwizerqXeKvAAAAAElFTkSuQmCC"},"images":{"fallback":{"src":"/static/6c5f4126effe7efee04b6236462780f6/7b23a/demo.png","srcSet":"/static/6c5f4126effe7efee04b6236462780f6/b9bb2/demo.png 175w,\n/static/6c5f4126effe7efee04b6236462780f6/aa464/demo.png 350w,\n/static/6c5f4126effe7efee04b6236462780f6/7b23a/demo.png 700w,\n/static/6c5f4126effe7efee04b6236462780f6/854f5/demo.png 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/6c5f4126effe7efee04b6236462780f6/c3835/demo.avif 175w,\n/static/6c5f4126effe7efee04b6236462780f6/cdba5/demo.avif 350w,\n/static/6c5f4126effe7efee04b6236462780f6/4fdae/demo.avif 700w,\n/static/6c5f4126effe7efee04b6236462780f6/2644e/demo.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/6c5f4126effe7efee04b6236462780f6/71830/demo.webp 175w,\n/static/6c5f4126effe7efee04b6236462780f6/b0cbb/demo.webp 350w,\n/static/6c5f4126effe7efee04b6236462780f6/d2119/demo.webp 700w,\n/static/6c5f4126effe7efee04b6236462780f6/10957/demo.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":332}}},"tech":["Next.js","TypeScript","FastAPI","Python","FAISS","ElevenLabs","GPT-4o","Azure"],"github":"https://github.com/yfkiwi/voicefirst","external":"https://orange-mud-07ee9a90f.3.azurestaticapps.net/"},"html":"<p>Best Future Cities award-winning AI copilot that compresses community grant writing from weeks to hours. Built Next.js/TypeScript client with reusable workflows spanning intake, research, drafting, and submission review. Engineered FastAPI backend with FAISS-powered RAG to map local documents and policy libraries to grant requirements. Delivered voice-first flows via ElevenLabs TTS/STT and GPT-4o personas, orchestrated through Azure Functions and CI/CD.</p>"}},{"node":{"frontmatter":{"title":"Snowy Weather Domain Adaptation for Monocular Depth Estimation","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACaUlEQVQozy3QXUhTYQDG8ZcSKYIoDW+CLkIIkj6goOjGpAsJIijKGSHRxNrMwJGpRRFsspTtYtKWrjW3cbY5t7Tlwa9qIJXNhJwKzZ2VOzvuLHba3NncdvZxPt4we67+t78HEOFwIBDAMIwkyVAID2LBwGowSv7mOYFjeY7lBV4QBAghjIUyHmfY7VhFkKU5FxH2UICmaYZhstksy7LFUqHEbbJcLldK8XwJ/hsvFNnSVk+9+nUCDB0uN+7aqbsCRozHZ0AymTQaXtsRm14/4B6Z/vAWH7MG1r/8iPnXZpDgBBIMz33nijSE8KMZrytznj3gqKm0N+5BTWc+g0gk0nxbLGmRXBddbqrvPAIGq4AKuTg6qfTWAO1JoHU1uKHAQAhXzD97yiyqgy7ZXuvwKXVcfQ9Eo9Huzq42adv99jab0mI9h9hrdWsGzbzOpztmtdYN+jVmJrOFZlZDOfP4vFz7ovWJRymDaTkoFooEQeA47vf7KYradiYTCXojvd0USWVSOQjh+hKN9uIK6ViLWN7VZPo2QAGKohRyuVql7utTmvVjWvXi82fe5TeLxAJm6PEZFD4MXRDYFITQa1gTAcel3a7qck3TDoe+ZgpESbJVIpXckYqbb4qvPj0E+vcDpbHeMaWYPwr6T4N+VOSEQgFC+NVC3Cofv1GFXqh0P6yYdJ6fBSRJPu5+1CF7IOtoH1bZ0IZJtNEZMllWkGX02qhHbA8O2TM0ByH0WzFdxZCp2ta7zz1Rq0i+vAtYlt1IJOLxeCwWy2Yz287NVD6Tzv/3x5l8trh1WCj2x/kp8c4bsfvS0+953PUXgbak7nC1spwAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/6025014bb50174d39f5430f2a5fc3512/51cd7/demo.jpg","srcSet":"/static/6025014bb50174d39f5430f2a5fc3512/3ea88/demo.jpg 175w,\n/static/6025014bb50174d39f5430f2a5fc3512/230e3/demo.jpg 350w,\n/static/6025014bb50174d39f5430f2a5fc3512/51cd7/demo.jpg 700w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/6025014bb50174d39f5430f2a5fc3512/19d98/demo.avif 175w,\n/static/6025014bb50174d39f5430f2a5fc3512/b52d4/demo.avif 350w,\n/static/6025014bb50174d39f5430f2a5fc3512/0ddc0/demo.avif 700w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/6025014bb50174d39f5430f2a5fc3512/eac4f/demo.webp 175w,\n/static/6025014bb50174d39f5430f2a5fc3512/3eafe/demo.webp 350w,\n/static/6025014bb50174d39f5430f2a5fc3512/f8597/demo.webp 700w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":351}}},"tech":["Python","PyTorch","Stable Diffusion","ControlNet","DepthAnything","Teacher-Student Model"],"github":"https://github.com/yfkiwi/snow_dataset_preparing","external":""},"html":"<p>How do you help self-driving cars “see” in a snowstorm? I built a synthetic-snow pipeline with ControlNet + Stable Diffusion and used a teacher–student model to transfer depth knowledge from clear weather to snow, improving depth estimates in snowy scenes.</p>"}},{"node":{"frontmatter":{"title":"Tims Cup Detection","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAABOklEQVQoz3WRi47cMAhF8/9f2Z2VOvE7fgGObajGU6mbzfbqyDKCi4zZ5piL8Zc+a6q1FAQouZScocI7vJS9mJt8EzPGGkKw2njvtdbGGB/CcUS5aWPmWkpKKeecU4JaAaEhBm201lopZx0hAUBeJaXkGGMt9WUWkXb2IyYfonXHUxll3K7tbqyxQVuvrNu1U8Yp660/jD9iKq33ZR5d0MsZKaken+QeZBfus7kPNL/IfpD7JPto9sHpt2QlLciZRXiTfkrxQrG6vYenZC1RSdxfZ1JS3cIvHGfDxXLL0mHNfLZZC0MVQiacCAucAPM8B0ufN4b0wcy8zTmptbN35vt38kkNEce79qbLqggJEa+L4x/v7/BqJgLA/xnGGN9SF/Nc+prmn4b5Z740G/2reb2lASARzTnvM/8BgFC8d32zeJ4AAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/a3e1cd0ac465238b710aeaacf9656523/91ccc/demo.jpg","srcSet":"/static/a3e1cd0ac465238b710aeaacf9656523/b5fea/demo.jpg 175w,\n/static/a3e1cd0ac465238b710aeaacf9656523/ddb3d/demo.jpg 350w,\n/static/a3e1cd0ac465238b710aeaacf9656523/91ccc/demo.jpg 700w,\n/static/a3e1cd0ac465238b710aeaacf9656523/c0336/demo.jpg 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/a3e1cd0ac465238b710aeaacf9656523/78482/demo.avif 175w,\n/static/a3e1cd0ac465238b710aeaacf9656523/e5e45/demo.avif 350w,\n/static/a3e1cd0ac465238b710aeaacf9656523/f4066/demo.avif 700w,\n/static/a3e1cd0ac465238b710aeaacf9656523/09d73/demo.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/a3e1cd0ac465238b710aeaacf9656523/98832/demo.webp 175w,\n/static/a3e1cd0ac465238b710aeaacf9656523/bccff/demo.webp 350w,\n/static/a3e1cd0ac465238b710aeaacf9656523/5d47d/demo.webp 700w,\n/static/a3e1cd0ac465238b710aeaacf9656523/36b56/demo.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":426}}},"tech":["YOLOv8","FastAPI","Docker","React","Vite","ShadCN UI","TailwindCSS","Roboflow","FiftyOne"],"github":"https://github.com/yfkiwi/timhortons-cup-detection","external":"https://huggingface.co/spaces/Eviekiwi/timhortons-cup-yolo-detection"},"html":"<p>Is that cup a real Tims? This YOLOv8 model says yes or no by recognizing the classic red-and-white design and filtering out other coffee cups. Try it and see if your photo passes the Canadian test.</p>"}},{"node":{"frontmatter":{"title":"BloomWatch","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAABJ0AAASdAHeZh94AAAB+ElEQVQozy3Q626bMABAYd7/LSata5q01bpVWrUfXdWt6kVpGzDkAhibYMCAbcwtAafAlGnSp/MAR+vPX/obMNzZ6ofVXhndFWi/Gt2Fri5Adw7amd5O9fbsv/0UHE30bgLaL4b2/LB+frQfn+wYrEvLTRZWARxh2lQH8ftrbeHGxI2FSwD3m+jDosqkymGVFbV2qn1e4hMLfzLRA4Q0coLEDTOX5gily1V0HwtHyFBWiSxp3RalPKq7XXPoxnHUZgAdmXjy5oCVnqUO2dqZj1qRidjx/bc0wzmnJY9rmecxrzOp8uYgmqHutFPDOzW8ybH4drVG8JVs1jwmPITZ1qWJFyVuyWnOAiVl7xfJ3PXudP/W6DaZ9gvGfyD5Dcnl0p8tIJpvhLHMk6BihFOcM8LSbcEiKaK9LJSf13aSm2FjxT2WmptKkvKAF9fr4NTwfr46Ty+GN9fjucUgLljIY8xZIDgpCh5HtC6rcRzG8RhtHTEiGOL599V2YnhnAJ28u0/3IL954cAssm1CoEiDStB2V3VKqYPqh74fh2EcNCdkOKWQ8etVMDG8GUBTE12+ucEGuRh6xJMZSSKSJvGhbckupZ3gqkyVLD8abRFQj4pVxK6W/sTwpv/mfzbQvY0WKPi2xJWgFQspTT7Uge443EVoH7u7kHbiLxTUDdaXb5opAAAAAElFTkSuQmCC"},"images":{"fallback":{"src":"/static/56420907341d6b1f14d71cc9680bc947/d884a/demo.png","srcSet":"/static/56420907341d6b1f14d71cc9680bc947/3a042/demo.png 175w,\n/static/56420907341d6b1f14d71cc9680bc947/90d1f/demo.png 350w,\n/static/56420907341d6b1f14d71cc9680bc947/d884a/demo.png 700w,\n/static/56420907341d6b1f14d71cc9680bc947/346a3/demo.png 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/56420907341d6b1f14d71cc9680bc947/ab4e6/demo.avif 175w,\n/static/56420907341d6b1f14d71cc9680bc947/024b9/demo.avif 350w,\n/static/56420907341d6b1f14d71cc9680bc947/4713d/demo.avif 700w,\n/static/56420907341d6b1f14d71cc9680bc947/06a22/demo.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/56420907341d6b1f14d71cc9680bc947/32753/demo.webp 175w,\n/static/56420907341d6b1f14d71cc9680bc947/ab163/demo.webp 350w,\n/static/56420907341d6b1f14d71cc9680bc947/8c302/demo.webp 700w,\n/static/56420907341d6b1f14d71cc9680bc947/bc096/demo.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":343}}},"tech":["React","JavaScript","Google Earth Engine","NASA MODIS","ERA5","Mapbox GL","Python"],"github":"https://github.com/yfkiwi/bloomwatch","external":"https://bloomwatch-ten.vercel.app/"},"html":"<p><strong>NASA Space Apps 2024 Local Winner &#x26; Global Nominee</strong></p>\n<p>Ever heard about a legendary superbloom... three days after it peaked? <a href=\"https://www.spaceappschallenge.org/2025/find-a-team/mgmu/?tab=project\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">BloomWatch</a> predicts these rare events using 20 years of NASA data, giving you the exact 10 day window to witness millions of wildflowers carpeting California's deserts</p>"}}]}}}