1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/e763b78b45a639a3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/fead98701afd36f1.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/99e0351cb6b890c7.js"/>
1<script src="/_next/static/chunks/f091501564eb2ea3.js" async=""></script>
1<script src="/_next/static/chunks/773abe17875a49cc.js" async=""></script>
1<script src="/_next/static/chunks/44b98a1857f3cb91.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-5babe0b88e17d214.js" async=""></script>
1<script src="/_next/static/chunks/d43d14ca027b57e5.js" async=""></script>
1<script src="/_next/static/chunks/169587c1de358ec9.js" async=""></script>
1<script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script>
1<script src="/_next/static/chunks/d2be314c3ece3fbe.js" async=""></script>
1<script src="/_next/static/chunks/db5be490798caccc.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>Company Knowledge Base Agent | Reinael Yabut</title><meta name="description" content="An n8n workflow that answers company questions in Slack using a Google Drive knowledge base and Supabase vector search."/><link rel="author" href="https://reinaelyabut.dev"/><meta name="author" content="Reinael Yabut"/><meta name="keywords" content="Reinael Yabut,yabswannalearn,Full Stack Engineering,AI Automation Engineering,Full Stack Engineering Philippines,AI Automation Engineering Philippines,Next.js Developer,n8n Automation,n8n Workflow Engineer,Agentic AI,Agentic Workflows,Multi-Agent Systems,AI Agent Development,Autonomous Agents,LLMOps (Large Language Model Operations),Autonomous QA Generator,B2B Content Engine,Software Engineering Pampanga,Holy Angel University Developer,TypeScript Engineering,Tailwind CSS v4,React 19,Drizzle ORM,Prisma ORM,PostgreSQL,AWS Cloud Engineering,Vercel Deployments,Retrieval-Augmented Generation (RAG),AI Integration Specialist,Python Engineer,Agentic Coding,Vibe Coding,Cognitive Architectures,Make.com automation,LLM Fine-Tuning,Semantic Caching,Edge Computing,Edge Functions,Serverless databases,Secure AI Integration,Prompt Injection Prevention,AI Safety Engineering,Remote Full Stack Developer Philippines,AI Automation Specialist Philippines,Freelance AI Developer Philippines"/><meta name="creator" content="Reinael Yabut"/><meta name="google-site-verification" content="FCHxDHX-mnPIIPvU78AidUtRHImMC6XlK9wfGq98ctI"/><meta property="og:title" content="Reinael Yabut | Full Stack Engineer & AI Automation Engineer"/><meta property="og:description" content="The portfolio of Reinael Yabut (yabswannalearn). A Full Stack Engineer and AI Automation Engineer specializing in AI workflows, Next.js, and continuous upskilling."/><meta property="og:url" content="https://reinaelyabut.dev"/><meta property="og:site_name" content="Reinael Yabut Portfolio"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://reinaelyabut.dev/og-image.jpg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Reinael Yabut - Full Stack Engineer & AI Automation Engineer"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Reinael Yabut | Full Stack Engineer & AI Automation Engineer"/><meta name="twitter:description" content="The portfolio of Reinael Yabut (yabswannalearn). A Full Stack Engineer and AI Automation Engineer specializing in AI workflows, Next.js, and continuous upskilling."/><meta name="twitter:image" content="https://reinaelyabut.dev/og-image.jpg"/><link rel="icon" href="/favicon.ico?favicon.115b5315.ico" sizes="460x460" type="image/x-icon"/><link rel="icon" href="/favicon.ico"/>
1<script> 2 (function() { 3 var theme = localStorage.getItem('theme'); 4 if (!theme) { 5 theme = 'light'; 6 } 7 document.documentElement.setAttribute('data-theme', theme); 8 })(); 9 </script>
9<script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script>
9</head><body class="inter_5972bc34-module__OU16Qa__className"><div hidden=""><!--$--><!--/$--></div><button class="fixed bottom-6 right-6 md:bottom-10 md:right-10 z-40 w-10 h-10 md:w-12 md:h-12 flex items-center justify-center rounded-full border border-border-subtle text-text-body hover:border-accent-red hover:text-accent-red transition-all duration-150 group bg-card-bg backdrop-blur-sm shadow-sm opacity-0 translate-y-10 pointer-events-none" title="Return to Top"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 opacity-80 group-hover:scale-125 transition-transform duration-500 group-hover:opacity-100"><path stroke-linecap="round" stroke-linejoin="round" d="M4.5 15.75l7.5-7.5 7.5 7.5"></path></svg></button><div class="fixed top-6 left-0 right-0 z-50 flex justify-center pointer-events-none px-4 md:px-0"><div class="flex items-center gap-3 md:gap-5 px-4 py-2 md:px-6 md:py-3 bg-card-bg/90 backdrop-blur-md border border-border-subtle rounded-full shadow-lg md:shadow-sm pointer-events-auto transition-all duration-300 hover:shadow-md hover:border-accent-red/30 theme-transition"><a href="mailto:[email protected]" class="flex items-center gap-2 text-xs md:text-sm font-medium text-text-body hover:text-accent-red transition-all duration-300 group" title="Email Me"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="text-lg group-hover:scale-110 transition-transform duration-300 hidden xs:block" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg><span class="tracking-wide">[email protected]</span></a><div class="w-px h-3 md:h-4 bg-border-subtle theme-transition"></div><a class="flex items-center gap-1.5 text-sm font-medium text-text-body transition-colors hover:text-accent-red focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-red" title="Go to contact section" aria-label="Go to contact section" href="/#contact"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="text-lg" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path></svg><span class="hidden md:inline">Contact</span></a><div class="w-px h-3 md:h-4 bg-border-subtle theme-transition"></div><a href="https://www.linkedin.com/in/reinaelyabut" target="_blank" rel="noopener noreferrer" class="text-lg text-text-body hover:text-[#0077b5] hover:scale-110 transition-all duration-300" title="LinkedIn"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg></a><a href="https://github.com/yabswannalearn" target="_blank" rel="noopener noreferrer" class="text-lg text-text-body hover:text-text-ink hover:scale-110 transition-all duration-300" title="GitHub"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></a><div class="w-px h-3 md:h-4 bg-border-subtle theme-transition"></div><button class="flex items-center gap-2 px-1 py-2 md:px-4 bg-text-body text-bg-paper text-xs font-medium rounded-full hover:bg-accent-red hover:text-white transition-all duration-300 cursor-pointer" title="View Resume"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg><span>CV</span></button></div></div><div class="min-h-screen relative bg-bg-paper text-text-body selection:bg-accent-red selection:text-white lato_8638ec86-module__eUFDaG__className"><div class="fixed inset-0 z-0 pointer-events-none overflow-hidden bg-bg-paper theme-transition"><svg class="absolute inset-0 w-full h-full opacity-35 mix-blend-washi transition-opacity duration-150"><filter id="noiseFilter"><feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="3" stitchTiles="stitch"></feTurbulence></filter>
9<rect width="100%" height="100%" filter="url(#noiseFilter)"></rect></svg><div class="absolute top-[-10%] left-[-10%] w-[60vw] h-[60vw] bg-blob-1 rounded-full blur-[100px] opacity-60 animate-breathe-slow theme-transition"></div><div class="absolute bottom-[-10%] right-[-10%] w-[50vw] h-[50vw] bg-blob-2 rounded-full blur-[120px] opacity-50 animate-drift-slow theme-transition"></div><div class="absolute inset-0 theme-transition" style="background:radial-gradient(circle at center, transparent 30%, var(--vignette) 100%)"></div></div><main class="relative z-10 max-w-6xl mx-auto px-6 py-20 md:py-28"><a class="inline-flex items-center gap-2 text-xs font-bold uppercase tracking-[0.18em] text-text-body/60 hover:text-accent-red focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-accent-red" href="/projects/ai-automation"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg> AI automation projects</a><header class="mt-12 mb-10 max-w-4xl"><p class="mb-4 text-xs font-bold uppercase tracking-[0.22em] text-accent-red">n8n / Case study</p><h1 class="text-4xl sm:text-5xl md:text-7xl font-black leading-[1.08] tracking-tight text-text-ink playfair_display_f21b1a8-module__ynrOEW__className">Company Knowledge Base Agent<span class="text-accent-red">.</span></h1><p class="mt-6 max-w-3xl text-2xl sm:text-3xl leading-snug italic text-text-body/75 cormorant_garamond_ab626abe-module__QWpZea__className">Ask in Slack. Get an answer grounded in company documents.</p><div class="mt-7 flex flex-wrap items-center gap-x-5 gap-y-2 border-t border-border-subtle pt-5 text-xs text-text-muted/80"><span><strong class="text-text-ink">Role:</strong> AI Automation Engineer</span><span><strong class="text-text-ink">Built with:</strong> <!-- -->n8n · Slack · Google Drive · Supabase · OpenAI</span></div></header><figure class="overflow-hidden rounded-xl border border-border-subtle bg-white shadow-xl"><div class="flex flex-wrap items-center justify-between gap-2 border-b border-[#e2e2df] px-4 py-3 text-[10px] font-bold uppercase tracking-[0.17em] text-[#62666a] sm:px-6"><span>Interactive workflow map</span><span>Click to explore · Drag to pan · Scroll to zoom</span></div><div class="n8n-demo-viewer relative overflow-hidden bg-[#f7f7f7]"><div class=""></div><div class="absolute inset-0 flex flex-col items-center justify-center gap-4 bg-[#f7f7f7] p-4"><div class="relative min-h-0 w-full flex-1"><img alt="Company Knowledge Base Agent workflow screenshot" loading="lazy" decoding="async" data-nimg="fill" class="object-contain" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 100vw, 1152px" srcSet="/_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=640&q=75 640w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=750&q=75 750w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=828&q=75 828w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=1080&q=75 1080w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=1200&q=75 1200w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=1920&q=75 1920w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=2048&q=75 2048w, /_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=3840&q=75 3840w" src="/_next/image?url=%2Fproject-screenshots%2Fcompany-kb-rag%2Fworkflow.png&w=3840&q=75"/></div><div class="text-center text-xs text-[#62666a]"><span>Loading interactive n8n canvasâ¦</span></div></div></div><figcaption class="flex flex-wrap items-center justify-between gap-2 border-t border-[#e2e2df] px-4 py-3 text-xs leading-relaxed text-[#62666a] sm:px-6"><span>The upper path answers Slack questions; the lower paths add and refresh Google Drive documents.</span><a href="/project-screenshots/company-kb-rag/workflow.png" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 font-bold text-accent-red hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-red">Open original screenshot <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline></svg></a></figcaption></figure><div class="mt-14 grid gap-10 lg:grid-cols-[minmax(0,1fr)_18rem] lg:gap-16"><div><section class="mb-12"><p class="mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red">The problem</p><h2 class="mb-4 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className">Why I built it</h2><p class="max-w-2xl text-base leading-8 text-text-muted">Company information can be scattered across documents, leaving people to search manually or ask the same questions again. I built a workflow that makes those documents searchable from Slack and keeps the knowledge base in step with changes in Google Drive.</p></section><section class="mb-12"><p class="mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red">The workflow</p><h2 class="mb-6 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className">From input to handoff</h2><ol class="grid gap-3 sm:grid-cols-3"><li class="border border-border-subtle bg-card-bg p-5 rounded-lg"><span class="text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red">Input</span>
9<h3 class="mt-3 mb-2 text-lg font-bold leading-tight text-text-ink">A question or document change</h3><p class="text-sm leading-6 text-text-muted">A Slack message starts the answer path. A new or updated Google Drive file starts the indexing path.</p></li><li class="border border-border-subtle bg-card-bg p-5 rounded-lg"><span class="text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red">Process</span><h3 class="mt-3 mb-2 text-lg font-bold leading-tight text-text-ink">Retrieve relevant context</h3><p class="text-sm leading-6 text-text-muted">Files are extracted, split, embedded, and stored in Supabase. The RAG agent searches that store when answering a question.</p></li><li class="border border-border-subtle bg-card-bg p-5 rounded-lg"><span class="text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red">Output</span><h3 class="mt-3 mb-2 text-lg font-bold leading-tight text-text-ink">Reply where the question was asked</h3><p class="text-sm leading-6 text-text-muted">The agent formats its response and sends it back to Slack, using the indexed knowledge base as context.</p></li></ol></section><section class="mb-12 rounded-lg border-l-4 border-accent-red bg-card-bg px-6 py-6"><p class="mb-2 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red">Example path</p><p class="text-sm leading-7 text-text-body">A teammate asks about the blog delivery process in Slack. The agent retrieves relevant passages from the indexed SOP and returns an answer in the same channel. If that SOP is updated in Drive, the indexing path refreshes its stored content.</p></section><section class="border-t border-border-subtle pt-8"><p class="mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red">Engineering choice</p><h2 class="mb-4 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className">A detail that matters</h2><p class="max-w-2xl text-base leading-8 text-text-muted">Document ingestion and question answering are separate paths. When a file changes, the workflow can remove its previous vector rows and index the updated content before the next question uses it.</p></section></div><aside class="h-fit rounded-lg border border-border-subtle bg-card-bg p-6 lg:sticky lg:top-10"><p class="mb-4 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red">What it produces</p><ul class="space-y-4"><li class="border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body">A response to the original Slack question.</li><li class="border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body">A searchable Supabase vector index built from company files.</li><li class="border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body">An update path that refreshes indexed content when a Drive file changes.</li></ul></aside></div><div class="mt-16 border-t border-border-subtle pt-8"><a class="inline-flex items-center gap-2 text-xs font-bold uppercase tracking-[0.18em] text-accent-red hover:underline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-accent-red" href="/projects/ai-automation"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg> More AI automation projects</a></div></main></div><!--$--><!--/$--><!--$--><!--/$-->
9<script src="/_next/static/chunks/99e0351cb6b890c7.js" id="_R_" async=""></script>
9<script>(self.__next_f=self.__next_f||[]).push([0])</script>
9<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[5242,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"default\"]\n3:I[71691,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"default\"]\n4:I[62474,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"default\"]\n5:I[94802,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"default\"]\n6:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n7:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n8:I[43880,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"Analytics\"]\n9:I[57215,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\"],\"SpeedInsights\"]\na:I[11565,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\",\"/_next/static/chunks/db5be490798caccc.js\"],\"default\"]\nb:I[22016,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\",\"/_next/static/chunks/db5be490798caccc.js\"],\"\"]\n14:I[68027,[],\"default\"]\n15:I[19651,[\"/_next/static/chunks/d43d14ca027b57e5.js\",\"/_next/static/chunks/169587c1de358ec9.js\",\"/_next/static/chunks/db5be490798caccc.js\"],\"default\"]\n17:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\n18:\"$Sreact.suspense\"\n1a:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\n1c:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\n1e:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"IconMark\"]\n:HL[\"/_next/static/chunks/e763b78b45a639a3.css\",\"style\"]\n:HL[\"/_next/static/media/2a65768255d6b625-s.p.d19752fb.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/345c85a432359eed-s.p.eead68dd.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8e451580e5e95631-s.p.0e564e6e.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/a575348c6bcdca86-s.p.7b027225.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/chunks/fead98701afd36f1.css\",\"style\"]\n"])</script>
9<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"ySzC5od-tNroPC5tMXklj\",\"c\":[\"\",\"projects\",\"ai-automation\",\"company-kb-rag\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"projects\",{\"children\":[[\"category\",\"ai-automation\",\"d\"],{\"children\":[\"company-kb-rag\",{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/e763b78b45a639a3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d43d14ca027b57e5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/169587c1de358ec9.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n var theme = localStorage.getItem('theme');\\n if (!theme) {\\n theme = 'light';\\n }\\n document.documentElement.setAttribute('data-theme', theme);\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"inter_5972bc34-module__OU16Qa__className\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{}],[\"$\",\"$L5\",null,{\"personal\":{\"email\":\"[email protected]\",\"linkedin\":\"www.linkedin.com/in/reinaelyabut\",\"github\":\"https://github.com/yabswannalearn\",\"resume\":\"/Reinael_Yabut_CV.pdf\"}}],[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"min-h-screen relative bg-bg-paper text-text-body selection:bg-accent-red selection:text-white lato_8638ec86-module__eUFDaG__className\",\"children\":[[\"$\",\"$La\",null,{}],[\"$\",\"main\",null,{\"className\":\"relative z-10 max-w-6xl mx-auto px-6 py-20 md:py-28\",\"children\":[[\"$\",\"$Lb\",null,{\"href\":\"/projects/ai-automation\",\"className\":\"inline-flex items-center gap-2 text-xs font-bold uppercase tracking-[0.18em] text-text-body/60 hover:text-accent-red focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-accent-red\",\"children\":[[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"none\",\"strokeWidth\":\"2\",\"viewBox\":\"0 0 24 24\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[\"$undefined\",[[\"$\",\"line\",\"0\",{\"x1\":\"19\",\"y1\":\"12\",\"x2\":\"5\",\"y2\":\"12\",\"children\":[]}],[\"$\",\"polyline\",\"1\",{\"points\":\"12 19 5 12 12 5\",\"children\":[]}]]],\"className\":\"$undefined\",\"style\":{\"color\":\"$undefined\"}
9,\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}],\" AI automation projects\"]}],\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\"]}]]}],[\"$L10\",\"$L11\"],\"$L12\"]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false]},null,false,false],\"$L13\",false]],\"m\":\"$undefined\",\"G\":[\"$14\",[]],\"S\":false}\n"])</script>
9<script>self.__next_f.push([1,"c:[\"$\",\"header\",null,{\"className\":\"mt-12 mb-10 max-w-4xl\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-4 text-xs font-bold uppercase tracking-[0.22em] text-accent-red\",\"children\":\"n8n / Case study\"}],[\"$\",\"h1\",null,{\"className\":\"text-4xl sm:text-5xl md:text-7xl font-black leading-[1.08] tracking-tight text-text-ink playfair_display_f21b1a8-module__ynrOEW__className\",\"children\":[\"Company Knowledge Base Agent\",[\"$\",\"span\",null,{\"className\":\"text-accent-red\",\"children\":\".\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-3xl text-2xl sm:text-3xl leading-snug italic text-text-body/75 cormorant_garamond_ab626abe-module__QWpZea__className\",\"children\":\"Ask in Slack. Get an answer grounded in company documents.\"}],[\"$\",\"div\",null,{\"className\":\"mt-7 flex flex-wrap items-center gap-x-5 gap-y-2 border-t border-border-subtle pt-5 text-xs text-text-muted/80\",\"children\":[[\"$\",\"span\",null,{\"children\":[[\"$\",\"strong\",null,{\"className\":\"text-text-ink\",\"children\":\"Role:\"}],\" AI Automation Engineer\"]}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"strong\",null,{\"className\":\"text-text-ink\",\"children\":\"Built with:\"}],\" \",\"n8n · Slack · Google Drive · Supabase · OpenAI\"]}]]}]]}]\n"])</script>
9<script>self.__next_f.push([1,"d:[\"$\",\"figure\",null,{\"className\":\"overflow-hidden rounded-xl border border-border-subtle bg-white shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center justify-between gap-2 border-b border-[#e2e2df] px-4 py-3 text-[10px] font-bold uppercase tracking-[0.17em] text-[#62666a] sm:px-6\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Interactive workflow map\"}],[\"$\",\"span\",null,{\"children\":\"Click to explore · Drag to pan · Scroll to zoom\"}]]}],[\"$\",\"$L15\",null,{\"slug\":\"company-kb-rag\",\"title\":\"Company Knowledge Base Agent\",\"image\":\"/project-screenshots/company-kb-rag/workflow.png\"}],[\"$\",\"figcaption\",null,{\"className\":\"flex flex-wrap items-center justify-between gap-2 border-t border-[#e2e2df] px-4 py-3 text-xs leading-relaxed text-[#62666a] sm:px-6\",\"children\":[[\"$\",\"span\",null,{\"children\":\"The upper path answers Slack questions; the lower paths add and refresh Google Drive documents.\"}],[\"$\",\"a\",null,{\"href\":\"/project-screenshots/company-kb-rag/workflow.png\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"inline-flex items-center gap-1 font-bold text-accent-red hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-red\",\"children\":[\"Open original screenshot \",[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"none\",\"strokeWidth\":\"2\",\"viewBox\":\"0 0 24 24\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[\"$undefined\",[[\"$\",\"line\",\"0\",{\"x1\":\"7\",\"y1\":\"17\",\"x2\":\"17\",\"y2\":\"7\",\"children\":[]}],[\"$\",\"polyline\",\"1\",{\"points\":\"7 7 17 7 17 17\",\"children\":[]}]]],\"className\":\"$undefined\",\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]]}]]}]]}]\n"])</script>
9<script>self.__next_f.push([1,"e:[\"$\",\"div\",null,{\"className\":\"mt-14 grid gap-10 lg:grid-cols-[minmax(0,1fr)_18rem] lg:gap-16\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"section\",null,{\"className\":\"mb-12\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"The problem\"}],[\"$\",\"h2\",null,{\"className\":\"mb-4 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className\",\"children\":\"Why I built it\"}],[\"$\",\"p\",null,{\"className\":\"max-w-2xl text-base leading-8 text-text-muted\",\"children\":\"Company information can be scattered across documents, leaving people to search manually or ask the same questions again. I built a workflow that makes those documents searchable from Slack and keeps the knowledge base in step with changes in Google Drive.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-12\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"The workflow\"}],[\"$\",\"h2\",null,{\"className\":\"mb-6 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className\",\"children\":\"From input to handoff\"}],[\"$\",\"ol\",null,{\"className\":\"grid gap-3 sm:grid-cols-3\",\"children\":[[\"$\",\"li\",\"Input\",{\"className\":\"border border-border-subtle bg-card-bg p-5 rounded-lg\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"Input\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 mb-2 text-lg font-bold leading-tight text-text-ink\",\"children\":\"A question or document change\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-6 text-text-muted\",\"children\":\"A Slack message starts the answer path. A new or updated Google Drive file starts the indexing path.\"}]]}],[\"$\",\"li\",\"Process\",{\"className\":\"border border-border-subtle bg-card-bg p-5 rounded-lg\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"Process\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 mb-2 text-lg font-bold leading-tight text-text-ink\",\"children\":\"Retrieve relevant context\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-6 text-text-muted\",\"children\":\"Files are extracted, split, embedded, and stored in Supabase. The RAG agent searches that store when answering a question.\"}]]}],[\"$\",\"li\",\"Output\",{\"className\":\"border border-border-subtle bg-card-bg p-5 rounded-lg\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"Output\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 mb-2 text-lg font-bold leading-tight text-text-ink\",\"children\":\"Reply where the question was asked\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-6 text-text-muted\",\"children\":\"The agent formats its response and sends it back to Slack, using the indexed knowledge base as context.\"}]]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-12 rounded-lg border-l-4 border-accent-red bg-card-bg px-6 py-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-2 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"Example path\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-7 text-text-body\",\"children\":\"A teammate asks about the blog delivery process in Slack. The agent retrieves relevant passages from the indexed SOP and returns an answer in the same channel. If that SOP is updated in Drive, the indexing path refreshes its stored content.\"}]]}],[\"$\",\"section\",null,{\"className\":\"border-t border-border-subtle pt-8\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-3 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"Engineering choice\"}],[\"$\",\"h2\",null,{\"className\":\"mb-4 text-3xl font-bold text-text-ink playfair_display_f21b1a8-module__ynrOEW__className\",\"children\":\"A detail that matters\"}],[\"$\",\"p\",null,{\"className\":\"max-w-2xl text-base leading-8 text-text-muted\",\"children\":\"Document ingestion and question answering are separate paths. When a file changes, the workflow can remove its previous vector rows and index the updated content before the next question uses it.\"}]]}]]}],\"$L16\"]}]\n"])</script>
9<script>self.__next_f.push([1,"f:[\"$\",\"div\",null,{\"className\":\"mt-16 border-t border-border-subtle pt-8\",\"children\":[\"$\",\"$Lb\",null,{\"href\":\"/projects/ai-automation\",\"className\":\"inline-flex items-center gap-2 text-xs font-bold uppercase tracking-[0.18em] text-accent-red hover:underline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-accent-red\",\"children\":[[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"none\",\"strokeWidth\":\"2\",\"viewBox\":\"0 0 24 24\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[\"$undefined\",[[\"$\",\"line\",\"0\",{\"x1\":\"19\",\"y1\":\"12\",\"x2\":\"5\",\"y2\":\"12\",\"children\":[]}],[\"$\",\"polyline\",\"1\",{\"points\":\"12 19 5 12 12 5\",\"children\":[]}]]],\"className\":\"$undefined\",\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}],\" More AI automation projects\"]}]}]\n10:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/fead98701afd36f1.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n11:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/db5be490798caccc.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n12:[\"$\",\"$L17\",null,{\"children\":[\"$\",\"$18\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@19\"}]}]\n13:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L1a\",null,{\"children\":\"$L1b\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1c\",null,{\"children\":[\"$\",\"$18\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1d\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}
9]\n16:[\"$\",\"aside\",null,{\"className\":\"h-fit rounded-lg border border-border-subtle bg-card-bg p-6 lg:sticky lg:top-10\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-4 text-[11px] font-bold uppercase tracking-[0.2em] text-accent-red\",\"children\":\"What it produces\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-4\",\"children\":[[\"$\",\"li\",\"A response to the original Slack question.\",{\"className\":\"border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body\",\"children\":\"A response to the original Slack question.\"}],[\"$\",\"li\",\"A searchable Supabase vector index built from company files.\",{\"className\":\"border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body\",\"children\":\"A searchable Supabase vector index built from company files.\"}],[\"$\",\"li\",\"An update path that refreshes indexed content when a Drive file changes.\",{\"className\":\"border-l-2 border-accent-red/55 pl-3 text-sm leading-6 text-text-body\",\"children\":\"An update path that refreshes indexed content when a Drive file changes.\"}]]}]]}]\n1b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n19:null\n"])</script>
9<script>self.__next_f.push([1,"1d:[[\"$\",\"title\",\"0\",{\"children\":\"Company Knowledge Base Agent | Reinael Yabut\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"An n8n workflow that answers company questions in Slack using a Google Drive knowledge base and Supabase vector search.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"author\",\"href\":\"https://reinaelyabut.dev\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"Reinael Yabut\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"Reinael Yabut,yabswannalearn,Full Stack Engineering,AI Automation Engineering,Full Stack Engineering Philippines,AI Automation Engineering Philippines,Next.js Developer,n8n Automation,n8n Workflow Engineer,Agentic AI,Agentic Workflows,Multi-Agent Systems,AI Agent Development,Autonomous Agents,LLMOps (Large Language Model Operations),Autonomous QA Generator,B2B Content Engine,Software Engineering Pampanga,Holy Angel University Developer,TypeScript Engineering,Tailwind CSS v4,React 19,Drizzle ORM,Prisma ORM,PostgreSQL,AWS Cloud Engineering,Vercel Deployments,Retrieval-Augmented Generation (RAG),AI Integration Specialist,Python Engineer,Agentic Coding,Vibe Coding,Cognitive Architectures,Make.com automation,LLM Fine-Tuning,Semantic Caching,Edge Computing,Edge Functions,Serverless databases,Secure AI Integration,Prompt Injection Prevention,AI Safety Engineering,Remote Full Stack Developer Philippines,AI Automation Specialist Philippines,Freelance AI Developer Philippines\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"Reinael Yabut\"}],[\"$\",\"meta\",\"6\",{\"name\":\"google-site-verification\",\"content\":\"FCHxDHX-mnPIIPvU78AidUtRHImMC6XlK9wfGq98ctI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:title\",\"content\":\"Reinael Yabut | Full Stack Engineer \u0026 AI Automation Engineer\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:description\",\"content\":\"The portfolio of Reinael Yabut (yabswannalearn). A Full Stack Engineer and AI Automation Engineer specializing in AI workflows, Next.js, and continuous upskilling.\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:url\",\"content\":\"https://reinaelyabut.dev\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:site_name\",\"content\":\"Reinael Yabut Portfolio\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://reinaelyabut.dev/og-image.jpg\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:alt\",\"content\":\"Reinael Yabut - Full Stack Engineer \u0026 AI Automation Engineer\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:title\",\"content\":\"Reinael Yabut | Full Stack Engineer \u0026 AI Automation Engineer\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:description\",\"content\":\"The portfolio of Reinael Yabut (yabswannalearn). A Full Stack Engineer and AI Automation Engineer specializing in AI workflows, Next.js, and continuous upskilling.\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image\",\"content\":\"https://reinaelyabut.dev/og-image.jpg\"}],[\"$\",\"link\",\"21\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.115b5315.ico\",\"sizes\":\"460x460\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$L1e\",\"23\",{}]]\n"])</script>
9</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.