Help
RSS
API
Feed
Maltego
Contact
Domain > miguelenes.dev
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2023-11-04
54.76.148.75
(
ClassC
)
2026-01-23
172.67.215.22
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Fri, 23 Jan 2026 23:56:15 GMTContent-Type: text/htmlContent-Length: 248181Connection: keep-aliveCF-Cache-Status: HITCache-Control: public, max-age0, must-revalidateETag: c87aa6ef12d098a5a925f82be15ed74cVary: accept-encodingReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?scWTN3hKbkrsl2OLy4E8I%2FGMeDRLlczFzqZxYtTATvaeYIBZuRuiTO4qnmPwoeDsiiFTpOIqhNdNXNgxGYtHj1Byh1L3LjkRKpInJNg%3D%3D}}Nel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflareCF-RAY: 9c2b3a060ab3fef0-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen xml:langen>head>meta charsetUTF-8>meta contentwidthdevice-width,initial-scale1,viewport-fitcover nameviewport>meta contentMiguel Enes nameauthor>meta content© 2026 Miguel Enes namecopyright>meta contenten namelanguage>meta contentglobal namedistribution>meta content7 days namerevisit-after>meta contenttelephoneno nameformat-detection>meta contentengineering, leadership, technology, CTO, software development, e-commerce, team leadership namekeywords>meta contentindex, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1 namerobots>meta contentindex, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1 namegooglebot>title>Miguel Enes - Chief Technology Officer @ Of Them All/title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. namedescription>link hrefhttps://miguelenes.com/ relcanonical>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. propertyog:description>meta contenthttps://miguelenes.com/ propertyog:url>meta contentwebsite propertyog:type>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg propertyog:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:image:alt>meta contentMiguel Enes propertyog:site_name>meta contentsummary_large_image nametwitter:card>meta contenten_US propertyog:locale>meta contentMiguel Enes propertyog:site_name>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. propertyog:description>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg propertyog:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:image:alt>meta contentsummary_large_image nametwitter:card>meta contentMiguel Enes - Chief Technology Officer @ Of Them All nametwitter:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. nametwitter:description>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg nametwitter:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All nametwitter:image:alt>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. nameai:description>meta contentengineering, leadership, technology, CTO, software development, e-commerce, team leadership nameai:keywords>meta contentMiguel Enes me@miguelenes.com> nameauthor>link href/favicon.svg relicon typeimage/svg+xml>link href/favicon.svg relicon>link href/favicon.svg relshortcut icon>link href/favicon.svg relapple-touch-icon>meta content#0f172a namemsapplication-TileColor>meta content#6366f1 nametheme-color>meta contentyes namemobile-web-app-capable>meta contentyes nameapple-mobile-web-app-capable>meta contentblack-translucent nameapple-mobile-web-app-status-bar-style>link hrefhttps://fonts.googleapis.com relpreconnect crossoriginanonymous>link hrefhttps://www.linkedin.com reldns-prefetch>link hrefhttps://github.com reldns-prefetch>link hrefhttps://fonts.googleapis.com reldns-prefetch>script typeapplication/ld+json>{@context:https://schema.org,@type:Person,name:Miguel Enes,url:https://miguelenes.com,image:https://miguelenes.com/_astro/profile.kN_5ljY8.jpg,jobTitle:Chief Technology Officer,worksFor:{@type:Organization,name:Of Them All,url:https://of-them-all.com},description:An experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry.,sameAs:https://www.linkedin.com/in/miguel-enes/,https://github.com/miguelenes,https://miguelenes.com,knowsAbout:Technology Strategy,System Architecture,Startup,Fundraising,Roadmap Planning,Technical Leadership,Stakeholder Management,Platform Engineering,Machine Learning,Containerization,Docker,Kubernetes,ML Pipelines,Agile,Team Leadership,Microservices,Ruby on Rails,AWS,Scrum,Mobile Development,Laravel,PHP,Redis,E-commerce,Yii,Zend Framework,Incident Management,Cost Optimization,Open Source,Infrastructure Management,Payment Gateways,MySQL,PCI-DSS,Integration,OOP,Kanban,Memcached,APIs,Entrepreneurship,Event Management,Marketing,Web Development,Social Media,Project Management,HTML,CSS,JavaScript,Client Relations,alumniOf:{@type:Organization,name:Lazada Group},{@type:Organization,name:Rocket Internet SE},email:me@miguelenes.com}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,name:Miguel Enes,url:https://miguelenes.com,description:Personal website and blog of Miguel Enes - CTO and Engineering Team Leader,publisher:{@type:Person,name:Miguel Enes},potentialAction:{@type:SearchAction,target:{@type:EntryPoint,urlTemplate:https://miguelenes.com/blog?search{search_term_string}},query-input:required namesearch_term_string}}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:ProfilePage,mainEntity:{@type:Person,name:Miguel Enes,url:https://miguelenes.com},url:https://miguelenes.com}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:BreadcrumbList,itemListElement:{@type:ListItem,position:1,name:Home,item:https://miguelenes.com}}/script>script srchttps://www.googletagmanager.com/gtag/js?idG-MCQD95NMLE async>/script>script>/script>meta contenttrue nameastro-view-transitions-enabled>meta contentanimate nameastro-view-transitions-fallback>script typemodule src/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CDGfc0hd.js>/script>link href/_astro/_page_.DbBD-HP7.css relstylesheet>/head>body classw-full m-0 min-h-screen overflow-x-hidden p-0>a classfocus:absolute focus:bg-accent-indigo focus:left-4 focus:not-sr-only focus:px-4 focus:py-2 focus:rounded-md focus:text-white focus:top-4 focus:z-50 sr-only href#main-content>Skip to main content/a>main aria-labelMain content classw-full min-w-0 max-w-none 2xl:px-12 3xl:px-16 lg:px-8 md:px-6 px-4 xl:px-10 lg:py-16 md:py-12 py-8 idmain-content rolemain>div classw-full min-w-0 max-w-none auto-rows-minmax(220px,auto) gap-6 grid grid-cols-1 lg:gap-10 md:gap-8 md:grid-cols-4 xl:gap-12>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-2 order-1>style>astro-island,astro-slot,astro-static-slot{display:contents}/style>script>(self.Astro||(self.Astro{})).loadasync a>{await(await a())()},window.dispatchEvent(new Event(astro:load))/script>script>(()>{var tObject.defineProperty,e(e,r,n)>((e,r,n)>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):ern)(e,symbol!typeof r?r+:r,n);{let t{0:t>s(t),1:t>n(t),2:t>new RegExp(t),3:t>new Date(t),4:t>new Map(n(t)),5:t>new Set(n(t)),6:t>BigInt(t),7:t>new URL(t),8:t>new Uint8Array(t),9:t>new Uint16Array(t),10:t>new Uint32Array(t),11:t>1/0*t},re>{letr,ne;return r in t?tr(n):void 0},nt>t.map(r),st>object!typeof t||nullt?t:Object.fromEntries(Object.entries(t).map((t,e)>t,r(e)));class i extends HTMLElement{constructor(){super(...arguments),e(this,Component),e(this,hydrator),e(this,hydrate,async()>{var t;if(!this.hydrator||!this.isConnected)return;let enull(tthis.parentElement)?void 0:t.closest(astro-islandssr);if(e)return void e.addEventListener(astro:hydrate,this.hydrate,{once:!0});let r,nthis.querySelectorAll(astro-slot),i{},othis.querySelectorAll(templatedata-astro-template);for(let t of o){let et.closest(this.tagName);null!e&&e.isSameNode(this)&&(it.getAttribute(data-astro-template)||defaultt.innerHTML,t.remove())}for(let t of n){let et.closest(this.tagName);null!e&&e.isSameNode(this)&&(it.getAttribute(name)||defaultt.innerHTML)}try{rthis.hasAttribute(props)?s(JSON.parse(this.getAttribute(props))):{}}catch(t){let ethis.getAttribute(component-url)||unknown>,rthis.getAttribute(component-export);throw r&&(e+` (export ${r})`),console.error(`hydrate Error parsing props for component ${e}`,this.getAttribute(props),t),t}await this.hydrator(this)(this.Component,r,i,{client:this.getAttribute(client)}),this.removeAttribute(ssr),this.dispatchEvent(new CustomEvent(astro:hydrate))}),e(this,unmount,()>{this.isConnected||this.dispatchEvent(new CustomEvent(astro:unmount))})}disconnectedCallback(){document.removeEventListener(astro:after-swap,this.unmount),document.addEventListener(astro:after-swap,this.unmount,{once:!0})}connectedCallback(){if(this.hasAttribute(await-children)&&interactive!document.readyState&&complete!document.readyState){let t()>{document.removeEventListener(DOMContentLoaded,t),e.disconnect(),this.childrenConnectedCallback()},enew MutationObserver(()>{var e;(null(ethis.lastChild)?void 0:e.nodeType)Node.COMMENT_NODE&&astro:endthis.lastChild.nodeValue&&(this.lastChild.remove(),t())});e.observe(this,{childList:!0}),document.addEventListener(DOMContentLoaded,t)}else this.childrenConnectedCallback()}async childrenConnectedCallback(){let tthis.getAttribute(before-hydration-url);t&&await import(t),this.start()}async start(){let tJSON.parse(this.getAttribute(opts)),ethis.getAttribute(client);if(void 0!Astroe)try{await Astroe(async()>{let tthis.getAttribute(renderer-url),e,{default:r}await Promise.all(import(this.getAttribute(component-url)),t?import(t):()>()>{}),nthis.getAttribute(component-export)||default;if(n.includes(.)){this.Componente;for(let t of n.split(.))this.Componentthis.Componentt}else this.Componenten;return this.hydratorr,this.hydrate},t,this)}catch(t){console.error(`astro-island Error hydrating ${this.getAttribute(component-url)}`,t)}else window.addEventListener(`astro:${e}`,()>this.start(),{once:!0})}attributeChangedCallback(){this.hydrate()}}e(i,observedAttributes,props),customElements.get(astro-island)||customElements.define(astro-island,i)}})()/script>astro-island await-children clientload component-exportdefault component-url/_astro/HeroCard.Bu6y4LXi.js opts{"name":"HeroCard","value":true} prefixr8 props{"profileImage":0,{"src":0,"/_astro/profile.kN_5ljY8_Z1q8Oue.webp","width":0,320,"height":0,348,"srcSet":0,"sizes":0}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ2gWVsu>link href/_astro/profile.kN_5ljY8_Z1q8Oue.webp relpreload asimage fetchPriorityhigh />div classflex justify-between flex-col h-full lg:p-12 md:p-10 overflow-hidden p-8 relative w-full>div classabsolute pointer-events-none right-6 select-none top-6 styleopacity:0;transform:scale(.95)>pre classcode-decoration md:text-xs text-10px text-right>const engineer { role: "Team Leader", focus: "Architecture", "E-commerce", "Leadership" , status: "Open to Connect"};/pre>/div>div classrounded-full absolute blur-3xl pointer-events-none -bottom-32 -left-32 bg-gradient-to-br from-accent-indigo/25 h-80 to-accent-teal/12 w-80 styleopacity:0;transform:scale(.8)>/div>div classrounded-full absolute blur-3xl pointer-events-none -right-24 bg-gradient-to-bl from-accent-teal/15 h-64 to-accent-indigo/10 top-1/2 w-64 styleopacity:0;transform:scale(.8)>/div>div classflex flex-col relative flex-1 justify-center space-y-6 z-10>div classflex items-start gap-6 md:gap-8>div classflex-1 styleopacity:0;transform:translateY(30px)>h1 classfont-mono font-bold leading-tight lg:text-7xl mb-4 md:text-6xl text-5xl tracking-tight styleopacity:0;transform:translateY(20px)>span classtext-starlight styleopacity:0;transform:translateX(-20px)>Miguel/span> span classgradient-text styleopacity:0;transform:translateX(20px)>Enes/span>/h1>p classleading-relaxed font-light lg:text-2xl md:text-xl text-lg text-starlight-dim styleopacity:0;transform:translateY(15px)>Chief Technology Officer span classtext-starlight-dim/50>@/span> a classitems-center inline-flex transition-colors gap-1.5 hover:text-accent-indigo text-accent-teal font-medium hrefhttps://of-them-all.com relnoopener noreferrer target_blank>Of Them Allsvg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/p>/div>div classflex-shrink-0 styleopacity:0;transform:scale(.8) rotate(-5deg)>div classrelative overflow-hidden border-4 border-accent-teal/20 h-24 lg:h-40 lg:w-40 md:h-32 md:w-32 rounded-full shadow-accent-teal/10 shadow-xl w-24>img altMiguel Enes - Chief Technology Officer classw-full h-full object-cover height348 loadingeager src/_astro/profile.kN_5ljY8_Z1q8Oue.webp width320 fetchPriorityhigh />div classabsolute pointer-events-none bg-gradient-to-br from-accent-indigo/10 inset-0 to-accent-teal/10>/div>/div>/div>/div>div classitems-center flex gap-3 pt-2 styleopacity:0;transform:translateX(-10px)>span classflex h-3 relative w-3>span classw-full h-full absolute animate-ping bg-accent-teal inline-flex opacity-60 rounded-full>/span>span classrelative h-3 w-3 bg-accent-teal inline-flex rounded-full shadow-accent-teal/50 shadow-lg>/span>/span>span classtracking-wide font-medium md:text-base text-sm text-starlight-dim>Open to Connect/span>/div>/div>div classrelative z-10 space-y-4 styleopacity:0;transform:translateY(10px)>div classitems-center flex gap-2.5 font-medium md:text-base text-sm text-starlight-dim/80>svg classw-4 h-4 md:w-5 md:h-5 fillnone strokecurrentColor viewBox0 0 24 24>path dM17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z stroke-linecapround stroke-linejoinround stroke-width2>/path>path dM15 11a3 3 0 11-6 0 3 3 0 016 0z stroke-linecapround stroke-linejoinround stroke-width2>/path>/svg>span>Porto, Portugal/span>/div>div classitems-center flex gap-2.5 flex-wrap md:gap-3>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-#25D366 hrefhttps://wa.me/351960259992 relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-message-circle fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719>/path>/svg>span>WhatsApp/span>/a>button classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-accent-teal/30 hover:text-accent-teal tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-mail fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7>/path>rect height16 width20 x2 y4 rx2>/rect>/svg>span classhidden sm:inline>me@miguelenes.com/span>span classsm:hidden>Email/span>div>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-copy opacity-50 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>rect height14 width14 x8 y8 rx2 ry2>/rect>path dM4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2>/path>/svg>/div>/button>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-#0A66C2 hrefhttps://www.linkedin.com/in/miguel-enes/ relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-linkedin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 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 height12 width4 x2 y9>/rect>circle cx4 cy4 r2>/circle>/svg>span>LinkedIn/span>/a>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-white hrefhttps://github.com/miguelenes relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-github fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4>/path>path dM9 18c-4.51 2-5-2-7-2>/path>/svg>span>GitHub/span>/a>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-accent-indigo/30 hover:text-accent-indigo hrefhttps://miguelenes.com relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-globe fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>span>Website/span>/a>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-1 p-8 order-2>script>(self.Astro||(self.Astro{})).visible(e,t,o)>{let iasync()>{await(await e())()},nobjecttypeof t.value?t.value:void 0,r{rootMargin:nulln?void 0:n.rootMargin},snew IntersectionObserver(e>{for(let t of e)if(t.isIntersecting){s.disconnect(),i();break}},r);for(let e of o.children)s.observe(e)},window.dispatchEvent(new Event(astro:visible))/script>astro-island await-children clientvisible component-exportdefault component-url/_astro/BioCard.DsPsIGw9.js opts{"name":"BioCard","value":true} prefixr9 props{} renderer-url/_astro/client.9unXo8s5.js ssr uid10FxB3>div classflex flex-col h-full w-full styleopacity:0;transform:translateY(20px)>div classitems-center flex gap-3 mb-6 styleopacity:0;transform:translateX(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-briefcase fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16>/path>rect height14 width20 x2 y6 rx2>/rect>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>About/h2>/div>p classmd:text-lg text-base font-light leading-relaxed text-starlight/90 space-y-4 styleopacity:0>CTO and e-commerce technology strategist with over 17 years of experience leading software teams and building high-impact platforms. I focus on scalable architecture, payments and checkout, and reliable systems that support growth across markets. My leadership style combines hands-on delivery, mentorship, and strong product alignment so teams ship quickly without sacrificing quality. I have held leadership roles at Lazada, Bamilo, and iMotorbike across Asia and Europe, helping companies scale through periods of rapid expansion./p>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-2 order-3>astro-island await-children clientvisible component-exportdefault component-url/_astro/BlogPreviewCard.E1_nw688.js opts{"name":"BlogPreviewCard","value":true} prefixr10 props{"posts":1,0,{"post":0,{"id":0,"ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.md","data":0,{"title":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents","description":0,"How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix.","pubDate":3,"2025-01-19T00:00:00.000Z","tags":1,0,"ai",0,"audio-engineering",0,"ffmpeg",0,"laravel",0,"machine-learning",0,"content-generation",0,"vector-database",0,"rag",0,"vizra",0,"php","category":0,"Engineering","draft":0,false},"body":0,"# From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents\n\nCreating professional meditation audio isn't just about layering a voice track over background music. It's an intricate dance of frequencies, dynamics, and timing that traditionally required a skilled audio engineer with years of experience.\n\n## The Challenge: When Art Meets Algorithm\n\nOur challenge was ambitious: automate the creation of studio-quality meditation mantras by intelligently mixing voice narrations with background music—while ensuring the result felt organic, not robotic.\n\nWe didn't want to simply apply static presets. We wanted a system that learns, adapts, and improves with every successful mix.\n\n## The Architecture: A Symphony of AI Agents\n\nAt the heart of our solution is a sophisticated multi-agent system built on the Vizra ADK (Agent Development Kit), orchestrating several specialized components:\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MantraGenerationWorkflow │\n├─────────────────────────────────────────────────────────────┤\n│ ┌─────────────────┐ ┌──────────────────────────────┐ │\n│ │ Content Finder │ → │ MantraGenerationAgent │ │\n│ │ (FindUnmixed) │ │ (Gemini 2.5 Flash) │ │\n│ └─────────────────┘ └──────────────────────────────┘ │\n│ ↓ ↓ │\n│ ┌─────────────────────────────────────────────────────┐ │\n│ │ IntelligentFFmpegMixerTool │ │\n│ │ ┌───────────┐ ┌────────────┐ ┌────────────────┐ │ │\n│ │ │ Gemini AI │→ │ Vector RAG │→ │ FFmpeg 8 Engine│ │ │\n│ │ │ Parameter │ │ Learning │ │ Execution │ │ │\n│ │ │ Generator │ │ System │ │ │ │ │\n│ │ └───────────┘ └────────────┘ └────────────────┘ │ │\n│ └─────────────────────────────────────────────────────┘ │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### The MantraGenerationAgent\n\nOur primary agent operates as an \"AI Audio Engineer\" that coordinates the entire mixing process:\n\n```php\nclass MantraGenerationAgent extends BaseLlmAgent\n{\n protected string $model 'gemini-2.5-flash';\n protected ?float $temperature 0.5;\n\n protected array $tools \n FindUnmixedContentTool::class,\n IntelligentFFmpegMixerTool::class,\n VectorMemoryTool::class,\n ;\n}\n```\n\nThe agent receives high-level instructions and autonomously decides:\n\n- Which voice and music content to pair together\n- When to consult past successful mixes\n- How to adjust parameters based on time-of-day context (morning energizing vs. night calming)\n\n## The Intelligence Layer: Gemini + Audio Analysis\n\n### Real-Time Audio Intelligence\n\nBefore any mixing occurs, our system performs comprehensive audio analysis using FFmpeg's probing capabilities:\n\n```php\nprivate function analyzeAudio(string $path): array\n{\n $command sprintf(\n 'ffprobe -v quiet -print_format json -show_format -show_streams %s',\n escapeshellarg($path)\n );\n\n return \n 'duration' > (float) ($info'format''duration' ?? 0),\n 'bitrate' > (int) ($info'format''bit_rate' ?? 0) / 1000,\n 'channels' > (int) ($info'streams'0'channels' ?? 0),\n 'sample_rate' > (int) ($info'streams'0'sample_rate' ?? 44100),\n ;\n}\n```\n\n### AI-Driven Parameter Generation\n\nThe magic happens when we feed audio characteristics and actual audio files to Gemini 2.0 Flash for parameter optimization:\n\n```php\n$response Prism::structured()\n ->using(Provider::Gemini, 'gemini-2.0-flash-exp')\n ->withPrompt($prompt, $voiceAttachment, $musicAttachment)\n ->withSchema($mixingParametersSchema)\n ->asStructured();\n```\n\nGemini analyzes both the metadata and the actual audio content, then returns optimized FFmpeg parameters tailored to the specific voice-music pairing.\n\n## The Heart of the Mix: FFmpeg 8 Filter Chains\n\n### Dynamic Filter Construction\n\nOur system constructs sophisticated FFmpeg filter chains based on AI recommendations:\n\n```php\nprivate function buildFilters(array $params): string\n{\n $filters ;\n\n // Voice processing: normalize, gain, convert to stereo\n $filters '0:aloudnormI-18:LRA10:TP-1.5,volume1.5dB,aformatchannel_layoutsstereovoice_norm';\n\n // Voice delay (let the music establish ambiance first)\n $delayMs $params'voice_delay_seconds' * 1000;\n $filters \"voice_normadelay{$delayMs}|{$delayMs}voice_for_mix\";\n\n // Music processing: normalize, EQ, gain\n $filters '1:aloudnormI-19:LRA9:TP-2,' .\n 'highpassf80,lowpassf12000,' .\n 'equalizerf4000:width_typeh:width800:g-3,' .\n 'volume-1dBmusic_proc';\n\n // The mix with intelligent weighting\n $filters 'music_procvoice_for_mixamixinputs2:normalize0:dropout_transition2:weights1 1mix_combined';\n\n // Final mastering: fade-in and loudness normalization\n $filters 'mix_combinedafadetin:ss0:d0.12,loudnormI-15:LRA8:TP-2final';\n\n return implode(';', $filters);\n}\n```\n\n### Time-Context Aware Mixing\n\nThe system adapts mixing parameters based on when the mantra will be consumed:\n\n| Context | Voice Delay | Ducking Ratio | Character |\n|-----------|---------------|-----------------|------------------------|\n| Morning | 3-4 seconds | 4-6 (gentle) | Energizing, music-forward |\n| Afternoon | 5-6 seconds | 6-8 (moderate) | Balanced focus |\n| Night | 6-8 seconds | 9-12 (strong) | Voice-dominant, calming |\n\n## The Learning System: Vector Memory & RAG\n\n### Storing Successful Mixes\n\nEvery successful mix becomes training data for future generations:\n\n```php\nprivate function storeSuccessfulMix(\n array $params,\n array $voiceInfo,\n array $musicInfo,\n AgentContext $context\n): void {\n $description sprintf(\n 'Successful audio mix: Voice duration %.1fs, Music duration %.1fs. ' .\n 'Ducking: %s threshold, %.2f ratio, %dms attack, %dms release.',\n $voiceInfo'duration',\n $musicInfo'duration',\n $params'ducking_threshold',\n $params'ducking_ratio',\n $params'ducking_attack',\n $params'ducking_release'\n );\n\n $agent->vector()->addDocument(\n 'content' > $description,\n 'metadata' > \n 'parameters' > $params,\n 'duration_ratio' > $voiceInfo'duration' / max($musicInfo'duration', 1),\n 'timestamp' > now()->toIso8601String(),\n ,\n 'namespace' > 'audio_mixing',\n );\n}\n```\n\n### Retrieval-Augmented Generation (RAG)\n\nBefore mixing new content, the system queries its vector memory for similar successful mixes:\n\n```php\n$similarMixes $agent->rag()->search(\n 'query' > \"meditation mantra mixing with {$voice->label} and {$music->label}\",\n 'namespace' > 'audio_mixing',\n 'limit' > 3,\n 'threshold' > 0.7,\n);\n```\n\nThis means a morning energizing mantra automatically inherits parameters from past successful morning mixes—while still allowing Gemini to fine-tune for the specific content.\n\n## Quality Assurance: AI-Powered Evaluation\n\nWe don't just generate audio—we evaluate it. Our evaluation framework uses LLM judges to assess mix quality:\n\n### Voice Clarity Assertion\n\n```php\nclass VoiceClarityAssertion extends BaseAssertion\n{\n protected function getPrompt(\n string $input,\n string $output,\n ?string $expected null\n ): string {\n return <<<PROMPT\n Evaluate voice clarity in this meditation mantra mix:\n\n **Clarity Criteria:**\n 1. Voice Prominence (30 points)\n 2. Intelligibility (30 points)\n 3. Frequency Clarity (20 points)\n 4. Mix Balance (20 points)\n\n Voice should be effortlessly intelligible and feel natural,\n as if narrator is speaking directly to listener with gentle\n ambient music in background.\n PROMPT;\n }\n}\n```\n\n### Ducking Effectiveness Assertion\n\n```php\nclass DuckingEffectivenessAssertion extends BaseAssertion\n{\n // Evaluates smoothness of transitions\n // Validates music reduction when voice is present\n // Ensures meditation suitability\n}\n```\n\n## Safety First: Parameter Guardrails\n\nAI can be creative—sometimes too creative. We enforce strict parameter bounds to prevent audio disasters:\n\n```php\nprivate const SAFE_VOICE_NORMALIZATION 'loudnormI-18:LRA10:TP-1.5:dual_monotrue:lineartrue';\nprivate const SAFE_DUCKING_RATIO 3;\nprivate const SAFE_DUCKING_THRESHOLD_DB -22;\nprivate const MIN_VOICE_DELAY_SECONDS 2;\nprivate const MAX_VOICE_DELAY_SECONDS 20;\n\nprivate function enforceParameterSafety(\n array $params,\n array $voiceInfo,\n array $musicInfo\n): array {\n // Ensure voice delay respects music duration\n $availableIntro $musicDuration - $voiceDuration - self::MUSIC_TAIL_BUFFER_SECONDS;\n $params'voice_delay_seconds' max(\n self::MIN_VOICE_DELAY_SECONDS,\n min(self::MAX_VOICE_DELAY_SECONDS, (int) round($availableIntro))\n );\n\n // Clamp all parameters to safe ranges\n $params'ducking_ratio' max(3, min(12, $params'ducking_ratio'));\n $params'voice_gain_db' max(-2.0, min(3.0, $params'voice_gain_db'));\n $params'music_gain_db' max(-4.0, min(1.0, $params'music_gain_db'));\n\n return $params;\n}\n```\n\n## The Complete Pipeline\n\nHere's how a mantra is born:\n\n```mermaid\nflowchart TD\n AUser Request --> B{Content IDs Provided?}\n B -->|No| CFindUnmixedContentTool\n B -->|Yes| DAnalyze Audio Files\n C --> D\n D --> EQuery Vector Memory for Similar Mixes\n E --> FGemini Analyzes Audio + Metadata\n F --> GGenerate FFmpeg Parameters\n G --> HApply Safety Guardrails\n H --> IExecute FFmpeg Mix\n I --> J{Mix Successful?}\n J -->|Yes| KStore in Vector Memory\n J -->|No| LRetry with Fallback Params\n L --> I\n K --> MCreate Content Record\n M --> NGenerate Social Cards\n N --> OMantra Published! 🧘\n```\n\n## Results: The Numbers Speak\n\nSince deploying this system:\n\n- **Processing Time:** ~30-60 seconds per mantra (vs. 15-30 minutes for manual mixing)\n- **Quality Consistency:** 75%+ pass rate on automated quality evaluations\n- **Learning Curve:** System performance improves measurably after ~50 successful mixes\n- **Human Intervention:** <5% of mixes require manual adjustment\n\n## What We Learned\n\n### 1. AI Needs Guardrails\n\nGemini occasionally suggests parameters that would produce technically valid but aesthetically poor results. Our safety layer is essential.\n\n### 2. Vector Memory is Powerful\n\nThe RAG system's ability to recall successful mixes transformed our quality curve. New content benefits from all past successes.\n\n### 3. Context Matters\n\nA \"good mix\" for morning meditation is different from night. Time-aware parameter selection dramatically improved user satisfaction.\n\n### 4. FFmpeg is Incredibly Capable\n\nFFmpeg 8's filter graph system is essentially a visual programming language for audio. Combined with AI parameter generation, it's unstoppable.\n\n## What's Next\n\nWe're exploring:\n\n- **Real-time audio analysis** during mixing for adaptive parameter adjustment\n- **User feedback loops** to incorporate listener preferences into the learning system\n- **Multi-track mixing** for more complex compositions with ambient sounds\n- **Personalized mixing profiles** based on individual user listening patterns\n\n## Try It Yourself\n\nThe core concepts are transferable to any audio processing pipeline:\n\n1. **Analyze** your inputs with FFprobe\n2. **Query** past successes from a vector database\n3. **Generate** parameters with a capable LLM\n4. **Apply** safety bounds before execution\n5. **Store** successful results for future learning\n\nThe result? A system that gets better with every mix—turning the art of audio engineering into a learnable, scalable process.\n\n---\n\n*Built with Laravel 12, Filament 4, Vizra ADK, FFmpeg 8, Google Gemini, and a deep appreciation for the meditation practitioners who use our content every day.* 🧘♀️","filePath":0,"src/content/blog/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.md","digest":0,"28d9b5dbc8ff7050","rendered":0,{"html":0,"<h1 id\"from-silence-to-symphony-how-we-built-an-ai-powered-audio-mixing-engine-with-ffmpeg-8-and-intelligent-agents\">From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents</h1>\n<p>Creating professional meditation audio isn’t just about layering a voice track over background music. It’s an intricate dance of frequencies, dynamics, and timing that traditionally required a skilled audio engineer with years of experience.</p>\n<h2 id\"the-challenge-when-art-meets-algorithm\">The Challenge: When Art Meets Algorithm</h2>\n<p>Our challenge was ambitious: automate the creation of studio-quality meditation mantras by intelligently mixing voice narrations with background music—while ensuring the result felt organic, not robotic.</p>\n<p>We didn’t want to simply apply static presets. We wanted a system that learns, adapts, and improves with every successful mix.</p>\n<h2 id\"the-architecture-a-symphony-of-ai-agents\">The Architecture: A Symphony of AI Agents</h2>\n<p>At the heart of our solution is a sophisticated multi-agent system built on the Vizra ADK (Agent Development Kit), orchestrating several specialized components:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"plaintext\"><code><span class\"line\"><span>┌─────────────────────────────────────────────────────────────┐</span></span>\n<span class\"line\"><span>│ MantraGenerationWorkflow │</span></span>\n<span class\"line\"><span>├─────────────────────────────────────────────────────────────┤</span></span>\n<span class\"line\"><span>│ ┌─────────────────┐ ┌──────────────────────────────┐ │</span></span>\n<span class\"line\"><span>│ │ Content Finder │ → │ MantraGenerationAgent │ │</span></span>\n<span class\"line\"><span>│ │ (FindUnmixed) │ │ (Gemini 2.5 Flash) │ │</span></span>\n<span class\"line\"><span>│ └─────────────────┘ └──────────────────────────────┘ │</span></span>\n<span class\"line\"><span>│ ↓ ↓ │</span></span>\n<span class\"line\"><span>│ ┌─────────────────────────────────────────────────────┐ │</span></span>\n<span class\"line\"><span>│ │ IntelligentFFmpegMixerTool │ │</span></span>\n<span class\"line\"><span>│ │ ┌───────────┐ ┌────────────┐ ┌────────────────┐ │ │</span></span>\n<span class\"line\"><span>│ │ │ Gemini AI │→ │ Vector RAG │→ │ FFmpeg 8 Engine│ │ │</span></span>\n<span class\"line\"><span>│ │ │ Parameter │ │ Learning │ │ Execution │ │ │</span></span>\n<span class\"line\"><span>│ │ │ Generator │ │ System │ │ │ │ │</span></span>\n<span class\"line\"><span>│ │ └───────────┘ └────────────┘ └────────────────┘ │ │</span></span>\n<span class\"line\"><span>│ └─────────────────────────────────────────────────────┘ │</span></span>\n<span class\"line\"><span>└─────────────────────────────────────────────────────────────┘</span></span></code></pre>\n<h3 id\"the-mantragenerationagent\">The MantraGenerationAgent</h3>\n<p>Our primary agent operates as an “AI Audio Engineer” that coordinates the entire mixing process:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> MantraGenerationAgent</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseLlmAgent</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $model </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'gemini-2.5-flash'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> ?float</span><span style\"color:#E1E4E8\"> $temperature </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> 0.5</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $tools </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> FindUnmixedContentTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> IntelligentFFmpegMixerTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> VectorMemoryTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<p>The agent receives high-level instructions and autonomously decides:</p>\n<ul>\n<li>Which voice and music content to pair together</li>\n<li>When to consult past successful mixes</li>\n<li>How to adjust parameters based on time-of-day context (morning energizing vs. night calming)</li>\n</ul>\n<h2 id\"the-intelligence-layer-gemini--audio-analysis\">The Intelligence Layer: Gemini + Audio Analysis</h2>\n<h3 id\"real-time-audio-intelligence\">Real-Time Audio Intelligence</h3>\n<p>Before any mixing occurs, our system performs comprehensive audio analysis using FFmpeg’s probing capabilities:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> analyzeAudio</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">string</span><span style\"color:#E1E4E8\"> $path)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $command </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> sprintf</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'ffprobe -v quiet -print_format json -show_format -show_streams %s'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> escapeshellarg</span><span style\"color:#E1E4E8\">($path)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'duration'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">float</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'format'</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'bitrate'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'format'</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'bit_rate'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">) </span><span style\"color:#F97583\">/</span><span style\"color:#79B8FF\"> 1000</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'channels'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'streams'</span><span style\"color:#E1E4E8\"></span><span style\"color:#79B8FF\">0</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'channels'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'sample_rate'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'streams'</span><span style\"color:#E1E4E8\"></span><span style\"color:#79B8FF\">0</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'sample_rate'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 44100</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"ai-driven-parameter-generation\">AI-Driven Parameter Generation</h3>\n<p>The magic happens when we feed audio characteristics and actual audio files to Gemini 2.0 Flash for parameter optimization:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#E1E4E8\">$response </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Prism</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">structured</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">using</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">Provider</span><span style\"color:#F97583\">::</span><span style\"color:#79B8FF\">Gemini</span><span style\"color:#E1E4E8\">, </span><span style\"color:#9ECBFF\">'gemini-2.0-flash-exp'</span><span style\"color:#E1E4E8\">)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">withPrompt</span><span style\"color:#E1E4E8\">($prompt, $voiceAttachment, $musicAttachment)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">withSchema</span><span style\"color:#E1E4E8\">($mixingParametersSchema)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">asStructured</span><span style\"color:#E1E4E8\">();</span></span></code></pre>\n<p>Gemini analyzes both the metadata and the actual audio content, then returns optimized FFmpeg parameters tailored to the specific voice-music pairing.</p>\n<h2 id\"the-heart-of-the-mix-ffmpeg-8-filter-chains\">The Heart of the Mix: FFmpeg 8 Filter Chains</h2>\n<h3 id\"dynamic-filter-construction\">Dynamic Filter Construction</h3>\n<p>Our system constructs sophisticated FFmpeg filter chains based on AI recommendations:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> buildFilters</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">array</span><span style\"color:#E1E4E8\"> $params)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Voice processing: normalize, gain, convert to stereo</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> '0:aloudnormI-18:LRA10:TP-1.5,volume1.5dB,aformatchannel_layoutsstereovoice_norm'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Voice delay (let the music establish ambiance first)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $delayMs </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_delay_seconds'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">*</span><span style\"color:#79B8FF\"> 1000</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> \"voice_normadelay{</span><span style\"color:#E1E4E8\">$delayMs</span><span style\"color:#9ECBFF\">}|{</span><span style\"color:#E1E4E8\">$delayMs</span><span style\"color:#9ECBFF\">}voice_for_mix\"</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Music processing: normalize, EQ, gain</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> '1:aloudnormI-19:LRA9:TP-2,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'highpassf80,lowpassf12000,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'equalizerf4000:width_typeh:width800:g-3,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'volume-1dBmusic_proc'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // The mix with intelligent weighting</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'music_procvoice_for_mixamixinputs2:normalize0:dropout_transition2:weights1 1mix_combined'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Final mastering: fade-in and loudness normalization</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'mix_combinedafadetin:ss0:d0.12,loudnormI-15:LRA8:TP-2final'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#79B8FF\"> implode</span><span style\"color:#E1E4E8\">(</span><span style\"color:#9ECBFF\">';'</span><span style\"color:#E1E4E8\">, $filters);</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"time-context-aware-mixing\">Time-Context Aware Mixing</h3>\n<p>The system adapts mixing parameters based on when the mantra will be consumed:</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Context</th><th>Voice Delay</th><th>Ducking Ratio</th><th>Character</th></tr></thead><tbody><tr><td>Morning</td><td>3-4 seconds</td><td>4-6 (gentle)</td><td>Energizing, music-forward</td></tr><tr><td>Afternoon</td><td>5-6 seconds</td><td>6-8 (moderate)</td><td>Balanced focus</td></tr><tr><td>Night</td><td>6-8 seconds</td><td>9-12 (strong)</td><td>Voice-dominant, calming</td></tr></tbody></table>\n<h2 id\"the-learning-system-vector-memory--rag\">The Learning System: Vector Memory & RAG</h2>\n<h3 id\"storing-successful-mixes\">Storing Successful Mixes</h3>\n<p>Every successful mix becomes training data for future generations:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> storeSuccessfulMix</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $voiceInfo,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $musicInfo,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> AgentContext</span><span style\"color:#E1E4E8\"> $context</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> void</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $description </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> sprintf</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'Successful audio mix: Voice duration %.1fs, Music duration %.1fs. '</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'Ducking: %s threshold, %.2f ratio, %dms attack, %dms release.'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $voiceInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $musicInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_threshold'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_attack'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_release'</span><span style\"color:#E1E4E8\"></span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $agent</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">vector</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">addDocument</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'content'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $description,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'metadata'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'parameters'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'duration_ratio'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $voiceInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">/</span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">($musicInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">1</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'timestamp'</span><span style\"color:#F97583\"> ></span><span style\"color:#B392F0\"> now</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">toIso8601String</span><span style\"color:#E1E4E8\">(),</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'namespace'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'audio_mixing'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"retrieval-augmented-generation-rag\">Retrieval-Augmented Generation (RAG)</h3>\n<p>Before mixing new content, the system queries its vector memory for similar successful mixes:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#E1E4E8\">$similarMixes </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $agent</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">rag</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">search</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'query'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> \"meditation mantra mixing with {</span><span style\"color:#E1E4E8\">$voice</span><span style\"color:#F97583\">-></span><span style\"color:#E1E4E8\">label</span><span style\"color:#9ECBFF\">} and {</span><span style\"color:#E1E4E8\">$music</span><span style\"color:#F97583\">-></span><span style\"color:#E1E4E8\">label</span><span style\"color:#9ECBFF\">}\"</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'namespace'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'audio_mixing'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'limit'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> 3</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'threshold'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> 0.7</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">);</span></span></code></pre>\n<p>This means a morning energizing mantra automatically inherits parameters from past successful morning mixes—while still allowing Gemini to fine-tune for the specific content.</p>\n<h2 id\"quality-assurance-ai-powered-evaluation\">Quality Assurance: AI-Powered Evaluation</h2>\n<p>We don’t just generate audio—we evaluate it. Our evaluation framework uses LLM judges to assess mix quality:</p>\n<h3 id\"voice-clarity-assertion\">Voice Clarity Assertion</h3>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> VoiceClarityAssertion</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseAssertion</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> getPrompt</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $input,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $output,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> ?string</span><span style\"color:#E1E4E8\"> $expected </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> null</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> )</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#9ECBFF\"> <<<</span><span style\"color:#F97583\">PROMPT</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> Evaluate voice clarity in this meditation mantra mix:</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> **Clarity Criteria:**</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 1. Voice Prominence (30 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 2. Intelligibility (30 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 3. Frequency Clarity (20 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 4. Mix Balance (20 points)</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> Voice should be effortlessly intelligible and feel natural,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> as if narrator is speaking directly to listener with gentle</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> ambient music in background.</span></span>\n<span class\"line\"><span style\"color:#F97583\"> PROMPT</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"ducking-effectiveness-assertion\">Ducking Effectiveness Assertion</h3>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> DuckingEffectivenessAssertion</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseAssertion</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Evaluates smoothness of transitions</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Validates music reduction when voice is present</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Ensures meditation suitability</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"safety-first-parameter-guardrails\">Safety First: Parameter Guardrails</h2>\n<p>AI can be creative—sometimes too creative. We enforce strict parameter bounds to prevent audio disasters:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_VOICE_NORMALIZATION</span><span style\"color:#F97583\"> </span><span style\"color:#9ECBFF\"> 'loudnormI-18:LRA10:TP-1.5:dual_monotrue:lineartrue'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_DUCKING_RATIO</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 3</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_DUCKING_THRESHOLD_DB</span><span style\"color:#F97583\"> </span><span style\"color:#F97583\"> -</span><span style\"color:#79B8FF\">22</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> MIN_VOICE_DELAY_SECONDS</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 2</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> MAX_VOICE_DELAY_SECONDS</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 20</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> enforceParameterSafety</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $voiceInfo,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $musicInfo</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Ensure voice delay respects music duration</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $availableIntro </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $musicDuration </span><span style\"color:#F97583\">-</span><span style\"color:#E1E4E8\"> $voiceDuration </span><span style\"color:#F97583\">-</span><span style\"color:#F97583\"> self::</span><span style\"color:#79B8FF\">MUSIC_TAIL_BUFFER_SECONDS</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_delay_seconds'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> self::</span><span style\"color:#79B8FF\">MIN_VOICE_DELAY_SECONDS</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">self::</span><span style\"color:#79B8FF\">MAX_VOICE_DELAY_SECONDS</span><span style\"color:#E1E4E8\">, (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) </span><span style\"color:#79B8FF\">round</span><span style\"color:#E1E4E8\">($availableIntro))</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Clamp all parameters to safe ranges</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">3</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">12</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_gain_db'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">-</span><span style\"color:#79B8FF\">2.0</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">3.0</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'voice_gain_db'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'music_gain_db'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">-</span><span style\"color:#79B8FF\">4.0</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">1.0</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'music_gain_db'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> $params;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"the-complete-pipeline\">The Complete Pipeline</h2>\n<p>Here’s how a mantra is born:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"mermaid\"><code><span class\"line\"><span style\"color:#E1E4E8\">flowchart TD</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> AUser Request --> B{Content IDs Provided?}</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> B -->|No| CFindUnmixedContentTool</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> B -->|Yes| DAnalyze Audio Files</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> C --> D</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> D --> EQuery Vector Memory for Similar Mixes</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> E --> FGemini Analyzes Audio + Metadata</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> F --> GGenerate FFmpeg Parameters</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> G --> HApply Safety Guardrails</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> H --> IExecute FFmpeg Mix</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> I --> J{Mix Successful?}</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> J -->|Yes| KStore in Vector Memory</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> J -->|No| LRetry with Fallback Params</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> L --> I</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> K --> MCreate Content Record</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> M --> NGenerate Social Cards</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> N --> OMantra Published! 🧘</span></span></code></pre>\n<h2 id\"results-the-numbers-speak\">Results: The Numbers Speak</h2>\n<p>Since deploying this system:</p>\n<ul>\n<li><strong>Processing Time:</strong> ~30-60 seconds per mantra (vs. 15-30 minutes for manual mixing)</li>\n<li><strong>Quality Consistency:</strong> 75%+ pass rate on automated quality evaluations</li>\n<li><strong>Learning Curve:</strong> System performance improves measurably after ~50 successful mixes</li>\n<li><strong>Human Intervention:</strong> <5% of mixes require manual adjustment</li>\n</ul>\n<h2 id\"what-we-learned\">What We Learned</h2>\n<h3 id\"1-ai-needs-guardrails\">1. AI Needs Guardrails</h3>\n<p>Gemini occasionally suggests parameters that would produce technically valid but aesthetically poor results. Our safety layer is essential.</p>\n<h3 id\"2-vector-memory-is-powerful\">2. Vector Memory is Powerful</h3>\n<p>The RAG system’s ability to recall successful mixes transformed our quality curve. New content benefits from all past successes.</p>\n<h3 id\"3-context-matters\">3. Context Matters</h3>\n<p>A “good mix” for morning meditation is different from night. Time-aware parameter selection dramatically improved user satisfaction.</p>\n<h3 id\"4-ffmpeg-is-incredibly-capable\">4. FFmpeg is Incredibly Capable</h3>\n<p>FFmpeg 8’s filter graph system is essentially a visual programming language for audio. Combined with AI parameter generation, it’s unstoppable.</p>\n<h2 id\"whats-next\">What’s Next</h2>\n<p>We’re exploring:</p>\n<ul>\n<li><strong>Real-time audio analysis</strong> during mixing for adaptive parameter adjustment</li>\n<li><strong>User feedback loops</strong> to incorporate listener preferences into the learning system</li>\n<li><strong>Multi-track mixing</strong> for more complex compositions with ambient sounds</li>\n<li><strong>Personalized mixing profiles</strong> based on individual user listening patterns</li>\n</ul>\n<h2 id\"try-it-yourself\">Try It Yourself</h2>\n<p>The core concepts are transferable to any audio processing pipeline:</p>\n<ol>\n<li><strong>Analyze</strong> your inputs with FFprobe</li>\n<li><strong>Query</strong> past successes from a vector database</li>\n<li><strong>Generate</strong> parameters with a capable LLM</li>\n<li><strong>Apply</strong> safety bounds before execution</li>\n<li><strong>Store</strong> successful results for future learning</li>\n</ol>\n<p>The result? A system that gets better with every mix—turning the art of audio engineering into a learnable, scalable process.</p>\n<hr>\n<p><em>Built with Laravel 12, Filament 4, Vizra ADK, FFmpeg 8, Google Gemini, and a deep appreciation for the meditation practitioners who use our content every day.</em> 🧘♀️</p>","metadata":0,{"headings":1,0,{"depth":0,1,"slug":0,"from-silence-to-symphony-how-we-built-an-ai-powered-audio-mixing-engine-with-ffmpeg-8-and-intelligent-agents","text":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents"},0,{"depth":0,2,"slug":0,"the-challenge-when-art-meets-algorithm","text":0,"The Challenge: When Art Meets Algorithm"},0,{"depth":0,2,"slug":0,"the-architecture-a-symphony-of-ai-agents","text":0,"The Architecture: A Symphony of AI Agents"},0,{"depth":0,3,"slug":0,"the-mantragenerationagent","text":0,"The MantraGenerationAgent"},0,{"depth":0,2,"slug":0,"the-intelligence-layer-gemini--audio-analysis","text":0,"The Intelligence Layer: Gemini + Audio Analysis"},0,{"depth":0,3,"slug":0,"real-time-audio-intelligence","text":0,"Real-Time Audio Intelligence"},0,{"depth":0,3,"slug":0,"ai-driven-parameter-generation","text":0,"AI-Driven Parameter Generation"},0,{"depth":0,2,"slug":0,"the-heart-of-the-mix-ffmpeg-8-filter-chains","text":0,"The Heart of the Mix: FFmpeg 8 Filter Chains"},0,{"depth":0,3,"slug":0,"dynamic-filter-construction","text":0,"Dynamic Filter Construction"},0,{"depth":0,3,"slug":0,"time-context-aware-mixing","text":0,"Time-Context Aware Mixing"},0,{"depth":0,2,"slug":0,"the-learning-system-vector-memory--rag","text":0,"The Learning System: Vector Memory & RAG"},0,{"depth":0,3,"slug":0,"storing-successful-mixes","text":0,"Storing Successful Mixes"},0,{"depth":0,3,"slug":0,"retrieval-augmented-generation-rag","text":0,"Retrieval-Augmented Generation (RAG)"},0,{"depth":0,2,"slug":0,"quality-assurance-ai-powered-evaluation","text":0,"Quality Assurance: AI-Powered Evaluation"},0,{"depth":0,3,"slug":0,"voice-clarity-assertion","text":0,"Voice Clarity Assertion"},0,{"depth":0,3,"slug":0,"ducking-effectiveness-assertion","text":0,"Ducking Effectiveness Assertion"},0,{"depth":0,2,"slug":0,"safety-first-parameter-guardrails","text":0,"Safety First: Parameter Guardrails"},0,{"depth":0,2,"slug":0,"the-complete-pipeline","text":0,"The Complete Pipeline"},0,{"depth":0,2,"slug":0,"results-the-numbers-speak","text":0,"Results: The Numbers Speak"},0,{"depth":0,2,"slug":0,"what-we-learned","text":0,"What We Learned"},0,{"depth":0,3,"slug":0,"1-ai-needs-guardrails","text":0,"1. AI Needs Guardrails"},0,{"depth":0,3,"slug":0,"2-vector-memory-is-powerful","text":0,"2. Vector Memory is Powerful"},0,{"depth":0,3,"slug":0,"3-context-matters","text":0,"3. Context Matters"},0,{"depth":0,3,"slug":0,"4-ffmpeg-is-incredibly-capable","text":0,"4. FFmpeg is Incredibly Capable"},0,{"depth":0,2,"slug":0,"whats-next","text":0,"What’s Next"},0,{"depth":0,2,"slug":0,"try-it-yourself","text":0,"Try It Yourself"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents","description":0,"How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix.","pubDate":3,"2025-01-19T00:00:00.000Z","tags":1,0,"ai",0,"audio-engineering",0,"ffmpeg",0,"laravel",0,"machine-learning",0,"content-generation",0,"vector-database",0,"rag",0,"vizra",0,"php","category":0,"Engineering","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents","render":0,null},"readingTime":0,1},0,{"post":0,{"id":0,"orchestrating-multimedia-magic-vizra-adk-workflows.md","data":0,{"title":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows","description":0,"A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals.","pubDate":3,"2024-12-19T00:00:00.000Z","tags":1,0,"ai",0,"workflows",0,"multimedia",0,"php",0,"vizra",0,"llm",0,"orchestration",0,"content-generation","category":0,"Engineering","draft":0,false},"body":0,"# Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows\n\nIn my recent work, I wasn't just generating text; I was building immersive multimedia experiences. Whether it was generating daily briefings, educational content, or dynamic updates, relying on a single LLM prompt often fell short.\n\nTo create high-quality content that combined researched text, synthesized audio (via ElevenLabs), and generated imagery, I needed orchestration. Enter **Vizra ADK Workflows**.\n\nHere is a deep dive into how I leveraged Vizra's workflow patterns to turn a simple topic into a full multimedia package.\n\n## The Challenge: Coordination vs. Chaos\n\nGenerating multimedia requires distinct steps:\n1. **Research & Writing:** Ensuring factual accuracy (RAG) and engaging copy.\n2. **Audio Synthesis:** Converting text to speech using specific voice profiles.\n3. **Visuals:** Generating thumbnails or accompanying images.\n\nDoing this linearly is slow. Doing it without structure is error-prone. I needed a system that could handle sequential logic for writing and parallel execution for asset generation.\n\n## The Solution: The Vizra Workflow\n\nI utilized the `Workflow` facade provided by Vizra ADK to compose a pipeline that mixes sequential and parallel execution patterns.\n\n### 1. The Architect: Sequential Planning\n\nEverything starts with a script. I used a **Sequential Workflow** to ensure I had a solid foundation before generating expensive assets.\n\n```php\nuse Vizra\\VizraADK\\Facades\\Workflow;\nuse App\\Agents\\Content\\ResearcherAgent;\nuse App\\Agents\\Content\\ScriptWriterAgent;\n\npublic function generateContent(string $topic)\n{\n // Step 1: Research and Write\n $scriptData Workflow::sequential()\n ->then(ResearcherAgent::class) // Uses Meilisearch Vector Store\n ->then(ScriptWriterAgent::class) // Uses Gemini Pro for reasoning\n ->run($topic);\n\n // ... pass to next stage\n}\n```\n\nIn this stage, the `ResearcherAgent` uses the `VectorMemoryTool` (backed by Meilisearch) to pull relevant context. The `ScriptWriterAgent` then formats this into a JSON structure containing a title, body, and a prompt for the image generator.\n\n### 2. The Factory: Parallel Asset Generation\n\nOnce I had the script, I didn't want to wait for the audio to finish before starting the image generation. Vizra's **Parallel Workflow** allowed me to spin up multiple agents simultaneously.\n\nI passed the output from the sequential step into a parallel block.\n\n```php\n // ... inside generateContent\n\n $assets Workflow::parallel()\n ->agents(\n 'audio' > VoiceOverAgent::class,\n 'visual' > ThumbnailGeneratorAgent::class,\n )\n ->run($scriptData'final_script');\n\n return \n 'script' > $scriptData,\n 'audio_path' > $assets'audio',\n 'image_url' > $assets'visual',\n ;\n}\n```\n\n### 3. The Agents & Tools\n\nThe magic happens inside the specialized agents. Here is how I configured them using the Vizra ADK structure.\n\n#### The Voice Over Agent (ElevenLabs)\n\nThis agent is responsible for taking text and returning a path to an MP3 file. It utilizes a custom tool I built to interface with the ElevenLabs API.\n\n```php\nnamespace App\\Agents\\Content;\n\nuse Vizra\\VizraADK\\Agents\\BaseLlmAgent;\nuse App\\Tools\\Audio\\ElevenLabsTtsTool;\n\nclass VoiceOverAgent extends BaseLlmAgent\n{\n protected string $name 'voice_over_specialist';\n\n protected string $model 'gpt-4o-mini'; // Fast, low cost for tool calling\n\n protected string $instructions <<<'INSTRUCTIONS'\n You are an audio engineer.\n 1. Receive the script text.\n 2. Select the appropriate voice ID based on the content tone.\n 3. Use the 'text_to_speech' tool to generate the audio.\n 4. Return the file path provided by the tool.\n INSTRUCTIONS;\n\n protected array $tools \n ElevenLabsTtsTool::class,\n ;\n}\n```\n\n#### The Tool Implementation\n\nThe `ElevenLabsTtsTool` handles the actual API call, keeping my agent logic clean.\n\n```php\nnamespace App\\Tools\\Audio;\n\nuse Vizra\\VizraADK\\Contracts\\ToolInterface;\nuse Illuminate\\Support\\Facades\\Http;\n\nclass ElevenLabsTtsTool implements ToolInterface\n{\n public function definition(): array\n {\n return \n 'name' > 'text_to_speech',\n 'description' > 'Converts text to audio using ElevenLabs',\n 'parameters' > \n 'type' > 'object',\n 'properties' > \n 'text' > 'type' > 'string',\n 'voice_id' > 'type' > 'string',\n ,\n 'required' > 'text',\n ,\n ;\n }\n\n public function execute(array $arguments, $context, $memory): string\n {\n // Implementation calling ElevenLabs API...\n // Returns JSON with { \"status\": \"success\", \"path\": \"...\" }\n }\n}\n```\n\n## Why This Approach Wins\n\n1. **Modularity:** If I want to switch from ElevenLabs to OpenAI TTS, I just swap the tool in the `VoiceOverAgent`. The workflow remains untouched.\n2. **Speed:** By parallelizing the asset generation, I cut the total processing time by nearly 50%.\n3. **Observability:** Vizra's built-in tracing allows me to see exactly what the `ResearcherAgent` found in Meilisearch and why the `ScriptWriterAgent` made specific creative decisions.\n4. **Maintainability:** Each agent has a single responsibility. The `ResearcherAgent` doesn't know about audio files, and the `VoiceOverAgent` doesn't care about SEO keywords.\n\n## Conclusion\n\nBuilding complex AI features isn't just about prompt engineering; it's about architecture. By treating LLMs as specialized workers within a Vizra Workflow, I've turned a complex, multi-modal generation process into a reliable, maintainable pipeline.","filePath":0,"src/content/blog/orchestrating-multimedia-magic-vizra-adk-workflows.md","digest":0,"694a3840fbe261ff","rendered":0,{"html":0,"<h1 id\"orchestrating-multimedia-magic-how-i-built-content-generation-with-vizra-adk-workflows\">Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows</h1>\n<p>In my recent work, I wasn’t just generating text; I was building immersive multimedia experiences. Whether it was generating daily briefings, educational content, or dynamic updates, relying on a single LLM prompt often fell short.</p>\n<p>To create high-quality content that combined researched text, synthesized audio (via ElevenLabs), and generated imagery, I needed orchestration. Enter <strong>Vizra ADK Workflows</strong>.</p>\n<p>Here is a deep dive into how I leveraged Vizra’s workflow patterns to turn a simple topic into a full multimedia package.</p>\n<h2 id\"the-challenge-coordination-vs-chaos\">The Challenge: Coordination vs. Chaos</h2>\n<p>Generating multimedia requires distinct steps:</p>\n<ol>\n<li><strong>Research & Writing:</strong> Ensuring factual accuracy (RAG) and engaging copy.</li>\n<li><strong>Audio Synthesis:</strong> Converting text to speech using specific voice profiles.</li>\n<li><strong>Visuals:</strong> Generating thumbnails or accompanying images.</li>\n</ol>\n<p>Doing this linearly is slow. Doing it without structure is error-prone. I needed a system that could handle sequential logic for writing and parallel execution for asset generation.</p>\n<h2 id\"the-solution-the-vizra-workflow\">The Solution: The Vizra Workflow</h2>\n<p>I utilized the <code>Workflow</code> facade provided by Vizra ADK to compose a pipeline that mixes sequential and parallel execution patterns.</p>\n<h3 id\"1-the-architect-sequential-planning\">1. The Architect: Sequential Planning</h3>\n<p>Everything starts with a script. I used a <strong>Sequential Workflow</strong> to ensure I had a solid foundation before generating expensive assets.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Facades\\Workflow</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Agents\\Content\\ResearcherAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Agents\\Content\\ScriptWriterAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> generateContent</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">string</span><span style\"color:#E1E4E8\"> $topic)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Step 1: Research and Write</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $scriptData </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Workflow</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">sequential</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">then</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">ResearcherAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">) </span><span style\"color:#6A737D\">// Uses Meilisearch Vector Store</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">then</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">ScriptWriterAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">) </span><span style\"color:#6A737D\">// Uses Gemini Pro for reasoning</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">run</span><span style\"color:#E1E4E8\">($topic);</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // ... pass to next stage</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<p>In this stage, the <code>ResearcherAgent</code> uses the <code>VectorMemoryTool</code> (backed by Meilisearch) to pull relevant context. The <code>ScriptWriterAgent</code> then formats this into a JSON structure containing a title, body, and a prompt for the image generator.</p>\n<h3 id\"2-the-factory-parallel-asset-generation\">2. The Factory: Parallel Asset Generation</h3>\n<p>Once I had the script, I didn’t want to wait for the audio to finish before starting the image generation. Vizra’s <strong>Parallel Workflow</strong> allowed me to spin up multiple agents simultaneously.</p>\n<p>I passed the output from the sequential step into a parallel block.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#6A737D\"> // ... inside generateContent</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $assets </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Workflow</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">parallel</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">agents</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'audio'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> VoiceOverAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'visual'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> ThumbnailGeneratorAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> )</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">run</span><span style\"color:#E1E4E8\">($scriptData</span><span style\"color:#9ECBFF\">'final_script'</span><span style\"color:#E1E4E8\">);</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'script'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $scriptData,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'audio_path'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $assets</span><span style\"color:#9ECBFF\">'audio'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'image_url'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $assets</span><span style\"color:#9ECBFF\">'visual'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"3-the-agents--tools\">3. The Agents & Tools</h3>\n<p>The magic happens inside the specialized agents. Here is how I configured them using the Vizra ADK structure.</p>\n<h4 id\"the-voice-over-agent-elevenlabs\">The Voice Over Agent (ElevenLabs)</h4>\n<p>This agent is responsible for taking text and returning a path to an MP3 file. It utilizes a custom tool I built to interface with the ElevenLabs API.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">namespace</span><span style\"color:#B392F0\"> App\\Agents\\Content</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Agents\\BaseLlmAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Tools\\Audio\\ElevenLabsTtsTool</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> VoiceOverAgent</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseLlmAgent</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $name </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'voice_over_specialist'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $model </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'gpt-4o-mini'</span><span style\"color:#E1E4E8\">; </span><span style\"color:#6A737D\">// Fast, low cost for tool calling</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $instructions </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> <<<'</span><span style\"color:#F97583\">INSTRUCTIONS</span><span style\"color:#9ECBFF\">'</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> You are an audio engineer.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 1. Receive the script text.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 2. Select the appropriate voice ID based on the content tone.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 3. Use the 'text_to_speech' tool to generate the audio.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 4. Return the file path provided by the tool.</span></span>\n<span class\"line\"><span style\"color:#F97583\"> INSTRUCTIONS</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $tools </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> ElevenLabsTtsTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h4 id\"the-tool-implementation\">The Tool Implementation</h4>\n<p>The <code>ElevenLabsTtsTool</code> handles the actual API call, keeping my agent logic clean.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">namespace</span><span style\"color:#B392F0\"> App\\Tools\\Audio</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Contracts\\ToolInterface</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Illuminate\\Support\\Facades\\Http</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> ElevenLabsTtsTool</span><span style\"color:#F97583\"> implements</span><span style\"color:#B392F0\"> ToolInterface</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> definition</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'name'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'text_to_speech'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'description'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'Converts text to audio using ElevenLabs'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'parameters'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'object'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'properties'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'text'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'string'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'voice_id'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'string'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'required'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'text'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> execute</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">array</span><span style\"color:#E1E4E8\"> $arguments, $context, $memory)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Implementation calling ElevenLabs API...</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Returns JSON with { \"status\": \"success\", \"path\": \"...\" }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"why-this-approach-wins\">Why This Approach Wins</h2>\n<ol>\n<li><strong>Modularity:</strong> If I want to switch from ElevenLabs to OpenAI TTS, I just swap the tool in the <code>VoiceOverAgent</code>. The workflow remains untouched.</li>\n<li><strong>Speed:</strong> By parallelizing the asset generation, I cut the total processing time by nearly 50%.</li>\n<li><strong>Observability:</strong> Vizra’s built-in tracing allows me to see exactly what the <code>ResearcherAgent</code> found in Meilisearch and why the <code>ScriptWriterAgent</code> made specific creative decisions.</li>\n<li><strong>Maintainability:</strong> Each agent has a single responsibility. The <code>ResearcherAgent</code> doesn’t know about audio files, and the <code>VoiceOverAgent</code> doesn’t care about SEO keywords.</li>\n</ol>\n<h2 id\"conclusion\">Conclusion</h2>\n<p>Building complex AI features isn’t just about prompt engineering; it’s about architecture. By treating LLMs as specialized workers within a Vizra Workflow, I’ve turned a complex, multi-modal generation process into a reliable, maintainable pipeline.</p>","metadata":0,{"headings":1,0,{"depth":0,1,"slug":0,"orchestrating-multimedia-magic-how-i-built-content-generation-with-vizra-adk-workflows","text":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows"},0,{"depth":0,2,"slug":0,"the-challenge-coordination-vs-chaos","text":0,"The Challenge: Coordination vs. Chaos"},0,{"depth":0,2,"slug":0,"the-solution-the-vizra-workflow","text":0,"The Solution: The Vizra Workflow"},0,{"depth":0,3,"slug":0,"1-the-architect-sequential-planning","text":0,"1. The Architect: Sequential Planning"},0,{"depth":0,3,"slug":0,"2-the-factory-parallel-asset-generation","text":0,"2. The Factory: Parallel Asset Generation"},0,{"depth":0,3,"slug":0,"3-the-agents--tools","text":0,"3. The Agents & Tools"},0,{"depth":0,4,"slug":0,"the-voice-over-agent-elevenlabs","text":0,"The Voice Over Agent (ElevenLabs)"},0,{"depth":0,4,"slug":0,"the-tool-implementation","text":0,"The Tool Implementation"},0,{"depth":0,2,"slug":0,"why-this-approach-wins","text":0,"Why This Approach Wins"},0,{"depth":0,2,"slug":0,"conclusion","text":0,"Conclusion"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows","description":0,"A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals.","pubDate":3,"2024-12-19T00:00:00.000Z","tags":1,0,"ai",0,"workflows",0,"multimedia",0,"php",0,"vizra",0,"llm",0,"orchestration",0,"content-generation","category":0,"Engineering","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"orchestrating-multimedia-magic-vizra-adk-workflows","render":0,null},"readingTime":0,1},0,{"post":0,{"id":0,"welcome-to-my-blog.md","data":0,{"title":0,"Welcome to My Blog","description":0,"A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology.","pubDate":3,"2024-01-15T00:00:00.000Z","tags":1,0,"blogging",0,"introduction","category":0,"General","draft":0,false},"body":0,"Welcome to my blog! This is where I'll be sharing my thoughts and experiences on software engineering, team leadership, technology trends, and more.\n\n## What to Expect\n\nI plan to write about:\n\n- **Engineering Practices**: Best practices, code quality, architecture decisions\n- **Leadership**: Team management, mentoring, building great engineering cultures\n- **Technology**: Exploring new tools, frameworks, and methodologies\n- **Career Growth**: Lessons learned, challenges overcome, continuous improvement\n\n## Why I'm Writing\n\nSharing knowledge and experiences helps the community grow, and writing helps clarify my own thinking. I hope you find value in these posts!\n\nStay tuned for more content, and feel free to reach out if you'd like to discuss any topics.","filePath":0,"src/content/blog/welcome-to-my-blog.md","digest":0,"ffdbd35717378194","rendered":0,{"html":0,"<p>Welcome to my blog! This is where I’ll be sharing my thoughts and experiences on software engineering, team leadership, technology trends, and more.</p>\n<h2 id\"what-to-expect\">What to Expect</h2>\n<p>I plan to write about:</p>\n<ul>\n<li><strong>Engineering Practices</strong>: Best practices, code quality, architecture decisions</li>\n<li><strong>Leadership</strong>: Team management, mentoring, building great engineering cultures</li>\n<li><strong>Technology</strong>: Exploring new tools, frameworks, and methodologies</li>\n<li><strong>Career Growth</strong>: Lessons learned, challenges overcome, continuous improvement</li>\n</ul>\n<h2 id\"why-im-writing\">Why I’m Writing</h2>\n<p>Sharing knowledge and experiences helps the community grow, and writing helps clarify my own thinking. I hope you find value in these posts!</p>\n<p>Stay tuned for more content, and feel free to reach out if you’d like to discuss any topics.</p>","metadata":0,{"headings":1,0,{"depth":0,2,"slug":0,"what-to-expect","text":0,"What to Expect"},0,{"depth":0,2,"slug":0,"why-im-writing","text":0,"Why I’m Writing"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"Welcome to My Blog","description":0,"A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology.","pubDate":3,"2024-01-15T00:00:00.000Z","tags":1,0,"blogging",0,"introduction","category":0,"General","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"welcome-to-my-blog","render":0,null},"readingTime":0,1}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1h3570>link href/og/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.svg relpreload asimage />link href/og/orchestrating-multimedia-magic-vizra-adk-workflows.svg relpreload asimage />link href/og/welcome-to-my-blog.svg relpreload asimage />div classflex flex-col h-full w-full>div classitems-center flex border-white/5 border-b md:p-6 p-5 justify-between styleopacity:0;transform:translateY(-10px)>div classitems-center flex gap-3>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-book-open fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM12 7v14>/path>path dM3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z>/path>/svg>/div>div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Latest Posts/h2>p classtext-starlight-dim/70 text-xs md:text-sm mt-1>Thoughts on engineering, leadership, and technology. I share patterns that help teams scale, lessons from building commerce platforms, and practical approaches to architecture, operations, and delivery./p>/div>/div>a classitems-center flex gap-1.5 hover:text-accent-teal md:text-sm text-starlight-dim text-xs transition-colors href/blog tabindex0>View Allsvg classlucide h-3.5 w-3.5 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/a>/div>div classflex-1 overflow-y-auto md:p-6 p-5 space-y-4>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altFrom Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2025-01-19T00:00:00.000Z>Jan 19, 2025/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>ai/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>audio-engineering/span>span classpx-2 py-1 text-xs text-starlight-dim/60>+8/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/orchestrating-multimedia-magic-vizra-adk-workflows>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altOrchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/orchestrating-multimedia-magic-vizra-adk-workflows.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2024-12-19T00:00:00.000Z>Dec 19, 2024/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>ai/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>workflows/span>span classpx-2 py-1 text-xs text-starlight-dim/60>+6/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/welcome-to-my-blog>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altWelcome to My Blog blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/welcome-to-my-blog.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>Welcome to My Blog/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2024-01-15T00:00:00.000Z>Jan 15, 2024/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>blogging/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>introduction/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-2 md:col-span-4 order-9>div classw-full relative overflow-hidden h-full md:p-8 p-6>div classabsolute pointer-events-none bg-gradient-to-br from-accent-indigo/10 inset-0 to-accent-teal/10 via-transparent aria-hiddentrue>/div>div classrounded-full absolute blur-3xl pointer-events-none -right-24 -top-24 bg-accent-indigo/10 h-56 w-56 aria-hiddentrue>/div>div classrounded-full absolute blur-3xl pointer-events-none h-64 w-64 -bottom-28 -left-20 bg-accent-teal/10 aria-hiddentrue>/div>div classflex flex-col h-full w-full relative gap-5 z-10>div classitems-center flex justify-between>div>p classtracking-0.3em text-starlight-dim/60 text-xs uppercase>In the zone/p>h2 classmd:text-2xl font-semibold text-starlight text-xl>Working snapshots/h2>/div>span classfont-mono text-xs text-starlight-dim/50>Monitoring · Building · Leading/span>/div>div classrelative flex-1 min-h-280px>div classborder border-white/10 absolute bg-surface/30 inset-0 rounded-28px>/div>div classrelative h-full gap-4 grid grid-cols-1 md:grid-cols-12>figure classborder border-white/10 bg-surface/40 md:col-span-8 overflow-hidden rounded-26px shadow-2xl>img altMiguel working at a multi-monitor setup classw-full h-full object-cover object-center height1536 loadinglazy src/_astro/miguel-working-1.CehBMx2T_1UxIPl.webp width2752 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 70vw, 1600px srcset/_astro/miguel-working-1.CehBMx2T_1hEXnt.webp 900w, /_astro/miguel-working-1.CehBMx2T_1wMag8.webp 1200w, /_astro/miguel-working-1.CehBMx2T_WpYH4.webp 1600w, /_astro/miguel-working-1.CehBMx2T_ZnjMFp.webp 2000w>div classabsolute pointer-events-none inset-0 via-transparent bg-gradient-to-t from-void/35 to-transparent>/div>/figure>div classflex flex-col gap-4 md:col-span-4>figure classborder overflow-hidden bg-surface/60 border-white/15 rounded-2xl shadow-xl>img altMiguel reflecting at the workstation classw-full h-full object-cover object-center height2400 loadinglazy src/_astro/miguel-working-2.C4cEyctP_74eQc.webp width1792 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 30vw, 720px srcset/_astro/miguel-working-2.C4cEyctP_1RfVsY.webp 320w, /_astro/miguel-working-2.C4cEyctP_2qowqO.webp 420w, /_astro/miguel-working-2.C4cEyctP_1YvA3F.webp 640w, /_astro/miguel-working-2.C4cEyctP_I1WgK.webp 900w>/figure>figure classborder overflow-hidden bg-surface/60 border-white/15 rounded-2xl shadow-xl>img altMiguel coding with dashboards in view classw-full h-full object-cover object-center height3024 loadinglazy src/_astro/miguel-working-3.CE7MPS4y_13NBrs.webp width4032 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 30vw, 720px srcset/_astro/miguel-working-3.CE7MPS4y_GBfNx.webp 320w, /_astro/miguel-working-3.CE7MPS4y_ZNtC5n.webp 420w, /_astro/miguel-working-3.CE7MPS4y_Z1lfnbW.webp 640w, /_astro/miguel-working-3.CE7MPS4y_1y7UzV.webp 900w>/figure>/div>/div>/div>/div>/div>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-1 p-8 order-5>astro-island await-children clientvisible component-exportdefault component-url/_astro/ConnectCard.HGnmduK7.js opts{"name":"ConnectCard","value":true} prefixr11 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZzXynD>div classflex flex-col h-full w-full styleopacity:0;transform:translateY(20px)>div classitems-center flex gap-3 mb-6 styleopacity:0;transform:translateX(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-trending-up fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 7h6v6>/path>path dm22 7-8.5 8.5-5-5L2 17>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Highlights/h2>/div>div classmb-6 gap-3 grid grid-cols-2 md:gap-4 styleopacity:0>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-indigo lucide-trending-up fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 7h6v6>/path>path dm22 7-8.5 8.5-5-5L2 17>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Years Experience/span>/div>p classfont-mono font-bold md:text-3xl text-2xl text-accent-indigo>15+/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-teal lucide-users fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2>/path>path dM16 3.128a4 4 0 0 1 0 7.744>/path>path dM22 21v-2a4 4 0 0 0-3-3.87>/path>circle cx9 cy7 r4>/circle>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Teams Led/span>/div>p classtext-accent-teal font-bold font-mono md:text-3xl text-2xl>10+/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-indigo lucide-rocket fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z>/path>path dm12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z>/path>path dM9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0>/path>path dM12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Startups Founded/span>/div>p classfont-mono font-bold md:text-3xl text-2xl text-accent-indigo>2/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-teal lucide-globe fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Countries Worked/span>/div>p classtext-accent-teal font-bold font-mono md:text-3xl text-2xl>6/p>/div>/div>div classspace-y-3 styleopacity:0>div classflex gap-3 border-white/5 bg-surface-light/40 border hover:border-accent-indigo/30 items-start p-4 rounded-xl transition-all styleopacity:0;transform:translateX(-10px)>div classflex-shrink-0 mt-0.5 text-accent-indigo>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-award fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm15.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 cx12 cy8 r6>/circle>/svg>/div>div classmin-w-0 flex-1>h3 classtext-sm md:text-base font-semibold text-starlight mb-1>CTO & Co-Founder/h3>p classtext-starlight-dim/80 leading-relaxed md:text-sm text-xs>Led technology for multiple startups from seed to scale/p>/div>/div>div classflex gap-3 border-white/5 bg-surface-light/40 border hover:border-accent-indigo/30 items-start p-4 rounded-xl transition-all styleopacity:0;transform:translateX(-10px)>div classflex-shrink-0 mt-0.5 text-accent-teal>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-code fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm16 18 6-6-6-6>/path>path dm8 6-6 6 6 6>/path>/svg>/div>div classmin-w-0 flex-1>h3 classtext-sm md:text-base font-semibold text-starlight mb-1>Platform Architect/h3>p classtext-starlight-dim/80 leading-relaxed md:text-sm text-xs>Scaled systems handling millions of users globally/p>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-3 order-6>astro-island await-children clientvisible component-exportdefault component-url/_astro/ExperienceCard.BqPl_HdT.js opts{"name":"ExperienceCard","value":true} prefixr12 props{"experiences":1,0,{"id":0,"of-them-all","company":0,"Of Them All","role":0,"Chief Technology Officer","location":0,"Remote","type":0,"Remote","startDate":0,"Aug 2025","endDate":0,"Present","duration":0,"Ongoing","description":0,"Currently leading the technology strategy for an early-stage startup. Responsible for architecting the platform, driving technical decision-making, and defining the roadmap. Actively involved in fundraising efforts and establishing rigorous reporting standards for internal stakeholders and investors.","skills":1,0,"Technology Strategy",0,"System Architecture",0,"Startup",0,"Fundraising",0,"Roadmap Planning",0,"Technical Leadership",0,"Stakeholder Management",0,"Platform Engineering","websiteUrl":0,"https://of-them-all.com","logoImage":0,{"src":0,"/_astro/of-them-all.Cgxdvp5y_ZkHGsW.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"mir-insight","company":0,"MIR Insight","role":0,"Engineering Team Lead","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Jan 2025","endDate":0,"Aug 2025","duration":0,"8 months","description":0,"Served as Engineering Team Lead for the Platform team, driving the modernization of the company's Machine Learning infrastructure. Successfully delivered full containerization for all ML pipelines to improve scalability. Concurrently restructured the development workflow by implementing Agile methodologies to enhance team efficiency and delivery speed.","skills":1,0,"Machine Learning",0,"Containerization",0,"Docker",0,"Kubernetes",0,"ML Pipelines",0,"Agile",0,"Team Leadership",0,"Platform Engineering","linkedinUrl":0,"https://www.linkedin.com/company/mir-insight","logoImage":0,{"src":0,"/_astro/mir-insight.CJVmAcwT_2fwnDK.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"new-work","company":0,"NEW WORK SE","role":0,"Software Engineering Team Lead","location":0,"Porto, Portugal","type":0,"Hybrid","startDate":0,"Jun 2019","endDate":0,"May 2023","duration":0,"3 yrs 11 months","description":0,"Led software development teams following Agile methodology. Implemented daily stand-ups, refinements, retrospectives, and reviews. Coordinated multiple teams, led through major transformation phases, coached and mentored team members, and handled mobile native (iOS, Android) recruiting. Instrumental in delivering high-quality products on time while supporting team members through professional growth.","skills":1,0,"Microservices",0,"Ruby on Rails",0,"AWS",0,"Agile",0,"Scrum",0,"Team Leadership",0,"Mobile Development","linkedinUrl":0,"https://www.linkedin.com/company/new-work-se","logoImage":0,{"src":0,"/_astro/new-work.UX53qe8e_ZqXDQT.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"imotorbike","company":0,"iMotorbike","role":0,"Co-Founder & CTO","location":0,"Kuala Lumpur, Malaysia","type":0,"On-site","startDate":0,"Jul 2017","endDate":0,"May 2019","duration":0,"1 yr 11 months","description":0,"Co-founded and launched leading online platform for motorcycles, parts, and accessories in Asia. Responsible for technical vision and execution, collaborating with CEO and UI/UX leader on product strategy. Scaled platform to handle millions of users. Secured ~$300K seed funding plus $100K from AWS Startups fund.","skills":1,0,"Laravel",0,"PHP",0,"Redis",0,"AWS",0,"E-commerce",0,"Team Leadership",0,"Startup","linkedinUrl":0,"https://www.linkedin.com/company/imotorbike/","logoImage":0,{"src":0,"/_astro/imotorbike._F9Kn7Nt_bJwoW.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"bamilo","company":0,"Bamilo","role":0,"Chief Technology Officer","location":0,"Tehran, Iran","type":0,"On-site","startDate":0,"Oct 2016","endDate":0,"Jun 2017","duration":0,"9 months","description":0,"Led technical direction for Iran's largest e-commerce/marketplace platform. Reported to CEO, worked with senior management to streamline processes and create state-of-the-art products. Oversaw QA, development (frontend, platform, logistics, mobile), system administration, and help desk teams. Achieved horizontal scalability and automated deployment. Set up 24/7 support teams for uninterrupted service. Identified cloud infrastructure cost-saving opportunities and replaced costly proprietary tools with efficient open-source alternatives. Enhanced financial transparency, contributing to departmental sustainability.","skills":1,0,"Yii",0,"Zend Framework",0,"E-commerce",0,"Agile",0,"Scrum",0,"Incident Management",0,"Team Leadership",0,"Cost Optimization",0,"Open Source",0,"Infrastructure Management","linkedinUrl":0,"https://www.linkedin.com/company/4829579","logoImage":0,{"src":0,"/_astro/bamilo.B8EYu71J_1zDoyJ.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-manager","company":0,"Lazada Group","role":0,"Software Engineering Manager","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Sep 2014","endDate":0,"Aug 2016","duration":0,"2 years","description":0,"Led multiple software development teams focused on online payments and checkout for the regional platform. Acted as a crucial bridge between development and product teams, ensuring clear requirements translation into technical specifications. Facilitated technical integration of payment platform with Alipay (Ant Financials) during the Alibaba Group acquisition, showcasing expertise in integration. Spearheaded PCI-DSS compliance process, ensuring regulatory adherence. Responsible for appraisals, hiring, and coaching. Orchestrated seamless coordination among various departments and teams, promoting effective collaboration.","skills":1,0,"Microservices",0,"Yii",0,"Payment Gateways",0,"E-commerce",0,"MySQL",0,"Team Leadership",0,"Incident Management",0,"PCI-DSS",0,"Integration","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-lead","company":0,"Lazada Group","role":0,"Software Engineering Team Lead","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"May 2014","endDate":0,"Sep 2014","duration":0,"5 months","description":0,"Led software development teams creating and enhancing online payments and checkout solutions for the regional platform. Acted as a pivotal bridge between development and product teams, ensuring precise translation of requirements into technical specifications. Orchestrated seamless coordination among various departments and teams, promoting effective collaboration. Oversaw end-to-end integrations, meticulously managing each phase to ensure flawless implementation. Instrumental in spearheading and ensuring the successful compliance process with PCI-DSS, showcasing proficiency in regulatory adherence. Demonstrated adept leadership by overseeing appraisals, talent acquisition, and coaching, fostering talent growth within the team.","skills":1,0,"OOP",0,"Yii",0,"Zend Framework",0,"E-commerce",0,"Payment Gateways",0,"Agile",0,"Scrum",0,"Kanban",0,"PCI-DSS","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-senior","company":0,"Lazada Group","role":0,"Senior Software Engineer","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Sep 2013","endDate":0,"May 2014","duration":0,"9 months","description":0,"Embarked on an initial 3-month journey to Vietnam, seizing the opportunity to help Lazada elevate its success and innovation in the realm of online commerce. Executed numerous intricate integrations in the domains of online payments, checkout, and discount systems, pivotal facets of online commerce. Demonstrated a high level of technical proficiency, creativity, and problem-solving acumen in tackling complex projects. Consistently delivered solutions that not only met but surpassed client and stakeholder expectations, ensuring the security, reliability, and user-friendliness of products and services. Assumed a leadership role in Vietnam, mentoring a talented and motivated team of professionals, eager to absorb insights and knowledge. Effectively transferred best practices and invaluable lessons learned from prior experiences in Portugal, empowering the new team in Vietnam to tackle challenges and seize opportunities with confidence.","skills":1,0,"PHP",0,"Yii",0,"Zend Framework",0,"Redis",0,"MySQL",0,"Memcached",0,"Payment Gateways",0,"E-commerce","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"rocket-internet","company":0,"Rocket Internet SE","role":0,"Software Engineer","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Apr 2012","endDate":0,"Aug 2013","duration":0,"1 year 5 months","description":0,"Worked on integration and maintenance of online checkout and payment systems. Played key role in core development of mobile API adopted by hundreds of startups worldwide.","skills":1,0,"OOP",0,"Zend Framework",0,"E-commerce",0,"APIs",0,"Payment Gateways",0,"MySQL",0,"Memcached",0,"Kanban","linkedinUrl":0,"https://www.linkedin.com/company/1298456/","logoImage":0,{"src":0,"/_astro/rocket-internet.CgMZle11_ZQ735M.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"saigon-soul","company":0,"Saigon Soul Pool Party","role":0,"Co-Founder, Musical Director","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Jan 2014","endDate":0,"Jul 2016","duration":0,"2 yrs 7 months","description":0,"Established a flagship weekly event in Saigon City, held at the prestigious New World Hotel in Saigon (Ho Chi Minh City) during the dry season. Ranked 2nd among Saigon's top places to visit, a testament to our commitment to excellence and innovation. Achieved remarkable growth, transforming our event into one of the city's iconic electronic music gatherings. Meticulously selected and managed artists, upholding our high standards of professionalism and musicality. Spearheaded our online marketing strategy, encompassing website management, social media, and email campaigns. Designed and developed essential web applications, including an online ticketing system and live streaming service.","skills":1,0,"Entrepreneurship",0,"Event Management",0,"Marketing",0,"Web Development",0,"Social Media",0,"Project Management","logoImage":0,{"src":0,"/_astro/saigon-soul.DjehXvIA_1uSSOG.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"pcw","company":0,"PCW","role":0,"Web Programmer","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Jan 2007","endDate":0,"Apr 2009","duration":0,"2 yrs 4 months","description":0,"As a young and ambitious web developer, designed bespoke and dynamic websites that catalyzed digital success for numerous small and medium-sized enterprises. Employed cutting-edge web development technologies and methodologies to craft intuitive, scalable, and user-friendly websites, enhancing the online experiences of diverse user bases. Committed to excellence, garnered a reputation for consistently delivering websites of superior quality, seamlessly blending visual appeal with technical proficiency. Empowered clients to maintain a competitive edge in the swiftly evolving digital landscape through the creation of visually stunning and technically robust websites.","skills":1,0,"Web Development",0,"PHP",0,"HTML",0,"CSS",0,"JavaScript",0,"Client Relations"}} renderer-url/_astro/client.9unXo8s5.js ssr uid1EX8Ox>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-briefcase fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16>/path>rect height14 width20 x2 y6 rx2>/rect>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Experience/h2>span classborder border-white/5 px-2.5 py-1 rounded-lg bg-surface-light/50 font-mono md:text-sm ml-auto text-starlight-dim/60 text-xs>11 roles/span>/div>div classrelative flex-1 md:pl-14 overflow-y-auto pl-12>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Chief Technology Officer/h3>/div>div classitems-center flex gap-3>img altOf Them All company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/of-them-all.Cgxdvp5y_ZkHGsW.webp width96 decodingasync />div classitems-center flex gap-2>a classitems-center inline-flex font-semibold md:text-base text-sm gap-1.5 hover:text-accent-indigo text-accent-teal transition-colors hrefhttps://of-them-all.com relnoopener noreferrer target_blank tabindex0>Of Them Allsvg classlucide h-3.5 w-3.5 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Remote/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Aug 2025 - Present/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>Remote/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/mir-insight relnoopener noreferrer target_blank tabindex0 aria-labelOpen MIR Insight on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altMIR Insight company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/mir-insight.CJVmAcwT_2fwnDK.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>MIR Insight/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2025 - Aug 2025/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/new-work-se relnoopener noreferrer target_blank tabindex0 aria-labelOpen NEW WORK SE on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altNEW WORK SE company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/new-work.UX53qe8e_ZqXDQT.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>NEW WORK SE/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jun 2019 - May 2023/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>Hybrid/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Co-Founder & CTO/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/imotorbike/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen iMotorbike on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altiMotorbike company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/imotorbike._F9Kn7Nt_bJwoW.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>iMotorbike/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Kuala Lumpur, Malaysia/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jul 2017 - May 2019/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Chief Technology Officer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/4829579 relnoopener noreferrer target_blank tabindex0 aria-labelOpen Bamilo on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altBamilo company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/bamilo.B8EYu71J_1zDoyJ.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Bamilo/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Tehran, Iran/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Oct 2016 - Jun 2017/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Manager/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Sep 2014 - Aug 2016/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>May 2014 - Sep 2014/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Senior Software Engineer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Sep 2013 - May 2014/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/1298456/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Rocket Internet SE on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altRocket Internet SE company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/rocket-internet.CgMZle11_ZQ735M.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Rocket Internet SE/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Apr 2012 - Aug 2013/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Co-Founder, Musical Director/h3>/div>div classitems-center flex gap-3>img altSaigon Soul Pool Party company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/saigon-soul.DjehXvIA_1uSSOG.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Saigon Soul Pool Party/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2014 - Jul 2016/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Web Programmer/h3>/div>div classitems-center flex gap-3>div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>PCW/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2007 - Apr 2009/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>/div>div classabsolute pointer-events-none to-transparent bg-gradient-to-b bottom-0 from-accent-indigo/40 left-6 md:left-8 top-20 via-accent-teal/25 w-0.5 z-0 styletransform:scaleY(0)>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-3 md:col-span-1 order-7>astro-island await-children clientvisible component-exportdefault component-url/_astro/TechStackCard.DeNKaFcD.js opts{"name":"TechStackCard","value":true} prefixr13 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1SF6Dm>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-code-xml fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm18 16 4-4-4-4>/path>path dm6 8-4 4 4 4>/path>path dm14.5 4-5 16>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Tech Stack/h2>/div>div classflex-1 overflow-y-auto md:py-8 md:space-y-8 py-6 space-y-6>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Backend/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#777BB4 styleopacity:0;transform:scale(.8)>PHP/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF2D20 styleopacity:0;transform:scale(.8)>Laravel/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00AFF0 styleopacity:0;transform:scale(.8)>Yii/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#68B604 styleopacity:0;transform:scale(.8)>Zend Framework/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#CC0000 styleopacity:0;transform:scale(.8)>Ruby on Rails/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#339933 styleopacity:0;transform:scale(.8)>Node.js/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#777BB4 styleopacity:0;transform:scale(.8)>PHP/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF2D20 styleopacity:0;transform:scale(.8)>Laravel/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00AFF0 styleopacity:0;transform:scale(.8)>Yii/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#68B604 styleopacity:0;transform:scale(.8)>Zend Framework/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#CC0000 styleopacity:0;transform:scale(.8)>Ruby on Rails/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#339933 styleopacity:0;transform:scale(.8)>Node.js/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Frontend/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#61DAFB styleopacity:0;transform:scale(.8)>React/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#3178C6 styleopacity:0;transform:scale(.8)>TypeScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F7DF1E styleopacity:0;transform:scale(.8)>JavaScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#E34F26 styleopacity:0;transform:scale(.8)>HTML/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#1572B6 styleopacity:0;transform:scale(.8)>CSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#61DAFB styleopacity:0;transform:scale(.8)>React/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#3178C6 styleopacity:0;transform:scale(.8)>TypeScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F7DF1E styleopacity:0;transform:scale(.8)>JavaScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#E34F26 styleopacity:0;transform:scale(.8)>HTML/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#1572B6 styleopacity:0;transform:scale(.8)>CSS/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Infrastructure/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF9900 styleopacity:0;transform:scale(.8)>AWS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#2496ED styleopacity:0;transform:scale(.8)>Docker/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#326CE5 styleopacity:0;transform:scale(.8)>Kubernetes/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FCC624 styleopacity:0;transform:scale(.8)>Linux/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00D8FF styleopacity:0;transform:scale(.8)>CI/CD/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00A8FF styleopacity:0;transform:scale(.8)>Microservices/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF9900 styleopacity:0;transform:scale(.8)>AWS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#2496ED styleopacity:0;transform:scale(.8)>Docker/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#326CE5 styleopacity:0;transform:scale(.8)>Kubernetes/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FCC624 styleopacity:0;transform:scale(.8)>Linux/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00D8FF styleopacity:0;transform:scale(.8)>CI/CD/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00A8FF styleopacity:0;transform:scale(.8)>Microservices/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Databases/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#4479A1 styleopacity:0;transform:scale(.8)>MySQL/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#DC382D styleopacity:0;transform:scale(.8)>Redis/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#C6363C styleopacity:0;transform:scale(.8)>Memcached/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#4479A1 styleopacity:0;transform:scale(.8)>MySQL/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#DC382D styleopacity:0;transform:scale(.8)>Redis/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#C6363C styleopacity:0;transform:scale(.8)>Memcached/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Tools & Compliance/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F05032 styleopacity:0;transform:scale(.8)>Git/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#6366F1 styleopacity:0;transform:scale(.8)>Payment Gateways/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#10B981 styleopacity:0;transform:scale(.8)>PCI-DSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#8B5CF6 styleopacity:0;transform:scale(.8)>GDPR/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F05032 styleopacity:0;transform:scale(.8)>Git/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#6366F1 styleopacity:0;transform:scale(.8)>Payment Gateways/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#10B981 styleopacity:0;transform:scale(.8)>PCI-DSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#8B5CF6 styleopacity:0;transform:scale(.8)>GDPR/span>/div>/div>/div>div classborder-white/5 border-t md:px-6 pt-4 px-5 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs mb-3>Leadership & Practices/h3>div classflex gap-2 flex-wrap md:gap-3>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>System Design/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Architecture/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>E-commerce/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Agile Leadership/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Team Mentoring/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Scrum/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Kanban/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Project Management/span>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-3 md:col-span-1 order-8>astro-island await-children clientvisible component-exportdefault component-url/_astro/RecommendationsCard.CBk3EDUB.js opts{"name":"RecommendationsCard","value":true} prefixr14 props{"recommendations":1,0,{"id":0,"miguel-garcia","name":0,"Miguel Garcia","role":0,"General Manager & VP of Technology","company":0,"New Work SE","relationship":0,"Managed Miguel directly","quote":0,"Having worked 10 years ago and again hiring Miguel to work closely with me for the past 4 years tells a lot about how much trust and respect I have for him. Miguel Enes has a very entrepreneurial mindset that always sets him to find solutions and to move organisations forward. He does that relying on his profound and complete tech knowledge and on-hands experience, leading by example/execution and supporting his team along the way. I highly recommend him as an autonomous, energiser, tech-savvy and delivery oriented Engineering Manager.","linkedinUrl":0,"https://www.linkedin.com/in/miguelfgarcia/","avatar":0,{"src":0,"/_astro/miguel-garcia.YSHvp8_y_Znxn0l.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"ricardo-martins","name":0,"Ricardo Martins","role":0,"Frontend Developer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"I've worked with Miguel for the last one and a half years. He has demonstrated great leadership skills and technical expertise, consistently minimising all the blockers we found on our way. He has a deep understanding of a wide range of technologies and is an excellent problem-solver. Miguel is someone you can trust, a great mentor and team player, always willing to help and create a collaborative environment where we feel comfortable giving feedback and contributions. I am confident that Miguel would be valuable to any organisation.","linkedinUrl":0,"https://www.linkedin.com/in/ricardofmm/","avatar":0,{"src":0,"/_astro/ricardo-martins.6K59Owhl_ZAzxfq.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"nils-hofmeister","name":0,"Nils Hofmeister","role":0,"VP of Technology","company":0,"New Work SE","relationship":0,"Managed Miguel directly","quote":0,"For the last almost 4 years, I had the pleasure to work with Miguel. The first half of this time he reported directly to me. Miguel is a passionate, people-oriented and hands-on engineering manager with an entrepreneurial mindset. I could always rely on him solving every problem I threw at him. He proactively and successfully developed his team and successfully delivered while continuously bringing smart tech and business ideas to the table. If you seek a smart, loyal and resourceful engineering manager, I strongly recommend to have a look at him.","linkedinUrl":0,"https://www.linkedin.com/in/nilshofmeister/","avatar":0,{"src":0,"/_astro/nils-hofmeister.DajXpkbF_1iNIS6.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"sergio-oliveira","name":0,"Sérgio Oliveira","role":0,"Senior Backend Engineer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"Miguel is a person and a professional I wish I had by my side along all my way as an IT engineer. I truly believe that his people and technical skills are assets that any company could take advantage of, and any other professional by his side can grow and thrive as I did. Multi-skilled, competent, very professional and, on top of all of that, an awesome human being are some definitions that fits Miguel very well. I would blindly team-up with him again for another ride.","linkedinUrl":0,"https://www.linkedin.com/in/sergiowoj/","avatar":0,{"src":0,"/_astro/sergio-oliveira.BNXlyAyt_Z2vHdyC.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"pedro-vale","name":0,"Pedro Vale","role":0,"Engineering Team Lead","company":0,"New Work SE","relationship":0,"Worked alongside Miguel","quote":0,"Miguel is a tech savvy Team Lead, capable of not only discuss tech but also to be the people manager his team needs: he can build trust, mentor and develop people. He is willing to support and find compromising solutions and is great managing stakeholders. I would be happy to work with Miguel again.","linkedinUrl":0,"https://www.linkedin.com/in/pvale/","avatar":0,{"src":0,"/_astro/pedro-vale.DeZXXEA8_23pbXh.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"antonio-ramos","name":0,"António Ramos","role":0,"iOS Engineer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"Miguel was my team leader during the last 14 months, during that time he demonstrated exceptional leadership qualities and had a unique ability to inspire and motivate the team to deliver exceptional results. He played a vital role in directing and guiding the team in the development of various computer engineering projects. Miguel has excellent problem-solving skills coupled with his technical expertise that allowed him to take on complex projects and deliver high-quality results. Overall, I strongly recommend Miguel as a leader for any computer engineering position.","linkedinUrl":0,"https://www.linkedin.com/in/apramos/","avatar":0,{"src":0,"/_astro/antonio-ramos.3WFyorBI_ZmJ8DN.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"shahrooz-jahanshah","name":0,"Shahrooz Jahanshah","role":0,"Android Engineer","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel was an effective and supportive CTO. I enjoyed working for nine-month at Bamilo. Thanks to his supervision, I learned practically everything I know now about software architecture and microservice development. He had a powerful combination of expert knowledge and innate leadership abilities. His outgoing yet firm approach to handling conflicts in the team is worthy to be praised. I recommend Miguel as a CTO who can not only increase the technical growth of team members but also, promote the personal and professional growth of them.","linkedinUrl":0,"https://www.linkedin.com/in/shjahanshah/","avatar":0,{"src":0,"/_astro/shahrooz-jahanshah.D6avmyBR_1Hwaqd.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"farzan-dalaee","name":0,"Farzan Dalaee","role":0,"Senior Backend Engineer","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel is one of my colleagues that I miss working with him, he takes actions in perfect moments based on his experience. Great personality, I never feel he is my CTO, always cares like a friend. Wish you all the best!","linkedinUrl":0,"https://www.linkedin.com/in/farzan-dalaee/","avatar":0,{"src":0,"/_astro/farzan-dalaee.BaxbNZRG_ZeQFQV.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"sepehr-lorestani","name":0,"Sepehr Lorestani","role":0,"Senior System Administrator","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel Enes is one of the most effective among all people I have ever worked with. He's a very strong work ethic and unparalleled analytic and problem solving abilities. Miguel Enes provided outstanding results for Bamilo. He showed a high level of Leadership, motivation, scheduling, knowledge, precision, technical, management technical skills and was a valuable contributor to our projects. I could always depend on him to set the best example as CTO at Bamilo. I definitely would recommend him as CTO.","linkedinUrl":0,"https://www.linkedin.com/in/sepehr-lorestani/","avatar":0,{"src":0,"/_astro/sepehr-lorestani.DxgdJRwp_Z1E9V2H.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"wesley-stuurman","name":0,"Wesley Stuurman","role":0,"Senior Product Manager","company":0,"Lazada Group","relationship":0,"Worked alongside Miguel","quote":0,"Miguel is one of the most engaged, caring engineers I ever had the pleasure of working with. He had the most in-depth knowledge about Lazada's payment infrastructure of anyone at the company and the ability to quickly evaluate ideas and push them forward. The payments team at Lazada is highly respected and extremely productive thanks to all the work Miguel has done over the years.","linkedinUrl":0,"https://www.linkedin.com/in/wstuurman/","avatar":0,{"src":0,"/_astro/wesley-stuurman.DjvzxZYg_Z1HD7g2.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"long-hoang","name":0,"Long Hoang","role":0,"Backend Engineer","company":0,"Lazada Group","relationship":0,"Miguel managed him directly","quote":0,"I knew Miguel almost 4 years since he has moved from Portugal to dev team in Vietnam, and saw him progress from a developer to team leader, then technical group manager. Whatever the position, he was just so awesome. With Miguel in the team, impossible is nothing, he always can find solution for the toughest issues. He is also an industrious leader with amazing technical skill. I always feel comfortable when working with him. He always covers your back, and stays in front of troubles. That is so admirable.","linkedinUrl":0,"https://www.linkedin.com/in/longhoang87/","avatar":0,{"src":0,"/_astro/long-hoang.Cp1XPQIm_aeX4L.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"hieu-vo","name":0,"Hieu Vo","role":0,"Senior Backend Engineer","company":0,"Lazada Group","relationship":0,"Miguel managed him directly","quote":0,"I had chance to work in payment team together with Miguel for more than 1 year. Firstly he has great mindset of analytic and critical thinking, quickly catch issues and propose solutions immediately. With the insane negotiation skills for dealing with business guys, he can turn the worst situation into favorable one in a blink of an eye. He always covers teammates from pressure of higher managers or business; and make sure every people in the team feel comfortable as working. Moreover, thanks to his good sense of humour and friendliness, the team is always full of laughs and positive atmosphere.","linkedinUrl":0,"https://www.linkedin.com/in/hieuvpm/","avatar":0,{"src":0,"/_astro/hieu-vo.DK_uenAC_Z2oAK7p.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1fSL7H>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-quote fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>path dM5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Testimonials/h2>span classborder border-white/5 px-2.5 py-1 rounded-lg bg-surface-light/50 font-mono md:text-sm ml-auto text-starlight-dim/60 text-xs>1/12/span>/div>div classflex flex-col relative flex-1 md:p-8 overflow-hidden p-6>div classflex flex-col space-y-6 md:space-y-8 styleopacity:0;transform:translateX(30px) scale(.95)>div classborder-white/5 border-b pb-4 space-y-2 styleopacity:0;transform:translateY(10px)>div classitems-center flex gap-4>div classflex-shrink-0 styleopacity:0;transform:scale(.8)>img altMiguel Garcia, General Manager & VP of Technology at New Work SE classrounded-full border-2 border-accent-teal/30 h-12 md:h-14 md:w-14 object-cover shadow-lg w-12 height112 loadinglazy src/_astro/miguel-garcia.YSHvp8_y_Znxn0l.webp width112 decodingasync />/div>div classmin-w-0 flex-1>a classitems-center gap-2 font-semibold inline-flex group hover:text-accent-teal md:text-lg text-base text-starlight transition-colors hrefhttps://www.linkedin.com/in/miguelfgarcia/ relnoopener noreferrer target_blank>Miguel Garciadiv tabindex0>svg classlucide h-4 w-4 lucide-external-link group-hover:text-accent-teal md:h-5 md:w-5 text-starlight-dim transition-colors fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/div>/a>p classmt-1 md:text-base text-sm text-starlight-dim/90>General Manager & VP of Technology/p>p classtext-sm md:text-base text-accent-indigo/90 font-medium>New Work SE/p>/div>/div>/div>div classitems-center flex border-white/5 border-b justify-between pb-4 styleopacity:0>button classborder transition-all rounded-xl border-transparent hover:bg-white/10 hover:border-white/10 hover:text-starlight p-2 text-starlight-dim tabindex0>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-chevron-left fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm15 18-6-6 6-6>/path>/svg>/button>div classitems-center flex gap-2>button classrounded-full transition-all h-2 bg-accent-teal shadow-accent-teal/50 shadow-lg w-6 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>span classfont-mono text-xs md:text-sm ml-1 text-starlight-dim/50>+6/span>/div>button classborder transition-all rounded-xl border-transparent hover:bg-white/10 hover:border-white/10 hover:text-starlight p-2 text-starlight-dim tabindex0>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-chevron-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm9 18 6-6-6-6>/path>/svg>/button>/div>div classflex flex-col bg-surface-light/30 border border-white/5 md:p-6 p-5 rounded-2xl space-y-4>svg classlucide flex-shrink-0 h-6 lucide-quote mb-2 md:h-8 md:w-8 text-accent-indigo/40 w-6 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>path dM5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>/svg>p classmd:text-lg text-base font-light leading-relaxed text-starlight/90 italic lg:text-xl>"Having worked 10 years ago and again hiring Miguel to work closely with me for the past 4 years tells a lot about how much trust and respect I have for him. Miguel Enes has a very entrepreneurial mindset that always sets him to find solutions and to move organisations forward. He does that relying on his profound and complete tech knowledge and on-hands experience, leading by example/execution and supporting his team along the way. I highly recommend him as an autonomous, energiser, tech-savvy and delivery oriented Engineering Manager."/p>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>/div>/main>footer aria-labelSite footer classw-full min-w-0 max-w-none 2xl:px-12 3xl:px-16 lg:px-8 md:px-6 px-4 xl:px-10 md:mt-16 md:pb-12 mt-12 pb-8 rolecontentinfo>div classtext-starlight-dim/70 font-light md:text-base text-center text-sm>p>© 2026 Miguel Enes. Built with Astro./p>/div>/footer>astro-island await-children clientload component-exportdefault component-url/_astro/LanguageSwitcher.D-EYVqdW.js opts{"name":"LanguageSwitcher","value":true} prefixr15 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZsfglu>div classright-6 bottom-6 fixed z-50>button classitems-center flex justify-center rounded-full border border-white/10 glass-panel group h-14 hover:text-accent-indigo shadow-xl text-starlight transition-colors w-14 tabindex0 aria-labelSwitch language>div>svg classlucide lucide-globe h-6 w-6 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>/div>div classitems-center flex justify-center rounded-full -right-1 -top-1 absolute bg-accent-indigo border-2 border-surface h-5 w-5>span classtext-xs font-bold>🇬🇧/span>/div>/button>/div>!--astro:end-->/astro-island>script srchttps://plausible.io/js/script.js data-domainmiguelenes.com deferdefer>/script>script>/script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Fri, 23 Jan 2026 23:56:15 GMTContent-Type: text/htmlContent-Length: 248181Connection: keep-aliveCF-Cache-Status: HITCache-Control: public, max-age0, must-revalidateETag: c87aa6ef12d098a5a925f82be15ed74cVary: accept-encodingReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?suCb8i2cGIPF0B9QUHflBpsBeEj5vtcpSkdzUuBvCEYEhyriAgqtq8U9yB85ljo6FtS8bevFV2pYHui2O6K0tHqDDAyHhdUwV1%2F4DRmu0}}Nel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflareCF-RAY: 9c2b3a06bfdb61c8-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen xml:langen>head>meta charsetUTF-8>meta contentwidthdevice-width,initial-scale1,viewport-fitcover nameviewport>meta contentMiguel Enes nameauthor>meta content© 2026 Miguel Enes namecopyright>meta contenten namelanguage>meta contentglobal namedistribution>meta content7 days namerevisit-after>meta contenttelephoneno nameformat-detection>meta contentengineering, leadership, technology, CTO, software development, e-commerce, team leadership namekeywords>meta contentindex, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1 namerobots>meta contentindex, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1 namegooglebot>title>Miguel Enes - Chief Technology Officer @ Of Them All/title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. namedescription>link hrefhttps://miguelenes.com/ relcanonical>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. propertyog:description>meta contenthttps://miguelenes.com/ propertyog:url>meta contentwebsite propertyog:type>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg propertyog:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:image:alt>meta contentMiguel Enes propertyog:site_name>meta contentsummary_large_image nametwitter:card>meta contenten_US propertyog:locale>meta contentMiguel Enes propertyog:site_name>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. propertyog:description>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg propertyog:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All propertyog:image:alt>meta contentsummary_large_image nametwitter:card>meta contentMiguel Enes - Chief Technology Officer @ Of Them All nametwitter:title>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. nametwitter:description>meta contenthttps://miguelenes.com/_astro/profile.kN_5ljY8.jpg nametwitter:image>meta contentMiguel Enes - Chief Technology Officer @ Of Them All nametwitter:image:alt>meta contentAn experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry. CTO, Engineering Team Leader, and technology strategist specializing in scalable systems and high-performance teams. nameai:description>meta contentengineering, leadership, technology, CTO, software development, e-commerce, team leadership nameai:keywords>meta contentMiguel Enes me@miguelenes.com> nameauthor>link href/favicon.svg relicon typeimage/svg+xml>link href/favicon.svg relicon>link href/favicon.svg relshortcut icon>link href/favicon.svg relapple-touch-icon>meta content#0f172a namemsapplication-TileColor>meta content#6366f1 nametheme-color>meta contentyes namemobile-web-app-capable>meta contentyes nameapple-mobile-web-app-capable>meta contentblack-translucent nameapple-mobile-web-app-status-bar-style>link hrefhttps://fonts.googleapis.com relpreconnect crossoriginanonymous>link hrefhttps://www.linkedin.com reldns-prefetch>link hrefhttps://github.com reldns-prefetch>link hrefhttps://fonts.googleapis.com reldns-prefetch>script typeapplication/ld+json>{@context:https://schema.org,@type:Person,name:Miguel Enes,url:https://miguelenes.com,image:https://miguelenes.com/_astro/profile.kN_5ljY8.jpg,jobTitle:Chief Technology Officer,worksFor:{@type:Organization,name:Of Them All,url:https://of-them-all.com},description:An experienced programmer, leader, and e-commerce technology strategist with over 17 years in the software industry.,sameAs:https://www.linkedin.com/in/miguel-enes/,https://github.com/miguelenes,https://miguelenes.com,knowsAbout:Technology Strategy,System Architecture,Startup,Fundraising,Roadmap Planning,Technical Leadership,Stakeholder Management,Platform Engineering,Machine Learning,Containerization,Docker,Kubernetes,ML Pipelines,Agile,Team Leadership,Microservices,Ruby on Rails,AWS,Scrum,Mobile Development,Laravel,PHP,Redis,E-commerce,Yii,Zend Framework,Incident Management,Cost Optimization,Open Source,Infrastructure Management,Payment Gateways,MySQL,PCI-DSS,Integration,OOP,Kanban,Memcached,APIs,Entrepreneurship,Event Management,Marketing,Web Development,Social Media,Project Management,HTML,CSS,JavaScript,Client Relations,alumniOf:{@type:Organization,name:Lazada Group},{@type:Organization,name:Rocket Internet SE},email:me@miguelenes.com}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,name:Miguel Enes,url:https://miguelenes.com,description:Personal website and blog of Miguel Enes - CTO and Engineering Team Leader,publisher:{@type:Person,name:Miguel Enes},potentialAction:{@type:SearchAction,target:{@type:EntryPoint,urlTemplate:https://miguelenes.com/blog?search{search_term_string}},query-input:required namesearch_term_string}}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:ProfilePage,mainEntity:{@type:Person,name:Miguel Enes,url:https://miguelenes.com},url:https://miguelenes.com}/script>script typeapplication/ld+json>{@context:https://schema.org,@type:BreadcrumbList,itemListElement:{@type:ListItem,position:1,name:Home,item:https://miguelenes.com}}/script>script srchttps://www.googletagmanager.com/gtag/js?idG-MCQD95NMLE async>/script>script>/script>meta contenttrue nameastro-view-transitions-enabled>meta contentanimate nameastro-view-transitions-fallback>script typemodule src/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CDGfc0hd.js>/script>link href/_astro/_page_.DbBD-HP7.css relstylesheet>/head>body classw-full m-0 min-h-screen overflow-x-hidden p-0>a classfocus:absolute focus:bg-accent-indigo focus:left-4 focus:not-sr-only focus:px-4 focus:py-2 focus:rounded-md focus:text-white focus:top-4 focus:z-50 sr-only href#main-content>Skip to main content/a>main aria-labelMain content classw-full min-w-0 max-w-none 2xl:px-12 3xl:px-16 lg:px-8 md:px-6 px-4 xl:px-10 lg:py-16 md:py-12 py-8 idmain-content rolemain>div classw-full min-w-0 max-w-none auto-rows-minmax(220px,auto) gap-6 grid grid-cols-1 lg:gap-10 md:gap-8 md:grid-cols-4 xl:gap-12>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-2 order-1>style>astro-island,astro-slot,astro-static-slot{display:contents}/style>script>(self.Astro||(self.Astro{})).loadasync a>{await(await a())()},window.dispatchEvent(new Event(astro:load))/script>script>(()>{var tObject.defineProperty,e(e,r,n)>((e,r,n)>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):ern)(e,symbol!typeof r?r+:r,n);{let t{0:t>s(t),1:t>n(t),2:t>new RegExp(t),3:t>new Date(t),4:t>new Map(n(t)),5:t>new Set(n(t)),6:t>BigInt(t),7:t>new URL(t),8:t>new Uint8Array(t),9:t>new Uint16Array(t),10:t>new Uint32Array(t),11:t>1/0*t},re>{letr,ne;return r in t?tr(n):void 0},nt>t.map(r),st>object!typeof t||nullt?t:Object.fromEntries(Object.entries(t).map((t,e)>t,r(e)));class i extends HTMLElement{constructor(){super(...arguments),e(this,Component),e(this,hydrator),e(this,hydrate,async()>{var t;if(!this.hydrator||!this.isConnected)return;let enull(tthis.parentElement)?void 0:t.closest(astro-islandssr);if(e)return void e.addEventListener(astro:hydrate,this.hydrate,{once:!0});let r,nthis.querySelectorAll(astro-slot),i{},othis.querySelectorAll(templatedata-astro-template);for(let t of o){let et.closest(this.tagName);null!e&&e.isSameNode(this)&&(it.getAttribute(data-astro-template)||defaultt.innerHTML,t.remove())}for(let t of n){let et.closest(this.tagName);null!e&&e.isSameNode(this)&&(it.getAttribute(name)||defaultt.innerHTML)}try{rthis.hasAttribute(props)?s(JSON.parse(this.getAttribute(props))):{}}catch(t){let ethis.getAttribute(component-url)||unknown>,rthis.getAttribute(component-export);throw r&&(e+` (export ${r})`),console.error(`hydrate Error parsing props for component ${e}`,this.getAttribute(props),t),t}await this.hydrator(this)(this.Component,r,i,{client:this.getAttribute(client)}),this.removeAttribute(ssr),this.dispatchEvent(new CustomEvent(astro:hydrate))}),e(this,unmount,()>{this.isConnected||this.dispatchEvent(new CustomEvent(astro:unmount))})}disconnectedCallback(){document.removeEventListener(astro:after-swap,this.unmount),document.addEventListener(astro:after-swap,this.unmount,{once:!0})}connectedCallback(){if(this.hasAttribute(await-children)&&interactive!document.readyState&&complete!document.readyState){let t()>{document.removeEventListener(DOMContentLoaded,t),e.disconnect(),this.childrenConnectedCallback()},enew MutationObserver(()>{var e;(null(ethis.lastChild)?void 0:e.nodeType)Node.COMMENT_NODE&&astro:endthis.lastChild.nodeValue&&(this.lastChild.remove(),t())});e.observe(this,{childList:!0}),document.addEventListener(DOMContentLoaded,t)}else this.childrenConnectedCallback()}async childrenConnectedCallback(){let tthis.getAttribute(before-hydration-url);t&&await import(t),this.start()}async start(){let tJSON.parse(this.getAttribute(opts)),ethis.getAttribute(client);if(void 0!Astroe)try{await Astroe(async()>{let tthis.getAttribute(renderer-url),e,{default:r}await Promise.all(import(this.getAttribute(component-url)),t?import(t):()>()>{}),nthis.getAttribute(component-export)||default;if(n.includes(.)){this.Componente;for(let t of n.split(.))this.Componentthis.Componentt}else this.Componenten;return this.hydratorr,this.hydrate},t,this)}catch(t){console.error(`astro-island Error hydrating ${this.getAttribute(component-url)}`,t)}else window.addEventListener(`astro:${e}`,()>this.start(),{once:!0})}attributeChangedCallback(){this.hydrate()}}e(i,observedAttributes,props),customElements.get(astro-island)||customElements.define(astro-island,i)}})()/script>astro-island await-children clientload component-exportdefault component-url/_astro/HeroCard.Bu6y4LXi.js opts{"name":"HeroCard","value":true} prefixr8 props{"profileImage":0,{"src":0,"/_astro/profile.kN_5ljY8_Z1q8Oue.webp","width":0,320,"height":0,348,"srcSet":0,"sizes":0}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ2gWVsu>link href/_astro/profile.kN_5ljY8_Z1q8Oue.webp relpreload asimage fetchPriorityhigh />div classflex justify-between flex-col h-full lg:p-12 md:p-10 overflow-hidden p-8 relative w-full>div classabsolute pointer-events-none right-6 select-none top-6 styleopacity:0;transform:scale(.95)>pre classcode-decoration md:text-xs text-10px text-right>const engineer { role: "Team Leader", focus: "Architecture", "E-commerce", "Leadership" , status: "Open to Connect"};/pre>/div>div classrounded-full absolute blur-3xl pointer-events-none -bottom-32 -left-32 bg-gradient-to-br from-accent-indigo/25 h-80 to-accent-teal/12 w-80 styleopacity:0;transform:scale(.8)>/div>div classrounded-full absolute blur-3xl pointer-events-none -right-24 bg-gradient-to-bl from-accent-teal/15 h-64 to-accent-indigo/10 top-1/2 w-64 styleopacity:0;transform:scale(.8)>/div>div classflex flex-col relative flex-1 justify-center space-y-6 z-10>div classflex items-start gap-6 md:gap-8>div classflex-1 styleopacity:0;transform:translateY(30px)>h1 classfont-mono font-bold leading-tight lg:text-7xl mb-4 md:text-6xl text-5xl tracking-tight styleopacity:0;transform:translateY(20px)>span classtext-starlight styleopacity:0;transform:translateX(-20px)>Miguel/span> span classgradient-text styleopacity:0;transform:translateX(20px)>Enes/span>/h1>p classleading-relaxed font-light lg:text-2xl md:text-xl text-lg text-starlight-dim styleopacity:0;transform:translateY(15px)>Chief Technology Officer span classtext-starlight-dim/50>@/span> a classitems-center inline-flex transition-colors gap-1.5 hover:text-accent-indigo text-accent-teal font-medium hrefhttps://of-them-all.com relnoopener noreferrer target_blank>Of Them Allsvg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/p>/div>div classflex-shrink-0 styleopacity:0;transform:scale(.8) rotate(-5deg)>div classrelative overflow-hidden border-4 border-accent-teal/20 h-24 lg:h-40 lg:w-40 md:h-32 md:w-32 rounded-full shadow-accent-teal/10 shadow-xl w-24>img altMiguel Enes - Chief Technology Officer classw-full h-full object-cover height348 loadingeager src/_astro/profile.kN_5ljY8_Z1q8Oue.webp width320 fetchPriorityhigh />div classabsolute pointer-events-none bg-gradient-to-br from-accent-indigo/10 inset-0 to-accent-teal/10>/div>/div>/div>/div>div classitems-center flex gap-3 pt-2 styleopacity:0;transform:translateX(-10px)>span classflex h-3 relative w-3>span classw-full h-full absolute animate-ping bg-accent-teal inline-flex opacity-60 rounded-full>/span>span classrelative h-3 w-3 bg-accent-teal inline-flex rounded-full shadow-accent-teal/50 shadow-lg>/span>/span>span classtracking-wide font-medium md:text-base text-sm text-starlight-dim>Open to Connect/span>/div>/div>div classrelative z-10 space-y-4 styleopacity:0;transform:translateY(10px)>div classitems-center flex gap-2.5 font-medium md:text-base text-sm text-starlight-dim/80>svg classw-4 h-4 md:w-5 md:h-5 fillnone strokecurrentColor viewBox0 0 24 24>path dM17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z stroke-linecapround stroke-linejoinround stroke-width2>/path>path dM15 11a3 3 0 11-6 0 3 3 0 016 0z stroke-linecapround stroke-linejoinround stroke-width2>/path>/svg>span>Porto, Portugal/span>/div>div classitems-center flex gap-2.5 flex-wrap md:gap-3>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-#25D366 hrefhttps://wa.me/351960259992 relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-message-circle fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719>/path>/svg>span>WhatsApp/span>/a>button classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-accent-teal/30 hover:text-accent-teal tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-mail fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7>/path>rect height16 width20 x2 y4 rx2>/rect>/svg>span classhidden sm:inline>me@miguelenes.com/span>span classsm:hidden>Email/span>div>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-copy opacity-50 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>rect height14 width14 x8 y8 rx2 ry2>/rect>path dM4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2>/path>/svg>/div>/button>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-#0A66C2 hrefhttps://www.linkedin.com/in/miguel-enes/ relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-linkedin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 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 height12 width4 x2 y9>/rect>circle cx4 cy4 r2>/circle>/svg>span>LinkedIn/span>/a>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-white/20 hover:text-white hrefhttps://github.com/miguelenes relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-github fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4>/path>path dM9 18c-4.51 2-5-2-7-2>/path>/svg>span>GitHub/span>/a>a classitems-center flex gap-2 text-xs bg-surface-light/60 border border-white/10 font-medium md:text-sm px-3 py-2 rounded-lg text-starlight-dim transition-all hover:border-accent-indigo/30 hover:text-accent-indigo hrefhttps://miguelenes.com relnoopener noreferrer target_blank tabindex0 styleopacity:0;transform:scale(.9)>svg classlucide h-3.5 w-3.5 md:h-4 md:w-4 lucide-globe fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>span>Website/span>/a>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-1 p-8 order-2>script>(self.Astro||(self.Astro{})).visible(e,t,o)>{let iasync()>{await(await e())()},nobjecttypeof t.value?t.value:void 0,r{rootMargin:nulln?void 0:n.rootMargin},snew IntersectionObserver(e>{for(let t of e)if(t.isIntersecting){s.disconnect(),i();break}},r);for(let e of o.children)s.observe(e)},window.dispatchEvent(new Event(astro:visible))/script>astro-island await-children clientvisible component-exportdefault component-url/_astro/BioCard.DsPsIGw9.js opts{"name":"BioCard","value":true} prefixr9 props{} renderer-url/_astro/client.9unXo8s5.js ssr uid10FxB3>div classflex flex-col h-full w-full styleopacity:0;transform:translateY(20px)>div classitems-center flex gap-3 mb-6 styleopacity:0;transform:translateX(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-briefcase fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16>/path>rect height14 width20 x2 y6 rx2>/rect>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>About/h2>/div>p classmd:text-lg text-base font-light leading-relaxed text-starlight/90 space-y-4 styleopacity:0>CTO and e-commerce technology strategist with over 17 years of experience leading software teams and building high-impact platforms. I focus on scalable architecture, payments and checkout, and reliable systems that support growth across markets. My leadership style combines hands-on delivery, mentorship, and strong product alignment so teams ship quickly without sacrificing quality. I have held leadership roles at Lazada, Bamilo, and iMotorbike across Asia and Europe, helping companies scale through periods of rapid expansion./p>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-2 order-3>astro-island await-children clientvisible component-exportdefault component-url/_astro/BlogPreviewCard.E1_nw688.js opts{"name":"BlogPreviewCard","value":true} prefixr10 props{"posts":1,0,{"post":0,{"id":0,"ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.md","data":0,{"title":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents","description":0,"How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix.","pubDate":3,"2025-01-19T00:00:00.000Z","tags":1,0,"ai",0,"audio-engineering",0,"ffmpeg",0,"laravel",0,"machine-learning",0,"content-generation",0,"vector-database",0,"rag",0,"vizra",0,"php","category":0,"Engineering","draft":0,false},"body":0,"# From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents\n\nCreating professional meditation audio isn't just about layering a voice track over background music. It's an intricate dance of frequencies, dynamics, and timing that traditionally required a skilled audio engineer with years of experience.\n\n## The Challenge: When Art Meets Algorithm\n\nOur challenge was ambitious: automate the creation of studio-quality meditation mantras by intelligently mixing voice narrations with background music—while ensuring the result felt organic, not robotic.\n\nWe didn't want to simply apply static presets. We wanted a system that learns, adapts, and improves with every successful mix.\n\n## The Architecture: A Symphony of AI Agents\n\nAt the heart of our solution is a sophisticated multi-agent system built on the Vizra ADK (Agent Development Kit), orchestrating several specialized components:\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MantraGenerationWorkflow │\n├─────────────────────────────────────────────────────────────┤\n│ ┌─────────────────┐ ┌──────────────────────────────┐ │\n│ │ Content Finder │ → │ MantraGenerationAgent │ │\n│ │ (FindUnmixed) │ │ (Gemini 2.5 Flash) │ │\n│ └─────────────────┘ └──────────────────────────────┘ │\n│ ↓ ↓ │\n│ ┌─────────────────────────────────────────────────────┐ │\n│ │ IntelligentFFmpegMixerTool │ │\n│ │ ┌───────────┐ ┌────────────┐ ┌────────────────┐ │ │\n│ │ │ Gemini AI │→ │ Vector RAG │→ │ FFmpeg 8 Engine│ │ │\n│ │ │ Parameter │ │ Learning │ │ Execution │ │ │\n│ │ │ Generator │ │ System │ │ │ │ │\n│ │ └───────────┘ └────────────┘ └────────────────┘ │ │\n│ └─────────────────────────────────────────────────────┘ │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### The MantraGenerationAgent\n\nOur primary agent operates as an \"AI Audio Engineer\" that coordinates the entire mixing process:\n\n```php\nclass MantraGenerationAgent extends BaseLlmAgent\n{\n protected string $model 'gemini-2.5-flash';\n protected ?float $temperature 0.5;\n\n protected array $tools \n FindUnmixedContentTool::class,\n IntelligentFFmpegMixerTool::class,\n VectorMemoryTool::class,\n ;\n}\n```\n\nThe agent receives high-level instructions and autonomously decides:\n\n- Which voice and music content to pair together\n- When to consult past successful mixes\n- How to adjust parameters based on time-of-day context (morning energizing vs. night calming)\n\n## The Intelligence Layer: Gemini + Audio Analysis\n\n### Real-Time Audio Intelligence\n\nBefore any mixing occurs, our system performs comprehensive audio analysis using FFmpeg's probing capabilities:\n\n```php\nprivate function analyzeAudio(string $path): array\n{\n $command sprintf(\n 'ffprobe -v quiet -print_format json -show_format -show_streams %s',\n escapeshellarg($path)\n );\n\n return \n 'duration' > (float) ($info'format''duration' ?? 0),\n 'bitrate' > (int) ($info'format''bit_rate' ?? 0) / 1000,\n 'channels' > (int) ($info'streams'0'channels' ?? 0),\n 'sample_rate' > (int) ($info'streams'0'sample_rate' ?? 44100),\n ;\n}\n```\n\n### AI-Driven Parameter Generation\n\nThe magic happens when we feed audio characteristics and actual audio files to Gemini 2.0 Flash for parameter optimization:\n\n```php\n$response Prism::structured()\n ->using(Provider::Gemini, 'gemini-2.0-flash-exp')\n ->withPrompt($prompt, $voiceAttachment, $musicAttachment)\n ->withSchema($mixingParametersSchema)\n ->asStructured();\n```\n\nGemini analyzes both the metadata and the actual audio content, then returns optimized FFmpeg parameters tailored to the specific voice-music pairing.\n\n## The Heart of the Mix: FFmpeg 8 Filter Chains\n\n### Dynamic Filter Construction\n\nOur system constructs sophisticated FFmpeg filter chains based on AI recommendations:\n\n```php\nprivate function buildFilters(array $params): string\n{\n $filters ;\n\n // Voice processing: normalize, gain, convert to stereo\n $filters '0:aloudnormI-18:LRA10:TP-1.5,volume1.5dB,aformatchannel_layoutsstereovoice_norm';\n\n // Voice delay (let the music establish ambiance first)\n $delayMs $params'voice_delay_seconds' * 1000;\n $filters \"voice_normadelay{$delayMs}|{$delayMs}voice_for_mix\";\n\n // Music processing: normalize, EQ, gain\n $filters '1:aloudnormI-19:LRA9:TP-2,' .\n 'highpassf80,lowpassf12000,' .\n 'equalizerf4000:width_typeh:width800:g-3,' .\n 'volume-1dBmusic_proc';\n\n // The mix with intelligent weighting\n $filters 'music_procvoice_for_mixamixinputs2:normalize0:dropout_transition2:weights1 1mix_combined';\n\n // Final mastering: fade-in and loudness normalization\n $filters 'mix_combinedafadetin:ss0:d0.12,loudnormI-15:LRA8:TP-2final';\n\n return implode(';', $filters);\n}\n```\n\n### Time-Context Aware Mixing\n\nThe system adapts mixing parameters based on when the mantra will be consumed:\n\n| Context | Voice Delay | Ducking Ratio | Character |\n|-----------|---------------|-----------------|------------------------|\n| Morning | 3-4 seconds | 4-6 (gentle) | Energizing, music-forward |\n| Afternoon | 5-6 seconds | 6-8 (moderate) | Balanced focus |\n| Night | 6-8 seconds | 9-12 (strong) | Voice-dominant, calming |\n\n## The Learning System: Vector Memory & RAG\n\n### Storing Successful Mixes\n\nEvery successful mix becomes training data for future generations:\n\n```php\nprivate function storeSuccessfulMix(\n array $params,\n array $voiceInfo,\n array $musicInfo,\n AgentContext $context\n): void {\n $description sprintf(\n 'Successful audio mix: Voice duration %.1fs, Music duration %.1fs. ' .\n 'Ducking: %s threshold, %.2f ratio, %dms attack, %dms release.',\n $voiceInfo'duration',\n $musicInfo'duration',\n $params'ducking_threshold',\n $params'ducking_ratio',\n $params'ducking_attack',\n $params'ducking_release'\n );\n\n $agent->vector()->addDocument(\n 'content' > $description,\n 'metadata' > \n 'parameters' > $params,\n 'duration_ratio' > $voiceInfo'duration' / max($musicInfo'duration', 1),\n 'timestamp' > now()->toIso8601String(),\n ,\n 'namespace' > 'audio_mixing',\n );\n}\n```\n\n### Retrieval-Augmented Generation (RAG)\n\nBefore mixing new content, the system queries its vector memory for similar successful mixes:\n\n```php\n$similarMixes $agent->rag()->search(\n 'query' > \"meditation mantra mixing with {$voice->label} and {$music->label}\",\n 'namespace' > 'audio_mixing',\n 'limit' > 3,\n 'threshold' > 0.7,\n);\n```\n\nThis means a morning energizing mantra automatically inherits parameters from past successful morning mixes—while still allowing Gemini to fine-tune for the specific content.\n\n## Quality Assurance: AI-Powered Evaluation\n\nWe don't just generate audio—we evaluate it. Our evaluation framework uses LLM judges to assess mix quality:\n\n### Voice Clarity Assertion\n\n```php\nclass VoiceClarityAssertion extends BaseAssertion\n{\n protected function getPrompt(\n string $input,\n string $output,\n ?string $expected null\n ): string {\n return <<<PROMPT\n Evaluate voice clarity in this meditation mantra mix:\n\n **Clarity Criteria:**\n 1. Voice Prominence (30 points)\n 2. Intelligibility (30 points)\n 3. Frequency Clarity (20 points)\n 4. Mix Balance (20 points)\n\n Voice should be effortlessly intelligible and feel natural,\n as if narrator is speaking directly to listener with gentle\n ambient music in background.\n PROMPT;\n }\n}\n```\n\n### Ducking Effectiveness Assertion\n\n```php\nclass DuckingEffectivenessAssertion extends BaseAssertion\n{\n // Evaluates smoothness of transitions\n // Validates music reduction when voice is present\n // Ensures meditation suitability\n}\n```\n\n## Safety First: Parameter Guardrails\n\nAI can be creative—sometimes too creative. We enforce strict parameter bounds to prevent audio disasters:\n\n```php\nprivate const SAFE_VOICE_NORMALIZATION 'loudnormI-18:LRA10:TP-1.5:dual_monotrue:lineartrue';\nprivate const SAFE_DUCKING_RATIO 3;\nprivate const SAFE_DUCKING_THRESHOLD_DB -22;\nprivate const MIN_VOICE_DELAY_SECONDS 2;\nprivate const MAX_VOICE_DELAY_SECONDS 20;\n\nprivate function enforceParameterSafety(\n array $params,\n array $voiceInfo,\n array $musicInfo\n): array {\n // Ensure voice delay respects music duration\n $availableIntro $musicDuration - $voiceDuration - self::MUSIC_TAIL_BUFFER_SECONDS;\n $params'voice_delay_seconds' max(\n self::MIN_VOICE_DELAY_SECONDS,\n min(self::MAX_VOICE_DELAY_SECONDS, (int) round($availableIntro))\n );\n\n // Clamp all parameters to safe ranges\n $params'ducking_ratio' max(3, min(12, $params'ducking_ratio'));\n $params'voice_gain_db' max(-2.0, min(3.0, $params'voice_gain_db'));\n $params'music_gain_db' max(-4.0, min(1.0, $params'music_gain_db'));\n\n return $params;\n}\n```\n\n## The Complete Pipeline\n\nHere's how a mantra is born:\n\n```mermaid\nflowchart TD\n AUser Request --> B{Content IDs Provided?}\n B -->|No| CFindUnmixedContentTool\n B -->|Yes| DAnalyze Audio Files\n C --> D\n D --> EQuery Vector Memory for Similar Mixes\n E --> FGemini Analyzes Audio + Metadata\n F --> GGenerate FFmpeg Parameters\n G --> HApply Safety Guardrails\n H --> IExecute FFmpeg Mix\n I --> J{Mix Successful?}\n J -->|Yes| KStore in Vector Memory\n J -->|No| LRetry with Fallback Params\n L --> I\n K --> MCreate Content Record\n M --> NGenerate Social Cards\n N --> OMantra Published! 🧘\n```\n\n## Results: The Numbers Speak\n\nSince deploying this system:\n\n- **Processing Time:** ~30-60 seconds per mantra (vs. 15-30 minutes for manual mixing)\n- **Quality Consistency:** 75%+ pass rate on automated quality evaluations\n- **Learning Curve:** System performance improves measurably after ~50 successful mixes\n- **Human Intervention:** <5% of mixes require manual adjustment\n\n## What We Learned\n\n### 1. AI Needs Guardrails\n\nGemini occasionally suggests parameters that would produce technically valid but aesthetically poor results. Our safety layer is essential.\n\n### 2. Vector Memory is Powerful\n\nThe RAG system's ability to recall successful mixes transformed our quality curve. New content benefits from all past successes.\n\n### 3. Context Matters\n\nA \"good mix\" for morning meditation is different from night. Time-aware parameter selection dramatically improved user satisfaction.\n\n### 4. FFmpeg is Incredibly Capable\n\nFFmpeg 8's filter graph system is essentially a visual programming language for audio. Combined with AI parameter generation, it's unstoppable.\n\n## What's Next\n\nWe're exploring:\n\n- **Real-time audio analysis** during mixing for adaptive parameter adjustment\n- **User feedback loops** to incorporate listener preferences into the learning system\n- **Multi-track mixing** for more complex compositions with ambient sounds\n- **Personalized mixing profiles** based on individual user listening patterns\n\n## Try It Yourself\n\nThe core concepts are transferable to any audio processing pipeline:\n\n1. **Analyze** your inputs with FFprobe\n2. **Query** past successes from a vector database\n3. **Generate** parameters with a capable LLM\n4. **Apply** safety bounds before execution\n5. **Store** successful results for future learning\n\nThe result? A system that gets better with every mix—turning the art of audio engineering into a learnable, scalable process.\n\n---\n\n*Built with Laravel 12, Filament 4, Vizra ADK, FFmpeg 8, Google Gemini, and a deep appreciation for the meditation practitioners who use our content every day.* 🧘♀️","filePath":0,"src/content/blog/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.md","digest":0,"28d9b5dbc8ff7050","rendered":0,{"html":0,"<h1 id\"from-silence-to-symphony-how-we-built-an-ai-powered-audio-mixing-engine-with-ffmpeg-8-and-intelligent-agents\">From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents</h1>\n<p>Creating professional meditation audio isn’t just about layering a voice track over background music. It’s an intricate dance of frequencies, dynamics, and timing that traditionally required a skilled audio engineer with years of experience.</p>\n<h2 id\"the-challenge-when-art-meets-algorithm\">The Challenge: When Art Meets Algorithm</h2>\n<p>Our challenge was ambitious: automate the creation of studio-quality meditation mantras by intelligently mixing voice narrations with background music—while ensuring the result felt organic, not robotic.</p>\n<p>We didn’t want to simply apply static presets. We wanted a system that learns, adapts, and improves with every successful mix.</p>\n<h2 id\"the-architecture-a-symphony-of-ai-agents\">The Architecture: A Symphony of AI Agents</h2>\n<p>At the heart of our solution is a sophisticated multi-agent system built on the Vizra ADK (Agent Development Kit), orchestrating several specialized components:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"plaintext\"><code><span class\"line\"><span>┌─────────────────────────────────────────────────────────────┐</span></span>\n<span class\"line\"><span>│ MantraGenerationWorkflow │</span></span>\n<span class\"line\"><span>├─────────────────────────────────────────────────────────────┤</span></span>\n<span class\"line\"><span>│ ┌─────────────────┐ ┌──────────────────────────────┐ │</span></span>\n<span class\"line\"><span>│ │ Content Finder │ → │ MantraGenerationAgent │ │</span></span>\n<span class\"line\"><span>│ │ (FindUnmixed) │ │ (Gemini 2.5 Flash) │ │</span></span>\n<span class\"line\"><span>│ └─────────────────┘ └──────────────────────────────┘ │</span></span>\n<span class\"line\"><span>│ ↓ ↓ │</span></span>\n<span class\"line\"><span>│ ┌─────────────────────────────────────────────────────┐ │</span></span>\n<span class\"line\"><span>│ │ IntelligentFFmpegMixerTool │ │</span></span>\n<span class\"line\"><span>│ │ ┌───────────┐ ┌────────────┐ ┌────────────────┐ │ │</span></span>\n<span class\"line\"><span>│ │ │ Gemini AI │→ │ Vector RAG │→ │ FFmpeg 8 Engine│ │ │</span></span>\n<span class\"line\"><span>│ │ │ Parameter │ │ Learning │ │ Execution │ │ │</span></span>\n<span class\"line\"><span>│ │ │ Generator │ │ System │ │ │ │ │</span></span>\n<span class\"line\"><span>│ │ └───────────┘ └────────────┘ └────────────────┘ │ │</span></span>\n<span class\"line\"><span>│ └─────────────────────────────────────────────────────┘ │</span></span>\n<span class\"line\"><span>└─────────────────────────────────────────────────────────────┘</span></span></code></pre>\n<h3 id\"the-mantragenerationagent\">The MantraGenerationAgent</h3>\n<p>Our primary agent operates as an “AI Audio Engineer” that coordinates the entire mixing process:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> MantraGenerationAgent</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseLlmAgent</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $model </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'gemini-2.5-flash'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> ?float</span><span style\"color:#E1E4E8\"> $temperature </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> 0.5</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $tools </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> FindUnmixedContentTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> IntelligentFFmpegMixerTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> VectorMemoryTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<p>The agent receives high-level instructions and autonomously decides:</p>\n<ul>\n<li>Which voice and music content to pair together</li>\n<li>When to consult past successful mixes</li>\n<li>How to adjust parameters based on time-of-day context (morning energizing vs. night calming)</li>\n</ul>\n<h2 id\"the-intelligence-layer-gemini--audio-analysis\">The Intelligence Layer: Gemini + Audio Analysis</h2>\n<h3 id\"real-time-audio-intelligence\">Real-Time Audio Intelligence</h3>\n<p>Before any mixing occurs, our system performs comprehensive audio analysis using FFmpeg’s probing capabilities:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> analyzeAudio</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">string</span><span style\"color:#E1E4E8\"> $path)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $command </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> sprintf</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'ffprobe -v quiet -print_format json -show_format -show_streams %s'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> escapeshellarg</span><span style\"color:#E1E4E8\">($path)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'duration'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">float</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'format'</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'bitrate'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'format'</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'bit_rate'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">) </span><span style\"color:#F97583\">/</span><span style\"color:#79B8FF\"> 1000</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'channels'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'streams'</span><span style\"color:#E1E4E8\"></span><span style\"color:#79B8FF\">0</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'channels'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 0</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'sample_rate'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) ($info</span><span style\"color:#9ECBFF\">'streams'</span><span style\"color:#E1E4E8\"></span><span style\"color:#79B8FF\">0</span><span style\"color:#E1E4E8\"></span><span style\"color:#9ECBFF\">'sample_rate'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">??</span><span style\"color:#79B8FF\"> 44100</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"ai-driven-parameter-generation\">AI-Driven Parameter Generation</h3>\n<p>The magic happens when we feed audio characteristics and actual audio files to Gemini 2.0 Flash for parameter optimization:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#E1E4E8\">$response </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Prism</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">structured</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">using</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">Provider</span><span style\"color:#F97583\">::</span><span style\"color:#79B8FF\">Gemini</span><span style\"color:#E1E4E8\">, </span><span style\"color:#9ECBFF\">'gemini-2.0-flash-exp'</span><span style\"color:#E1E4E8\">)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">withPrompt</span><span style\"color:#E1E4E8\">($prompt, $voiceAttachment, $musicAttachment)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">withSchema</span><span style\"color:#E1E4E8\">($mixingParametersSchema)</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">asStructured</span><span style\"color:#E1E4E8\">();</span></span></code></pre>\n<p>Gemini analyzes both the metadata and the actual audio content, then returns optimized FFmpeg parameters tailored to the specific voice-music pairing.</p>\n<h2 id\"the-heart-of-the-mix-ffmpeg-8-filter-chains\">The Heart of the Mix: FFmpeg 8 Filter Chains</h2>\n<h3 id\"dynamic-filter-construction\">Dynamic Filter Construction</h3>\n<p>Our system constructs sophisticated FFmpeg filter chains based on AI recommendations:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> buildFilters</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">array</span><span style\"color:#E1E4E8\"> $params)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Voice processing: normalize, gain, convert to stereo</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> '0:aloudnormI-18:LRA10:TP-1.5,volume1.5dB,aformatchannel_layoutsstereovoice_norm'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Voice delay (let the music establish ambiance first)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $delayMs </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_delay_seconds'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">*</span><span style\"color:#79B8FF\"> 1000</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> \"voice_normadelay{</span><span style\"color:#E1E4E8\">$delayMs</span><span style\"color:#9ECBFF\">}|{</span><span style\"color:#E1E4E8\">$delayMs</span><span style\"color:#9ECBFF\">}voice_for_mix\"</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Music processing: normalize, EQ, gain</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> '1:aloudnormI-19:LRA9:TP-2,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'highpassf80,lowpassf12000,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'equalizerf4000:width_typeh:width800:g-3,'</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'volume-1dBmusic_proc'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // The mix with intelligent weighting</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'music_procvoice_for_mixamixinputs2:normalize0:dropout_transition2:weights1 1mix_combined'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Final mastering: fade-in and loudness normalization</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $filters </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'mix_combinedafadetin:ss0:d0.12,loudnormI-15:LRA8:TP-2final'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#79B8FF\"> implode</span><span style\"color:#E1E4E8\">(</span><span style\"color:#9ECBFF\">';'</span><span style\"color:#E1E4E8\">, $filters);</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"time-context-aware-mixing\">Time-Context Aware Mixing</h3>\n<p>The system adapts mixing parameters based on when the mantra will be consumed:</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Context</th><th>Voice Delay</th><th>Ducking Ratio</th><th>Character</th></tr></thead><tbody><tr><td>Morning</td><td>3-4 seconds</td><td>4-6 (gentle)</td><td>Energizing, music-forward</td></tr><tr><td>Afternoon</td><td>5-6 seconds</td><td>6-8 (moderate)</td><td>Balanced focus</td></tr><tr><td>Night</td><td>6-8 seconds</td><td>9-12 (strong)</td><td>Voice-dominant, calming</td></tr></tbody></table>\n<h2 id\"the-learning-system-vector-memory--rag\">The Learning System: Vector Memory & RAG</h2>\n<h3 id\"storing-successful-mixes\">Storing Successful Mixes</h3>\n<p>Every successful mix becomes training data for future generations:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> storeSuccessfulMix</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $voiceInfo,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $musicInfo,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> AgentContext</span><span style\"color:#E1E4E8\"> $context</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> void</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $description </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> sprintf</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'Successful audio mix: Voice duration %.1fs, Music duration %.1fs. '</span><span style\"color:#F97583\"> .</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'Ducking: %s threshold, %.2f ratio, %dms attack, %dms release.'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $voiceInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $musicInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_threshold'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_attack'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_release'</span><span style\"color:#E1E4E8\"></span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $agent</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">vector</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">addDocument</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'content'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $description,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'metadata'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'parameters'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'duration_ratio'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $voiceInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\">/</span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">($musicInfo</span><span style\"color:#9ECBFF\">'duration'</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">1</span><span style\"color:#E1E4E8\">),</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'timestamp'</span><span style\"color:#F97583\"> ></span><span style\"color:#B392F0\"> now</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">toIso8601String</span><span style\"color:#E1E4E8\">(),</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'namespace'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'audio_mixing'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"retrieval-augmented-generation-rag\">Retrieval-Augmented Generation (RAG)</h3>\n<p>Before mixing new content, the system queries its vector memory for similar successful mixes:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#E1E4E8\">$similarMixes </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $agent</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">rag</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">-></span><span style\"color:#B392F0\">search</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'query'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> \"meditation mantra mixing with {</span><span style\"color:#E1E4E8\">$voice</span><span style\"color:#F97583\">-></span><span style\"color:#E1E4E8\">label</span><span style\"color:#9ECBFF\">} and {</span><span style\"color:#E1E4E8\">$music</span><span style\"color:#F97583\">-></span><span style\"color:#E1E4E8\">label</span><span style\"color:#9ECBFF\">}\"</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'namespace'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'audio_mixing'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'limit'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> 3</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'threshold'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> 0.7</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">);</span></span></code></pre>\n<p>This means a morning energizing mantra automatically inherits parameters from past successful morning mixes—while still allowing Gemini to fine-tune for the specific content.</p>\n<h2 id\"quality-assurance-ai-powered-evaluation\">Quality Assurance: AI-Powered Evaluation</h2>\n<p>We don’t just generate audio—we evaluate it. Our evaluation framework uses LLM judges to assess mix quality:</p>\n<h3 id\"voice-clarity-assertion\">Voice Clarity Assertion</h3>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> VoiceClarityAssertion</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseAssertion</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> getPrompt</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $input,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $output,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> ?string</span><span style\"color:#E1E4E8\"> $expected </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> null</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> )</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#9ECBFF\"> <<<</span><span style\"color:#F97583\">PROMPT</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> Evaluate voice clarity in this meditation mantra mix:</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> **Clarity Criteria:**</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 1. Voice Prominence (30 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 2. Intelligibility (30 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 3. Frequency Clarity (20 points)</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 4. Mix Balance (20 points)</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> Voice should be effortlessly intelligible and feel natural,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> as if narrator is speaking directly to listener with gentle</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> ambient music in background.</span></span>\n<span class\"line\"><span style\"color:#F97583\"> PROMPT</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"ducking-effectiveness-assertion\">Ducking Effectiveness Assertion</h3>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> DuckingEffectivenessAssertion</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseAssertion</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Evaluates smoothness of transitions</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Validates music reduction when voice is present</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Ensures meditation suitability</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"safety-first-parameter-guardrails\">Safety First: Parameter Guardrails</h2>\n<p>AI can be creative—sometimes too creative. We enforce strict parameter bounds to prevent audio disasters:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_VOICE_NORMALIZATION</span><span style\"color:#F97583\"> </span><span style\"color:#9ECBFF\"> 'loudnormI-18:LRA10:TP-1.5:dual_monotrue:lineartrue'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_DUCKING_RATIO</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 3</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> SAFE_DUCKING_THRESHOLD_DB</span><span style\"color:#F97583\"> </span><span style\"color:#F97583\"> -</span><span style\"color:#79B8FF\">22</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> MIN_VOICE_DELAY_SECONDS</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 2</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> const</span><span style\"color:#79B8FF\"> MAX_VOICE_DELAY_SECONDS</span><span style\"color:#F97583\"> </span><span style\"color:#79B8FF\"> 20</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">private</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> enforceParameterSafety</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $params,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $voiceInfo,</span></span>\n<span class\"line\"><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $musicInfo</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Ensure voice delay respects music duration</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $availableIntro </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> $musicDuration </span><span style\"color:#F97583\">-</span><span style\"color:#E1E4E8\"> $voiceDuration </span><span style\"color:#F97583\">-</span><span style\"color:#F97583\"> self::</span><span style\"color:#79B8FF\">MUSIC_TAIL_BUFFER_SECONDS</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_delay_seconds'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#F97583\"> self::</span><span style\"color:#79B8FF\">MIN_VOICE_DELAY_SECONDS</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">self::</span><span style\"color:#79B8FF\">MAX_VOICE_DELAY_SECONDS</span><span style\"color:#E1E4E8\">, (</span><span style\"color:#F97583\">int</span><span style\"color:#E1E4E8\">) </span><span style\"color:#79B8FF\">round</span><span style\"color:#E1E4E8\">($availableIntro))</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> );</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Clamp all parameters to safe ranges</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">3</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">12</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'ducking_ratio'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'voice_gain_db'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">-</span><span style\"color:#79B8FF\">2.0</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">3.0</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'voice_gain_db'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $params</span><span style\"color:#9ECBFF\">'music_gain_db'</span><span style\"color:#E1E4E8\"> </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> max</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">-</span><span style\"color:#79B8FF\">4.0</span><span style\"color:#E1E4E8\">, </span><span style\"color:#79B8FF\">min</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">1.0</span><span style\"color:#E1E4E8\">, $params</span><span style\"color:#9ECBFF\">'music_gain_db'</span><span style\"color:#E1E4E8\">));</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> $params;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"the-complete-pipeline\">The Complete Pipeline</h2>\n<p>Here’s how a mantra is born:</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"mermaid\"><code><span class\"line\"><span style\"color:#E1E4E8\">flowchart TD</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> AUser Request --> B{Content IDs Provided?}</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> B -->|No| CFindUnmixedContentTool</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> B -->|Yes| DAnalyze Audio Files</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> C --> D</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> D --> EQuery Vector Memory for Similar Mixes</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> E --> FGemini Analyzes Audio + Metadata</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> F --> GGenerate FFmpeg Parameters</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> G --> HApply Safety Guardrails</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> H --> IExecute FFmpeg Mix</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> I --> J{Mix Successful?}</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> J -->|Yes| KStore in Vector Memory</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> J -->|No| LRetry with Fallback Params</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> L --> I</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> K --> MCreate Content Record</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> M --> NGenerate Social Cards</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> N --> OMantra Published! 🧘</span></span></code></pre>\n<h2 id\"results-the-numbers-speak\">Results: The Numbers Speak</h2>\n<p>Since deploying this system:</p>\n<ul>\n<li><strong>Processing Time:</strong> ~30-60 seconds per mantra (vs. 15-30 minutes for manual mixing)</li>\n<li><strong>Quality Consistency:</strong> 75%+ pass rate on automated quality evaluations</li>\n<li><strong>Learning Curve:</strong> System performance improves measurably after ~50 successful mixes</li>\n<li><strong>Human Intervention:</strong> <5% of mixes require manual adjustment</li>\n</ul>\n<h2 id\"what-we-learned\">What We Learned</h2>\n<h3 id\"1-ai-needs-guardrails\">1. AI Needs Guardrails</h3>\n<p>Gemini occasionally suggests parameters that would produce technically valid but aesthetically poor results. Our safety layer is essential.</p>\n<h3 id\"2-vector-memory-is-powerful\">2. Vector Memory is Powerful</h3>\n<p>The RAG system’s ability to recall successful mixes transformed our quality curve. New content benefits from all past successes.</p>\n<h3 id\"3-context-matters\">3. Context Matters</h3>\n<p>A “good mix” for morning meditation is different from night. Time-aware parameter selection dramatically improved user satisfaction.</p>\n<h3 id\"4-ffmpeg-is-incredibly-capable\">4. FFmpeg is Incredibly Capable</h3>\n<p>FFmpeg 8’s filter graph system is essentially a visual programming language for audio. Combined with AI parameter generation, it’s unstoppable.</p>\n<h2 id\"whats-next\">What’s Next</h2>\n<p>We’re exploring:</p>\n<ul>\n<li><strong>Real-time audio analysis</strong> during mixing for adaptive parameter adjustment</li>\n<li><strong>User feedback loops</strong> to incorporate listener preferences into the learning system</li>\n<li><strong>Multi-track mixing</strong> for more complex compositions with ambient sounds</li>\n<li><strong>Personalized mixing profiles</strong> based on individual user listening patterns</li>\n</ul>\n<h2 id\"try-it-yourself\">Try It Yourself</h2>\n<p>The core concepts are transferable to any audio processing pipeline:</p>\n<ol>\n<li><strong>Analyze</strong> your inputs with FFprobe</li>\n<li><strong>Query</strong> past successes from a vector database</li>\n<li><strong>Generate</strong> parameters with a capable LLM</li>\n<li><strong>Apply</strong> safety bounds before execution</li>\n<li><strong>Store</strong> successful results for future learning</li>\n</ol>\n<p>The result? A system that gets better with every mix—turning the art of audio engineering into a learnable, scalable process.</p>\n<hr>\n<p><em>Built with Laravel 12, Filament 4, Vizra ADK, FFmpeg 8, Google Gemini, and a deep appreciation for the meditation practitioners who use our content every day.</em> 🧘♀️</p>","metadata":0,{"headings":1,0,{"depth":0,1,"slug":0,"from-silence-to-symphony-how-we-built-an-ai-powered-audio-mixing-engine-with-ffmpeg-8-and-intelligent-agents","text":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents"},0,{"depth":0,2,"slug":0,"the-challenge-when-art-meets-algorithm","text":0,"The Challenge: When Art Meets Algorithm"},0,{"depth":0,2,"slug":0,"the-architecture-a-symphony-of-ai-agents","text":0,"The Architecture: A Symphony of AI Agents"},0,{"depth":0,3,"slug":0,"the-mantragenerationagent","text":0,"The MantraGenerationAgent"},0,{"depth":0,2,"slug":0,"the-intelligence-layer-gemini--audio-analysis","text":0,"The Intelligence Layer: Gemini + Audio Analysis"},0,{"depth":0,3,"slug":0,"real-time-audio-intelligence","text":0,"Real-Time Audio Intelligence"},0,{"depth":0,3,"slug":0,"ai-driven-parameter-generation","text":0,"AI-Driven Parameter Generation"},0,{"depth":0,2,"slug":0,"the-heart-of-the-mix-ffmpeg-8-filter-chains","text":0,"The Heart of the Mix: FFmpeg 8 Filter Chains"},0,{"depth":0,3,"slug":0,"dynamic-filter-construction","text":0,"Dynamic Filter Construction"},0,{"depth":0,3,"slug":0,"time-context-aware-mixing","text":0,"Time-Context Aware Mixing"},0,{"depth":0,2,"slug":0,"the-learning-system-vector-memory--rag","text":0,"The Learning System: Vector Memory & RAG"},0,{"depth":0,3,"slug":0,"storing-successful-mixes","text":0,"Storing Successful Mixes"},0,{"depth":0,3,"slug":0,"retrieval-augmented-generation-rag","text":0,"Retrieval-Augmented Generation (RAG)"},0,{"depth":0,2,"slug":0,"quality-assurance-ai-powered-evaluation","text":0,"Quality Assurance: AI-Powered Evaluation"},0,{"depth":0,3,"slug":0,"voice-clarity-assertion","text":0,"Voice Clarity Assertion"},0,{"depth":0,3,"slug":0,"ducking-effectiveness-assertion","text":0,"Ducking Effectiveness Assertion"},0,{"depth":0,2,"slug":0,"safety-first-parameter-guardrails","text":0,"Safety First: Parameter Guardrails"},0,{"depth":0,2,"slug":0,"the-complete-pipeline","text":0,"The Complete Pipeline"},0,{"depth":0,2,"slug":0,"results-the-numbers-speak","text":0,"Results: The Numbers Speak"},0,{"depth":0,2,"slug":0,"what-we-learned","text":0,"What We Learned"},0,{"depth":0,3,"slug":0,"1-ai-needs-guardrails","text":0,"1. AI Needs Guardrails"},0,{"depth":0,3,"slug":0,"2-vector-memory-is-powerful","text":0,"2. Vector Memory is Powerful"},0,{"depth":0,3,"slug":0,"3-context-matters","text":0,"3. Context Matters"},0,{"depth":0,3,"slug":0,"4-ffmpeg-is-incredibly-capable","text":0,"4. FFmpeg is Incredibly Capable"},0,{"depth":0,2,"slug":0,"whats-next","text":0,"What’s Next"},0,{"depth":0,2,"slug":0,"try-it-yourself","text":0,"Try It Yourself"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents","description":0,"How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix.","pubDate":3,"2025-01-19T00:00:00.000Z","tags":1,0,"ai",0,"audio-engineering",0,"ffmpeg",0,"laravel",0,"machine-learning",0,"content-generation",0,"vector-database",0,"rag",0,"vizra",0,"php","category":0,"Engineering","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents","render":0,null},"readingTime":0,1},0,{"post":0,{"id":0,"orchestrating-multimedia-magic-vizra-adk-workflows.md","data":0,{"title":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows","description":0,"A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals.","pubDate":3,"2024-12-19T00:00:00.000Z","tags":1,0,"ai",0,"workflows",0,"multimedia",0,"php",0,"vizra",0,"llm",0,"orchestration",0,"content-generation","category":0,"Engineering","draft":0,false},"body":0,"# Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows\n\nIn my recent work, I wasn't just generating text; I was building immersive multimedia experiences. Whether it was generating daily briefings, educational content, or dynamic updates, relying on a single LLM prompt often fell short.\n\nTo create high-quality content that combined researched text, synthesized audio (via ElevenLabs), and generated imagery, I needed orchestration. Enter **Vizra ADK Workflows**.\n\nHere is a deep dive into how I leveraged Vizra's workflow patterns to turn a simple topic into a full multimedia package.\n\n## The Challenge: Coordination vs. Chaos\n\nGenerating multimedia requires distinct steps:\n1. **Research & Writing:** Ensuring factual accuracy (RAG) and engaging copy.\n2. **Audio Synthesis:** Converting text to speech using specific voice profiles.\n3. **Visuals:** Generating thumbnails or accompanying images.\n\nDoing this linearly is slow. Doing it without structure is error-prone. I needed a system that could handle sequential logic for writing and parallel execution for asset generation.\n\n## The Solution: The Vizra Workflow\n\nI utilized the `Workflow` facade provided by Vizra ADK to compose a pipeline that mixes sequential and parallel execution patterns.\n\n### 1. The Architect: Sequential Planning\n\nEverything starts with a script. I used a **Sequential Workflow** to ensure I had a solid foundation before generating expensive assets.\n\n```php\nuse Vizra\\VizraADK\\Facades\\Workflow;\nuse App\\Agents\\Content\\ResearcherAgent;\nuse App\\Agents\\Content\\ScriptWriterAgent;\n\npublic function generateContent(string $topic)\n{\n // Step 1: Research and Write\n $scriptData Workflow::sequential()\n ->then(ResearcherAgent::class) // Uses Meilisearch Vector Store\n ->then(ScriptWriterAgent::class) // Uses Gemini Pro for reasoning\n ->run($topic);\n\n // ... pass to next stage\n}\n```\n\nIn this stage, the `ResearcherAgent` uses the `VectorMemoryTool` (backed by Meilisearch) to pull relevant context. The `ScriptWriterAgent` then formats this into a JSON structure containing a title, body, and a prompt for the image generator.\n\n### 2. The Factory: Parallel Asset Generation\n\nOnce I had the script, I didn't want to wait for the audio to finish before starting the image generation. Vizra's **Parallel Workflow** allowed me to spin up multiple agents simultaneously.\n\nI passed the output from the sequential step into a parallel block.\n\n```php\n // ... inside generateContent\n\n $assets Workflow::parallel()\n ->agents(\n 'audio' > VoiceOverAgent::class,\n 'visual' > ThumbnailGeneratorAgent::class,\n )\n ->run($scriptData'final_script');\n\n return \n 'script' > $scriptData,\n 'audio_path' > $assets'audio',\n 'image_url' > $assets'visual',\n ;\n}\n```\n\n### 3. The Agents & Tools\n\nThe magic happens inside the specialized agents. Here is how I configured them using the Vizra ADK structure.\n\n#### The Voice Over Agent (ElevenLabs)\n\nThis agent is responsible for taking text and returning a path to an MP3 file. It utilizes a custom tool I built to interface with the ElevenLabs API.\n\n```php\nnamespace App\\Agents\\Content;\n\nuse Vizra\\VizraADK\\Agents\\BaseLlmAgent;\nuse App\\Tools\\Audio\\ElevenLabsTtsTool;\n\nclass VoiceOverAgent extends BaseLlmAgent\n{\n protected string $name 'voice_over_specialist';\n\n protected string $model 'gpt-4o-mini'; // Fast, low cost for tool calling\n\n protected string $instructions <<<'INSTRUCTIONS'\n You are an audio engineer.\n 1. Receive the script text.\n 2. Select the appropriate voice ID based on the content tone.\n 3. Use the 'text_to_speech' tool to generate the audio.\n 4. Return the file path provided by the tool.\n INSTRUCTIONS;\n\n protected array $tools \n ElevenLabsTtsTool::class,\n ;\n}\n```\n\n#### The Tool Implementation\n\nThe `ElevenLabsTtsTool` handles the actual API call, keeping my agent logic clean.\n\n```php\nnamespace App\\Tools\\Audio;\n\nuse Vizra\\VizraADK\\Contracts\\ToolInterface;\nuse Illuminate\\Support\\Facades\\Http;\n\nclass ElevenLabsTtsTool implements ToolInterface\n{\n public function definition(): array\n {\n return \n 'name' > 'text_to_speech',\n 'description' > 'Converts text to audio using ElevenLabs',\n 'parameters' > \n 'type' > 'object',\n 'properties' > \n 'text' > 'type' > 'string',\n 'voice_id' > 'type' > 'string',\n ,\n 'required' > 'text',\n ,\n ;\n }\n\n public function execute(array $arguments, $context, $memory): string\n {\n // Implementation calling ElevenLabs API...\n // Returns JSON with { \"status\": \"success\", \"path\": \"...\" }\n }\n}\n```\n\n## Why This Approach Wins\n\n1. **Modularity:** If I want to switch from ElevenLabs to OpenAI TTS, I just swap the tool in the `VoiceOverAgent`. The workflow remains untouched.\n2. **Speed:** By parallelizing the asset generation, I cut the total processing time by nearly 50%.\n3. **Observability:** Vizra's built-in tracing allows me to see exactly what the `ResearcherAgent` found in Meilisearch and why the `ScriptWriterAgent` made specific creative decisions.\n4. **Maintainability:** Each agent has a single responsibility. The `ResearcherAgent` doesn't know about audio files, and the `VoiceOverAgent` doesn't care about SEO keywords.\n\n## Conclusion\n\nBuilding complex AI features isn't just about prompt engineering; it's about architecture. By treating LLMs as specialized workers within a Vizra Workflow, I've turned a complex, multi-modal generation process into a reliable, maintainable pipeline.","filePath":0,"src/content/blog/orchestrating-multimedia-magic-vizra-adk-workflows.md","digest":0,"694a3840fbe261ff","rendered":0,{"html":0,"<h1 id\"orchestrating-multimedia-magic-how-i-built-content-generation-with-vizra-adk-workflows\">Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows</h1>\n<p>In my recent work, I wasn’t just generating text; I was building immersive multimedia experiences. Whether it was generating daily briefings, educational content, or dynamic updates, relying on a single LLM prompt often fell short.</p>\n<p>To create high-quality content that combined researched text, synthesized audio (via ElevenLabs), and generated imagery, I needed orchestration. Enter <strong>Vizra ADK Workflows</strong>.</p>\n<p>Here is a deep dive into how I leveraged Vizra’s workflow patterns to turn a simple topic into a full multimedia package.</p>\n<h2 id\"the-challenge-coordination-vs-chaos\">The Challenge: Coordination vs. Chaos</h2>\n<p>Generating multimedia requires distinct steps:</p>\n<ol>\n<li><strong>Research & Writing:</strong> Ensuring factual accuracy (RAG) and engaging copy.</li>\n<li><strong>Audio Synthesis:</strong> Converting text to speech using specific voice profiles.</li>\n<li><strong>Visuals:</strong> Generating thumbnails or accompanying images.</li>\n</ol>\n<p>Doing this linearly is slow. Doing it without structure is error-prone. I needed a system that could handle sequential logic for writing and parallel execution for asset generation.</p>\n<h2 id\"the-solution-the-vizra-workflow\">The Solution: The Vizra Workflow</h2>\n<p>I utilized the <code>Workflow</code> facade provided by Vizra ADK to compose a pipeline that mixes sequential and parallel execution patterns.</p>\n<h3 id\"1-the-architect-sequential-planning\">1. The Architect: Sequential Planning</h3>\n<p>Everything starts with a script. I used a <strong>Sequential Workflow</strong> to ensure I had a solid foundation before generating expensive assets.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Facades\\Workflow</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Agents\\Content\\ResearcherAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Agents\\Content\\ScriptWriterAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> generateContent</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">string</span><span style\"color:#E1E4E8\"> $topic)</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Step 1: Research and Write</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $scriptData </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Workflow</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">sequential</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">then</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">ResearcherAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">) </span><span style\"color:#6A737D\">// Uses Meilisearch Vector Store</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">then</span><span style\"color:#E1E4E8\">(</span><span style\"color:#79B8FF\">ScriptWriterAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">) </span><span style\"color:#6A737D\">// Uses Gemini Pro for reasoning</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">run</span><span style\"color:#E1E4E8\">($topic);</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#6A737D\"> // ... pass to next stage</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<p>In this stage, the <code>ResearcherAgent</code> uses the <code>VectorMemoryTool</code> (backed by Meilisearch) to pull relevant context. The <code>ScriptWriterAgent</code> then formats this into a JSON structure containing a title, body, and a prompt for the image generator.</p>\n<h3 id\"2-the-factory-parallel-asset-generation\">2. The Factory: Parallel Asset Generation</h3>\n<p>Once I had the script, I didn’t want to wait for the audio to finish before starting the image generation. Vizra’s <strong>Parallel Workflow</strong> allowed me to spin up multiple agents simultaneously.</p>\n<p>I passed the output from the sequential step into a parallel block.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#6A737D\"> // ... inside generateContent</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> $assets </span><span style\"color:#F97583\"></span><span style\"color:#79B8FF\"> Workflow</span><span style\"color:#F97583\">::</span><span style\"color:#B392F0\">parallel</span><span style\"color:#E1E4E8\">()</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">agents</span><span style\"color:#E1E4E8\">(</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'audio'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> VoiceOverAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'visual'</span><span style\"color:#F97583\"> ></span><span style\"color:#79B8FF\"> ThumbnailGeneratorAgent</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> )</span></span>\n<span class\"line\"><span style\"color:#F97583\"> -></span><span style\"color:#B392F0\">run</span><span style\"color:#E1E4E8\">($scriptData</span><span style\"color:#9ECBFF\">'final_script'</span><span style\"color:#E1E4E8\">);</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'script'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $scriptData,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'audio_path'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $assets</span><span style\"color:#9ECBFF\">'audio'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'image_url'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> $assets</span><span style\"color:#9ECBFF\">'visual'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h3 id\"3-the-agents--tools\">3. The Agents & Tools</h3>\n<p>The magic happens inside the specialized agents. Here is how I configured them using the Vizra ADK structure.</p>\n<h4 id\"the-voice-over-agent-elevenlabs\">The Voice Over Agent (ElevenLabs)</h4>\n<p>This agent is responsible for taking text and returning a path to an MP3 file. It utilizes a custom tool I built to interface with the ElevenLabs API.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">namespace</span><span style\"color:#B392F0\"> App\\Agents\\Content</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Agents\\BaseLlmAgent</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> App\\Tools\\Audio\\ElevenLabsTtsTool</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> VoiceOverAgent</span><span style\"color:#F97583\"> extends</span><span style\"color:#B392F0\"> BaseLlmAgent</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $name </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'voice_over_specialist'</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $model </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> 'gpt-4o-mini'</span><span style\"color:#E1E4E8\">; </span><span style\"color:#6A737D\">// Fast, low cost for tool calling</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> string</span><span style\"color:#E1E4E8\"> $instructions </span><span style\"color:#F97583\"></span><span style\"color:#9ECBFF\"> <<<'</span><span style\"color:#F97583\">INSTRUCTIONS</span><span style\"color:#9ECBFF\">'</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> You are an audio engineer.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 1. Receive the script text.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 2. Select the appropriate voice ID based on the content tone.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 3. Use the 'text_to_speech' tool to generate the audio.</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 4. Return the file path provided by the tool.</span></span>\n<span class\"line\"><span style\"color:#F97583\"> INSTRUCTIONS</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> protected</span><span style\"color:#F97583\"> array</span><span style\"color:#E1E4E8\"> $tools </span><span style\"color:#F97583\"></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#79B8FF\"> ElevenLabsTtsTool</span><span style\"color:#F97583\">::class</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h4 id\"the-tool-implementation\">The Tool Implementation</h4>\n<p>The <code>ElevenLabsTtsTool</code> handles the actual API call, keeping my agent logic clean.</p>\n<pre class\"astro-code github-dark\" style\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex\"0\" data-language\"php\"><code><span class\"line\"><span style\"color:#F97583\">namespace</span><span style\"color:#B392F0\"> App\\Tools\\Audio</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Vizra\\VizraADK\\Contracts\\ToolInterface</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"><span style\"color:#F97583\">use</span><span style\"color:#79B8FF\"> Illuminate\\Support\\Facades\\Http</span><span style\"color:#E1E4E8\">;</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\">class</span><span style\"color:#B392F0\"> ElevenLabsTtsTool</span><span style\"color:#F97583\"> implements</span><span style\"color:#B392F0\"> ToolInterface</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">{</span></span>\n<span class\"line\"><span style\"color:#F97583\"> public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> definition</span><span style\"color:#E1E4E8\">()</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> array</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#F97583\"> return</span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'name'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'text_to_speech'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'description'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'Converts text to audio using ElevenLabs'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'parameters'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'object'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'properties'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'text'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'string'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'voice_id'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'type'</span><span style\"color:#F97583\"> ></span><span style\"color:#9ECBFF\"> 'string'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#9ECBFF\"> 'required'</span><span style\"color:#F97583\"> ></span><span style\"color:#E1E4E8\"> </span><span style\"color:#9ECBFF\">'text'</span><span style\"color:#E1E4E8\">,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ,</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> ;</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"></span>\n<span class\"line\"><span style\"color:#F97583\"> public</span><span style\"color:#F97583\"> function</span><span style\"color:#B392F0\"> execute</span><span style\"color:#E1E4E8\">(</span><span style\"color:#F97583\">array</span><span style\"color:#E1E4E8\"> $arguments, $context, $memory)</span><span style\"color:#F97583\">:</span><span style\"color:#F97583\"> string</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> {</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Implementation calling ElevenLabs API...</span></span>\n<span class\"line\"><span style\"color:#6A737D\"> // Returns JSON with { \"status\": \"success\", \"path\": \"...\" }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\"> }</span></span>\n<span class\"line\"><span style\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id\"why-this-approach-wins\">Why This Approach Wins</h2>\n<ol>\n<li><strong>Modularity:</strong> If I want to switch from ElevenLabs to OpenAI TTS, I just swap the tool in the <code>VoiceOverAgent</code>. The workflow remains untouched.</li>\n<li><strong>Speed:</strong> By parallelizing the asset generation, I cut the total processing time by nearly 50%.</li>\n<li><strong>Observability:</strong> Vizra’s built-in tracing allows me to see exactly what the <code>ResearcherAgent</code> found in Meilisearch and why the <code>ScriptWriterAgent</code> made specific creative decisions.</li>\n<li><strong>Maintainability:</strong> Each agent has a single responsibility. The <code>ResearcherAgent</code> doesn’t know about audio files, and the <code>VoiceOverAgent</code> doesn’t care about SEO keywords.</li>\n</ol>\n<h2 id\"conclusion\">Conclusion</h2>\n<p>Building complex AI features isn’t just about prompt engineering; it’s about architecture. By treating LLMs as specialized workers within a Vizra Workflow, I’ve turned a complex, multi-modal generation process into a reliable, maintainable pipeline.</p>","metadata":0,{"headings":1,0,{"depth":0,1,"slug":0,"orchestrating-multimedia-magic-how-i-built-content-generation-with-vizra-adk-workflows","text":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows"},0,{"depth":0,2,"slug":0,"the-challenge-coordination-vs-chaos","text":0,"The Challenge: Coordination vs. Chaos"},0,{"depth":0,2,"slug":0,"the-solution-the-vizra-workflow","text":0,"The Solution: The Vizra Workflow"},0,{"depth":0,3,"slug":0,"1-the-architect-sequential-planning","text":0,"1. The Architect: Sequential Planning"},0,{"depth":0,3,"slug":0,"2-the-factory-parallel-asset-generation","text":0,"2. The Factory: Parallel Asset Generation"},0,{"depth":0,3,"slug":0,"3-the-agents--tools","text":0,"3. The Agents & Tools"},0,{"depth":0,4,"slug":0,"the-voice-over-agent-elevenlabs","text":0,"The Voice Over Agent (ElevenLabs)"},0,{"depth":0,4,"slug":0,"the-tool-implementation","text":0,"The Tool Implementation"},0,{"depth":0,2,"slug":0,"why-this-approach-wins","text":0,"Why This Approach Wins"},0,{"depth":0,2,"slug":0,"conclusion","text":0,"Conclusion"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows","description":0,"A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals.","pubDate":3,"2024-12-19T00:00:00.000Z","tags":1,0,"ai",0,"workflows",0,"multimedia",0,"php",0,"vizra",0,"llm",0,"orchestration",0,"content-generation","category":0,"Engineering","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"orchestrating-multimedia-magic-vizra-adk-workflows","render":0,null},"readingTime":0,1},0,{"post":0,{"id":0,"welcome-to-my-blog.md","data":0,{"title":0,"Welcome to My Blog","description":0,"A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology.","pubDate":3,"2024-01-15T00:00:00.000Z","tags":1,0,"blogging",0,"introduction","category":0,"General","draft":0,false},"body":0,"Welcome to my blog! This is where I'll be sharing my thoughts and experiences on software engineering, team leadership, technology trends, and more.\n\n## What to Expect\n\nI plan to write about:\n\n- **Engineering Practices**: Best practices, code quality, architecture decisions\n- **Leadership**: Team management, mentoring, building great engineering cultures\n- **Technology**: Exploring new tools, frameworks, and methodologies\n- **Career Growth**: Lessons learned, challenges overcome, continuous improvement\n\n## Why I'm Writing\n\nSharing knowledge and experiences helps the community grow, and writing helps clarify my own thinking. I hope you find value in these posts!\n\nStay tuned for more content, and feel free to reach out if you'd like to discuss any topics.","filePath":0,"src/content/blog/welcome-to-my-blog.md","digest":0,"ffdbd35717378194","rendered":0,{"html":0,"<p>Welcome to my blog! This is where I’ll be sharing my thoughts and experiences on software engineering, team leadership, technology trends, and more.</p>\n<h2 id\"what-to-expect\">What to Expect</h2>\n<p>I plan to write about:</p>\n<ul>\n<li><strong>Engineering Practices</strong>: Best practices, code quality, architecture decisions</li>\n<li><strong>Leadership</strong>: Team management, mentoring, building great engineering cultures</li>\n<li><strong>Technology</strong>: Exploring new tools, frameworks, and methodologies</li>\n<li><strong>Career Growth</strong>: Lessons learned, challenges overcome, continuous improvement</li>\n</ul>\n<h2 id\"why-im-writing\">Why I’m Writing</h2>\n<p>Sharing knowledge and experiences helps the community grow, and writing helps clarify my own thinking. I hope you find value in these posts!</p>\n<p>Stay tuned for more content, and feel free to reach out if you’d like to discuss any topics.</p>","metadata":0,{"headings":1,0,{"depth":0,2,"slug":0,"what-to-expect","text":0,"What to Expect"},0,{"depth":0,2,"slug":0,"why-im-writing","text":0,"Why I’m Writing"},"localImagePaths":1,,"remoteImagePaths":1,,"frontmatter":0,{"title":0,"Welcome to My Blog","description":0,"A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology.","pubDate":3,"2024-01-15T00:00:00.000Z","tags":1,0,"blogging",0,"introduction","category":0,"General","draft":0,false},"imagePaths":1,}},"collection":0,"blog","slug":0,"welcome-to-my-blog","render":0,null},"readingTime":0,1}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1h3570>link href/og/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.svg relpreload asimage />link href/og/orchestrating-multimedia-magic-vizra-adk-workflows.svg relpreload asimage />link href/og/welcome-to-my-blog.svg relpreload asimage />div classflex flex-col h-full w-full>div classitems-center flex border-white/5 border-b md:p-6 p-5 justify-between styleopacity:0;transform:translateY(-10px)>div classitems-center flex gap-3>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-book-open fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM12 7v14>/path>path dM3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z>/path>/svg>/div>div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Latest Posts/h2>p classtext-starlight-dim/70 text-xs md:text-sm mt-1>Thoughts on engineering, leadership, and technology. I share patterns that help teams scale, lessons from building commerce platforms, and practical approaches to architecture, operations, and delivery./p>/div>/div>a classitems-center flex gap-1.5 hover:text-accent-teal md:text-sm text-starlight-dim text-xs transition-colors href/blog tabindex0>View Allsvg classlucide h-3.5 w-3.5 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/a>/div>div classflex-1 overflow-y-auto md:p-6 p-5 space-y-4>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altFrom Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/ai-powered-audio-mixing-engine-ffmpeg-intelligent-agents.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>From Silence to Symphony: How We Built an AI-Powered Audio Mixing Engine with FFmpeg 8 and Intelligent Agents/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2025-01-19T00:00:00.000Z>Jan 19, 2025/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>How we combined cutting-edge AI models, vector memory systems, and professional audio engineering to create meditation mantras that learn and improve with every mix./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>ai/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>audio-engineering/span>span classpx-2 py-1 text-xs text-starlight-dim/60>+8/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/orchestrating-multimedia-magic-vizra-adk-workflows>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altOrchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/orchestrating-multimedia-magic-vizra-adk-workflows.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>Orchestrating Multimedia Magic: How I Built Content Generation with Vizra ADK Workflows/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2024-12-19T00:00:00.000Z>Dec 19, 2024/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>A deep dive into leveraging Vizra's workflow patterns to transform a simple topic into a full multimedia package combining text, audio, and visuals./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>ai/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>workflows/span>span classpx-2 py-1 text-xs text-starlight-dim/60>+6/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>article classgroup styleopacity:0;transform:translateY(20px)>a classborder transition-all rounded-xl p-4 bg-surface-light/40 border-white/5 hover:border-accent-indigo/30 block duration-300 hover:bg-surface-light/60 href/blog/welcome-to-my-blog>div classspace-y-3>div classflex gap-3 items-start>div classflex-shrink-0 rounded-lg bg-surface-light h-16 md:h-20 md:w-20 overflow-hidden w-16>img altWelcome to My Blog blog post thumbnail classw-full h-full object-cover duration-300 group-hover:scale-105 transition-transform height80 loadingeager src/og/welcome-to-my-blog.svg width80 decodingasync />/div>div classmin-w-0 flex-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal line-clamp-2 mb-2>Welcome to My Blog/h3>div classitems-center flex gap-2 text-xs text-starlight-dim/70>svg classlucide flex-shrink-0 lucide-calendar h-3 w-3 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>time dateTime2024-01-15T00:00:00.000Z>Jan 15, 2024/time>span>•/span>span>1 min read/span>/div>/div>/div>p classtext-starlight-dim/80 text-sm line-clamp-2>A brief introduction to this blog where I'll share thoughts on engineering, leadership, and technology./p>div classitems-center flex border-white/5 justify-between border-t pt-2>div classflex gap-1.5 flex-wrap>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>blogging/span>span classborder px-2 bg-accent-indigo/15 border-accent-indigo/30 py-1 rounded-md text-accent-indigo text-xs>introduction/span>/div>span classitems-center flex text-xs font-medium transition-all gap-1 group-hover:gap-2 text-accent-teal>Read moresvg classlucide h-3 w-3 lucide-arrow-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM5 12h14>/path>path dm12 5 7 7-7 7>/path>/svg>/span>/div>/div>/a>/article>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-2 md:col-span-4 order-9>div classw-full relative overflow-hidden h-full md:p-8 p-6>div classabsolute pointer-events-none bg-gradient-to-br from-accent-indigo/10 inset-0 to-accent-teal/10 via-transparent aria-hiddentrue>/div>div classrounded-full absolute blur-3xl pointer-events-none -right-24 -top-24 bg-accent-indigo/10 h-56 w-56 aria-hiddentrue>/div>div classrounded-full absolute blur-3xl pointer-events-none h-64 w-64 -bottom-28 -left-20 bg-accent-teal/10 aria-hiddentrue>/div>div classflex flex-col h-full w-full relative gap-5 z-10>div classitems-center flex justify-between>div>p classtracking-0.3em text-starlight-dim/60 text-xs uppercase>In the zone/p>h2 classmd:text-2xl font-semibold text-starlight text-xl>Working snapshots/h2>/div>span classfont-mono text-xs text-starlight-dim/50>Monitoring · Building · Leading/span>/div>div classrelative flex-1 min-h-280px>div classborder border-white/10 absolute bg-surface/30 inset-0 rounded-28px>/div>div classrelative h-full gap-4 grid grid-cols-1 md:grid-cols-12>figure classborder border-white/10 bg-surface/40 md:col-span-8 overflow-hidden rounded-26px shadow-2xl>img altMiguel working at a multi-monitor setup classw-full h-full object-cover object-center height1536 loadinglazy src/_astro/miguel-working-1.CehBMx2T_1UxIPl.webp width2752 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 70vw, 1600px srcset/_astro/miguel-working-1.CehBMx2T_1hEXnt.webp 900w, /_astro/miguel-working-1.CehBMx2T_1wMag8.webp 1200w, /_astro/miguel-working-1.CehBMx2T_WpYH4.webp 1600w, /_astro/miguel-working-1.CehBMx2T_ZnjMFp.webp 2000w>div classabsolute pointer-events-none inset-0 via-transparent bg-gradient-to-t from-void/35 to-transparent>/div>/figure>div classflex flex-col gap-4 md:col-span-4>figure classborder overflow-hidden bg-surface/60 border-white/15 rounded-2xl shadow-xl>img altMiguel reflecting at the workstation classw-full h-full object-cover object-center height2400 loadinglazy src/_astro/miguel-working-2.C4cEyctP_74eQc.webp width1792 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 30vw, 720px srcset/_astro/miguel-working-2.C4cEyctP_1RfVsY.webp 320w, /_astro/miguel-working-2.C4cEyctP_2qowqO.webp 420w, /_astro/miguel-working-2.C4cEyctP_1YvA3F.webp 640w, /_astro/miguel-working-2.C4cEyctP_I1WgK.webp 900w>/figure>figure classborder overflow-hidden bg-surface/60 border-white/15 rounded-2xl shadow-xl>img altMiguel coding with dashboards in view classw-full h-full object-cover object-center height3024 loadinglazy src/_astro/miguel-working-3.CE7MPS4y_13NBrs.webp width4032 decodingasync fetchpriorityauto sizes(max-width: 768px) 100vw, (max-width: 1280px) 30vw, 720px srcset/_astro/miguel-working-3.CE7MPS4y_GBfNx.webp 320w, /_astro/miguel-working-3.CE7MPS4y_ZNtC5n.webp 420w, /_astro/miguel-working-3.CE7MPS4y_Z1lfnbW.webp 640w, /_astro/miguel-working-3.CE7MPS4y_1y7UzV.webp 900w>/figure>/div>/div>/div>/div>/div>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-1 p-8 order-5>astro-island await-children clientvisible component-exportdefault component-url/_astro/ConnectCard.HGnmduK7.js opts{"name":"ConnectCard","value":true} prefixr11 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZzXynD>div classflex flex-col h-full w-full styleopacity:0;transform:translateY(20px)>div classitems-center flex gap-3 mb-6 styleopacity:0;transform:translateX(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-trending-up fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 7h6v6>/path>path dm22 7-8.5 8.5-5-5L2 17>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Highlights/h2>/div>div classmb-6 gap-3 grid grid-cols-2 md:gap-4 styleopacity:0>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-indigo lucide-trending-up fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 7h6v6>/path>path dm22 7-8.5 8.5-5-5L2 17>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Years Experience/span>/div>p classfont-mono font-bold md:text-3xl text-2xl text-accent-indigo>15+/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-teal lucide-users fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2>/path>path dM16 3.128a4 4 0 0 1 0 7.744>/path>path dM22 21v-2a4 4 0 0 0-3-3.87>/path>circle cx9 cy7 r4>/circle>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Teams Led/span>/div>p classtext-accent-teal font-bold font-mono md:text-3xl text-2xl>10+/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-indigo lucide-rocket fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z>/path>path dm12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z>/path>path dM9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0>/path>path dM12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Startups Founded/span>/div>p classfont-mono font-bold md:text-3xl text-2xl text-accent-indigo>2/p>/div>div classborder transition-all rounded-xl border-white/10 bg-surface-light/60 hover:border-white/20 md:p-5 p-4 styleopacity:0;transform:scale(.9)>div classitems-center flex gap-2 mb-2>svg classlucide h-4 w-4 md:h-5 md:w-5 text-accent-teal lucide-globe fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>span classtext-starlight-dim/70 text-xs md:text-sm font-medium>Countries Worked/span>/div>p classtext-accent-teal font-bold font-mono md:text-3xl text-2xl>6/p>/div>/div>div classspace-y-3 styleopacity:0>div classflex gap-3 border-white/5 bg-surface-light/40 border hover:border-accent-indigo/30 items-start p-4 rounded-xl transition-all styleopacity:0;transform:translateX(-10px)>div classflex-shrink-0 mt-0.5 text-accent-indigo>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-award fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm15.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 cx12 cy8 r6>/circle>/svg>/div>div classmin-w-0 flex-1>h3 classtext-sm md:text-base font-semibold text-starlight mb-1>CTO & Co-Founder/h3>p classtext-starlight-dim/80 leading-relaxed md:text-sm text-xs>Led technology for multiple startups from seed to scale/p>/div>/div>div classflex gap-3 border-white/5 bg-surface-light/40 border hover:border-accent-indigo/30 items-start p-4 rounded-xl transition-all styleopacity:0;transform:translateX(-10px)>div classflex-shrink-0 mt-0.5 text-accent-teal>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-code fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm16 18 6-6-6-6>/path>path dm8 6-6 6 6 6>/path>/svg>/div>div classmin-w-0 flex-1>h3 classtext-sm md:text-base font-semibold text-starlight mb-1>Platform Architect/h3>p classtext-starlight-dim/80 leading-relaxed md:text-sm text-xs>Scaled systems handling millions of users globally/p>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:col-span-2 md:row-span-3 order-6>astro-island await-children clientvisible component-exportdefault component-url/_astro/ExperienceCard.BqPl_HdT.js opts{"name":"ExperienceCard","value":true} prefixr12 props{"experiences":1,0,{"id":0,"of-them-all","company":0,"Of Them All","role":0,"Chief Technology Officer","location":0,"Remote","type":0,"Remote","startDate":0,"Aug 2025","endDate":0,"Present","duration":0,"Ongoing","description":0,"Currently leading the technology strategy for an early-stage startup. Responsible for architecting the platform, driving technical decision-making, and defining the roadmap. Actively involved in fundraising efforts and establishing rigorous reporting standards for internal stakeholders and investors.","skills":1,0,"Technology Strategy",0,"System Architecture",0,"Startup",0,"Fundraising",0,"Roadmap Planning",0,"Technical Leadership",0,"Stakeholder Management",0,"Platform Engineering","websiteUrl":0,"https://of-them-all.com","logoImage":0,{"src":0,"/_astro/of-them-all.Cgxdvp5y_ZkHGsW.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"mir-insight","company":0,"MIR Insight","role":0,"Engineering Team Lead","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Jan 2025","endDate":0,"Aug 2025","duration":0,"8 months","description":0,"Served as Engineering Team Lead for the Platform team, driving the modernization of the company's Machine Learning infrastructure. Successfully delivered full containerization for all ML pipelines to improve scalability. Concurrently restructured the development workflow by implementing Agile methodologies to enhance team efficiency and delivery speed.","skills":1,0,"Machine Learning",0,"Containerization",0,"Docker",0,"Kubernetes",0,"ML Pipelines",0,"Agile",0,"Team Leadership",0,"Platform Engineering","linkedinUrl":0,"https://www.linkedin.com/company/mir-insight","logoImage":0,{"src":0,"/_astro/mir-insight.CJVmAcwT_2fwnDK.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"new-work","company":0,"NEW WORK SE","role":0,"Software Engineering Team Lead","location":0,"Porto, Portugal","type":0,"Hybrid","startDate":0,"Jun 2019","endDate":0,"May 2023","duration":0,"3 yrs 11 months","description":0,"Led software development teams following Agile methodology. Implemented daily stand-ups, refinements, retrospectives, and reviews. Coordinated multiple teams, led through major transformation phases, coached and mentored team members, and handled mobile native (iOS, Android) recruiting. Instrumental in delivering high-quality products on time while supporting team members through professional growth.","skills":1,0,"Microservices",0,"Ruby on Rails",0,"AWS",0,"Agile",0,"Scrum",0,"Team Leadership",0,"Mobile Development","linkedinUrl":0,"https://www.linkedin.com/company/new-work-se","logoImage":0,{"src":0,"/_astro/new-work.UX53qe8e_ZqXDQT.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"imotorbike","company":0,"iMotorbike","role":0,"Co-Founder & CTO","location":0,"Kuala Lumpur, Malaysia","type":0,"On-site","startDate":0,"Jul 2017","endDate":0,"May 2019","duration":0,"1 yr 11 months","description":0,"Co-founded and launched leading online platform for motorcycles, parts, and accessories in Asia. Responsible for technical vision and execution, collaborating with CEO and UI/UX leader on product strategy. Scaled platform to handle millions of users. Secured ~$300K seed funding plus $100K from AWS Startups fund.","skills":1,0,"Laravel",0,"PHP",0,"Redis",0,"AWS",0,"E-commerce",0,"Team Leadership",0,"Startup","linkedinUrl":0,"https://www.linkedin.com/company/imotorbike/","logoImage":0,{"src":0,"/_astro/imotorbike._F9Kn7Nt_bJwoW.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"bamilo","company":0,"Bamilo","role":0,"Chief Technology Officer","location":0,"Tehran, Iran","type":0,"On-site","startDate":0,"Oct 2016","endDate":0,"Jun 2017","duration":0,"9 months","description":0,"Led technical direction for Iran's largest e-commerce/marketplace platform. Reported to CEO, worked with senior management to streamline processes and create state-of-the-art products. Oversaw QA, development (frontend, platform, logistics, mobile), system administration, and help desk teams. Achieved horizontal scalability and automated deployment. Set up 24/7 support teams for uninterrupted service. Identified cloud infrastructure cost-saving opportunities and replaced costly proprietary tools with efficient open-source alternatives. Enhanced financial transparency, contributing to departmental sustainability.","skills":1,0,"Yii",0,"Zend Framework",0,"E-commerce",0,"Agile",0,"Scrum",0,"Incident Management",0,"Team Leadership",0,"Cost Optimization",0,"Open Source",0,"Infrastructure Management","linkedinUrl":0,"https://www.linkedin.com/company/4829579","logoImage":0,{"src":0,"/_astro/bamilo.B8EYu71J_1zDoyJ.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-manager","company":0,"Lazada Group","role":0,"Software Engineering Manager","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Sep 2014","endDate":0,"Aug 2016","duration":0,"2 years","description":0,"Led multiple software development teams focused on online payments and checkout for the regional platform. Acted as a crucial bridge between development and product teams, ensuring clear requirements translation into technical specifications. Facilitated technical integration of payment platform with Alipay (Ant Financials) during the Alibaba Group acquisition, showcasing expertise in integration. Spearheaded PCI-DSS compliance process, ensuring regulatory adherence. Responsible for appraisals, hiring, and coaching. Orchestrated seamless coordination among various departments and teams, promoting effective collaboration.","skills":1,0,"Microservices",0,"Yii",0,"Payment Gateways",0,"E-commerce",0,"MySQL",0,"Team Leadership",0,"Incident Management",0,"PCI-DSS",0,"Integration","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-lead","company":0,"Lazada Group","role":0,"Software Engineering Team Lead","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"May 2014","endDate":0,"Sep 2014","duration":0,"5 months","description":0,"Led software development teams creating and enhancing online payments and checkout solutions for the regional platform. Acted as a pivotal bridge between development and product teams, ensuring precise translation of requirements into technical specifications. Orchestrated seamless coordination among various departments and teams, promoting effective collaboration. Oversaw end-to-end integrations, meticulously managing each phase to ensure flawless implementation. Instrumental in spearheading and ensuring the successful compliance process with PCI-DSS, showcasing proficiency in regulatory adherence. Demonstrated adept leadership by overseeing appraisals, talent acquisition, and coaching, fostering talent growth within the team.","skills":1,0,"OOP",0,"Yii",0,"Zend Framework",0,"E-commerce",0,"Payment Gateways",0,"Agile",0,"Scrum",0,"Kanban",0,"PCI-DSS","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"lazada-senior","company":0,"Lazada Group","role":0,"Senior Software Engineer","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Sep 2013","endDate":0,"May 2014","duration":0,"9 months","description":0,"Embarked on an initial 3-month journey to Vietnam, seizing the opportunity to help Lazada elevate its success and innovation in the realm of online commerce. Executed numerous intricate integrations in the domains of online payments, checkout, and discount systems, pivotal facets of online commerce. Demonstrated a high level of technical proficiency, creativity, and problem-solving acumen in tackling complex projects. Consistently delivered solutions that not only met but surpassed client and stakeholder expectations, ensuring the security, reliability, and user-friendliness of products and services. Assumed a leadership role in Vietnam, mentoring a talented and motivated team of professionals, eager to absorb insights and knowledge. Effectively transferred best practices and invaluable lessons learned from prior experiences in Portugal, empowering the new team in Vietnam to tackle challenges and seize opportunities with confidence.","skills":1,0,"PHP",0,"Yii",0,"Zend Framework",0,"Redis",0,"MySQL",0,"Memcached",0,"Payment Gateways",0,"E-commerce","linkedinUrl":0,"https://www.linkedin.com/company/2725478/","logoImage":0,{"src":0,"/_astro/lazada.dA6DKcEE_ZpyV4p.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"rocket-internet","company":0,"Rocket Internet SE","role":0,"Software Engineer","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Apr 2012","endDate":0,"Aug 2013","duration":0,"1 year 5 months","description":0,"Worked on integration and maintenance of online checkout and payment systems. Played key role in core development of mobile API adopted by hundreds of startups worldwide.","skills":1,0,"OOP",0,"Zend Framework",0,"E-commerce",0,"APIs",0,"Payment Gateways",0,"MySQL",0,"Memcached",0,"Kanban","linkedinUrl":0,"https://www.linkedin.com/company/1298456/","logoImage":0,{"src":0,"/_astro/rocket-internet.CgMZle11_ZQ735M.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"saigon-soul","company":0,"Saigon Soul Pool Party","role":0,"Co-Founder, Musical Director","location":0,"Ho Chi Minh City, Vietnam","type":0,"On-site","startDate":0,"Jan 2014","endDate":0,"Jul 2016","duration":0,"2 yrs 7 months","description":0,"Established a flagship weekly event in Saigon City, held at the prestigious New World Hotel in Saigon (Ho Chi Minh City) during the dry season. Ranked 2nd among Saigon's top places to visit, a testament to our commitment to excellence and innovation. Achieved remarkable growth, transforming our event into one of the city's iconic electronic music gatherings. Meticulously selected and managed artists, upholding our high standards of professionalism and musicality. Spearheaded our online marketing strategy, encompassing website management, social media, and email campaigns. Designed and developed essential web applications, including an online ticketing system and live streaming service.","skills":1,0,"Entrepreneurship",0,"Event Management",0,"Marketing",0,"Web Development",0,"Social Media",0,"Project Management","logoImage":0,{"src":0,"/_astro/saigon-soul.DjehXvIA_1uSSOG.webp","width":0,96,"height":0,96,"srcSet":0,"sizes":0}},0,{"id":0,"pcw","company":0,"PCW","role":0,"Web Programmer","location":0,"Porto, Portugal","type":0,"On-site","startDate":0,"Jan 2007","endDate":0,"Apr 2009","duration":0,"2 yrs 4 months","description":0,"As a young and ambitious web developer, designed bespoke and dynamic websites that catalyzed digital success for numerous small and medium-sized enterprises. Employed cutting-edge web development technologies and methodologies to craft intuitive, scalable, and user-friendly websites, enhancing the online experiences of diverse user bases. Committed to excellence, garnered a reputation for consistently delivering websites of superior quality, seamlessly blending visual appeal with technical proficiency. Empowered clients to maintain a competitive edge in the swiftly evolving digital landscape through the creation of visually stunning and technically robust websites.","skills":1,0,"Web Development",0,"PHP",0,"HTML",0,"CSS",0,"JavaScript",0,"Client Relations"}} renderer-url/_astro/client.9unXo8s5.js ssr uid1EX8Ox>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-indigo lucide-briefcase fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16>/path>rect height14 width20 x2 y6 rx2>/rect>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Experience/h2>span classborder border-white/5 px-2.5 py-1 rounded-lg bg-surface-light/50 font-mono md:text-sm ml-auto text-starlight-dim/60 text-xs>11 roles/span>/div>div classrelative flex-1 md:pl-14 overflow-y-auto pl-12>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Chief Technology Officer/h3>/div>div classitems-center flex gap-3>img altOf Them All company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/of-them-all.Cgxdvp5y_ZkHGsW.webp width96 decodingasync />div classitems-center flex gap-2>a classitems-center inline-flex font-semibold md:text-base text-sm gap-1.5 hover:text-accent-indigo text-accent-teal transition-colors hrefhttps://of-them-all.com relnoopener noreferrer target_blank tabindex0>Of Them Allsvg classlucide h-3.5 w-3.5 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Remote/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Aug 2025 - Present/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>Remote/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/mir-insight relnoopener noreferrer target_blank tabindex0 aria-labelOpen MIR Insight on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altMIR Insight company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/mir-insight.CJVmAcwT_2fwnDK.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>MIR Insight/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2025 - Aug 2025/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/new-work-se relnoopener noreferrer target_blank tabindex0 aria-labelOpen NEW WORK SE on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altNEW WORK SE company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/new-work.UX53qe8e_ZqXDQT.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>NEW WORK SE/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jun 2019 - May 2023/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>Hybrid/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Co-Founder & CTO/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/imotorbike/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen iMotorbike on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altiMotorbike company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/imotorbike._F9Kn7Nt_bJwoW.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>iMotorbike/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Kuala Lumpur, Malaysia/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jul 2017 - May 2019/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Chief Technology Officer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/4829579 relnoopener noreferrer target_blank tabindex0 aria-labelOpen Bamilo on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altBamilo company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/bamilo.B8EYu71J_1zDoyJ.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Bamilo/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Tehran, Iran/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Oct 2016 - Jun 2017/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Manager/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Sep 2014 - Aug 2016/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineering Team Lead/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>May 2014 - Sep 2014/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Senior Software Engineer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/2725478/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Lazada Group on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altLazada Group company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/lazada.dA6DKcEE_ZpyV4p.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Lazada Group/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Sep 2013 - May 2014/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Software Engineer/h3>a classflex-shrink-0 text-starlight-dim transition-colors hover:text-accent-teal hrefhttps://www.linkedin.com/company/1298456/ relnoopener noreferrer target_blank tabindex0 aria-labelOpen Rocket Internet SE on LinkedIn>svg classlucide h-4 w-4 lucide-external-link fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/a>/div>div classitems-center flex gap-3>img altRocket Internet SE company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/rocket-internet.CgMZle11_ZQ735M.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Rocket Internet SE/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Apr 2012 - Aug 2013/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Co-Founder, Musical Director/h3>/div>div classitems-center flex gap-3>img altSaigon Soul Pool Party company logo classflex-shrink-0 rounded-lg bg-white/5 h-10 md:h-12 md:w-12 object-contain p-1 w-10 height96 loadinglazy src/_astro/saigon-soul.DjehXvIA_1uSSOG.webp width96 decodingasync />div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>Saigon Soul Pool Party/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Ho Chi Minh City, Vietnam/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2014 - Jul 2016/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>div classborder-white/5 border-b last:border-b-0 styleopacity:0;transform:translateY(20px)>button classw-full relative z-10 group hover:bg-white/5 md:pr-6 md:py-6 pr-5 py-5 text-left transition-all>div classflex justify-between gap-4 items-start md:gap-6>div classmin-w-0 flex-1 space-y-3>div classitems-center flex gap-2.5 mb-1>h3 classtransition-colors font-semibold md:text-lg text-base text-starlight group-hover:text-accent-teal>Web Programmer/h3>/div>div classitems-center flex gap-3>div classitems-center flex gap-2>p classtext-accent-teal font-semibold md:text-base text-sm>PCW/p>/div>/div>div classitems-center flex text-xs md:text-sm text-starlight-dim flex-wrap gap-x-4 gap-y-2>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-map-pin fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0>/path>circle cx12 cy10 r3>/circle>/svg>Porto, Portugal/span>span classitems-center flex gap-1.5>svg classlucide h-3.5 w-3.5 flex-shrink-0 lucide-calendar fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM8 2v4>/path>path dM16 2v4>/path>rect height18 width18 x3 y4 rx2>/rect>path dM3 10h18>/path>/svg>Jan 2007 - Apr 2009/span>span classborder font-medium rounded-lg bg-surface-light/80 border-white/5 px-2.5 py-1 text-starlight-dim/90>On-site/span>/div>/div>div classflex-shrink-0 text-starlight-dim transition-colors group-hover:text-accent-indigo>svg classlucide h-5 md:h-6 md:w-6 w-5 lucide-chevron-down fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm6 9 6 6 6-6>/path>/svg>/div>/div>/button>/div>/div>div classabsolute pointer-events-none to-transparent bg-gradient-to-b bottom-0 from-accent-indigo/40 left-6 md:left-8 top-20 via-accent-teal/25 w-0.5 z-0 styletransform:scaleY(0)>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-3 md:col-span-1 order-7>astro-island await-children clientvisible component-exportdefault component-url/_astro/TechStackCard.DeNKaFcD.js opts{"name":"TechStackCard","value":true} prefixr13 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1SF6Dm>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-code-xml fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm18 16 4-4-4-4>/path>path dm6 8-4 4 4 4>/path>path dm14.5 4-5 16>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Tech Stack/h2>/div>div classflex-1 overflow-y-auto md:py-8 md:space-y-8 py-6 space-y-6>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Backend/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#777BB4 styleopacity:0;transform:scale(.8)>PHP/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF2D20 styleopacity:0;transform:scale(.8)>Laravel/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00AFF0 styleopacity:0;transform:scale(.8)>Yii/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#68B604 styleopacity:0;transform:scale(.8)>Zend Framework/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#CC0000 styleopacity:0;transform:scale(.8)>Ruby on Rails/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#339933 styleopacity:0;transform:scale(.8)>Node.js/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#777BB4 styleopacity:0;transform:scale(.8)>PHP/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF2D20 styleopacity:0;transform:scale(.8)>Laravel/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00AFF0 styleopacity:0;transform:scale(.8)>Yii/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#68B604 styleopacity:0;transform:scale(.8)>Zend Framework/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#CC0000 styleopacity:0;transform:scale(.8)>Ruby on Rails/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#339933 styleopacity:0;transform:scale(.8)>Node.js/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Frontend/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#61DAFB styleopacity:0;transform:scale(.8)>React/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#3178C6 styleopacity:0;transform:scale(.8)>TypeScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F7DF1E styleopacity:0;transform:scale(.8)>JavaScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#E34F26 styleopacity:0;transform:scale(.8)>HTML/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#1572B6 styleopacity:0;transform:scale(.8)>CSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#61DAFB styleopacity:0;transform:scale(.8)>React/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#3178C6 styleopacity:0;transform:scale(.8)>TypeScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F7DF1E styleopacity:0;transform:scale(.8)>JavaScript/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#E34F26 styleopacity:0;transform:scale(.8)>HTML/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#1572B6 styleopacity:0;transform:scale(.8)>CSS/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Infrastructure/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF9900 styleopacity:0;transform:scale(.8)>AWS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#2496ED styleopacity:0;transform:scale(.8)>Docker/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#326CE5 styleopacity:0;transform:scale(.8)>Kubernetes/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FCC624 styleopacity:0;transform:scale(.8)>Linux/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00D8FF styleopacity:0;transform:scale(.8)>CI/CD/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00A8FF styleopacity:0;transform:scale(.8)>Microservices/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FF9900 styleopacity:0;transform:scale(.8)>AWS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#2496ED styleopacity:0;transform:scale(.8)>Docker/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#326CE5 styleopacity:0;transform:scale(.8)>Kubernetes/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#FCC624 styleopacity:0;transform:scale(.8)>Linux/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00D8FF styleopacity:0;transform:scale(.8)>CI/CD/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#00A8FF styleopacity:0;transform:scale(.8)>Microservices/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Databases/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#4479A1 styleopacity:0;transform:scale(.8)>MySQL/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#DC382D styleopacity:0;transform:scale(.8)>Redis/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#C6363C styleopacity:0;transform:scale(.8)>Memcached/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#4479A1 styleopacity:0;transform:scale(.8)>MySQL/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#DC382D styleopacity:0;transform:scale(.8)>Redis/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#C6363C styleopacity:0;transform:scale(.8)>Memcached/span>/div>/div>/div>div classmb-6 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs md:px-6 px-5>Tools & Compliance/h3>div classrelative overflow-hidden>div classflex gap-3 animate-marquee_20s_linear_infinite hover:animation-play-state:paused>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F05032 styleopacity:0;transform:scale(.8)>Git/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#6366F1 styleopacity:0;transform:scale(.8)>Payment Gateways/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#10B981 styleopacity:0;transform:scale(.8)>PCI-DSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#8B5CF6 styleopacity:0;transform:scale(.8)>GDPR/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#F05032 styleopacity:0;transform:scale(.8)>Git/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#6366F1 styleopacity:0;transform:scale(.8)>Payment Gateways/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#10B981 styleopacity:0;transform:scale(.8)>PCI-DSS/span>span classitems-center gap-2 border border-white/10 py-2 transition-all bg-surface-light/70 font-semibold hover:shadow-lg inline-flex md:px-5 md:py-2.5 md:text-base px-4 rounded-xl shadow-md text-sm whitespace-nowrap text-#8B5CF6 styleopacity:0;transform:scale(.8)>GDPR/span>/div>/div>/div>div classborder-white/5 border-t md:px-6 pt-4 px-5 space-y-3 styleopacity:0;transform:translateY(10px)>h3 classfont-mono font-semibold tracking-widest uppercase md:text-sm text-starlight-dim/70 text-xs mb-3>Leadership & Practices/h3>div classflex gap-2 flex-wrap md:gap-3>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>System Design/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Architecture/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>E-commerce/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Agile Leadership/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Team Mentoring/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Scrum/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Kanban/span>span classborder transition-all font-medium md:text-sm px-3 text-xs bg-accent-indigo/15 border-accent-indigo/30 hover:shadow-md md:px-4 md:py-2 py-1.5 rounded-full shadow-sm text-accent-indigo/90 styleopacity:0;transform:scale(.8)>Project Management/span>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>div classw-full relative overflow-hidden col-span-1 glass-panel min-w-0 row-span-1 md:row-span-3 md:col-span-1 order-8>astro-island await-children clientvisible component-exportdefault component-url/_astro/RecommendationsCard.CBk3EDUB.js opts{"name":"RecommendationsCard","value":true} prefixr14 props{"recommendations":1,0,{"id":0,"miguel-garcia","name":0,"Miguel Garcia","role":0,"General Manager & VP of Technology","company":0,"New Work SE","relationship":0,"Managed Miguel directly","quote":0,"Having worked 10 years ago and again hiring Miguel to work closely with me for the past 4 years tells a lot about how much trust and respect I have for him. Miguel Enes has a very entrepreneurial mindset that always sets him to find solutions and to move organisations forward. He does that relying on his profound and complete tech knowledge and on-hands experience, leading by example/execution and supporting his team along the way. I highly recommend him as an autonomous, energiser, tech-savvy and delivery oriented Engineering Manager.","linkedinUrl":0,"https://www.linkedin.com/in/miguelfgarcia/","avatar":0,{"src":0,"/_astro/miguel-garcia.YSHvp8_y_Znxn0l.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"ricardo-martins","name":0,"Ricardo Martins","role":0,"Frontend Developer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"I've worked with Miguel for the last one and a half years. He has demonstrated great leadership skills and technical expertise, consistently minimising all the blockers we found on our way. He has a deep understanding of a wide range of technologies and is an excellent problem-solver. Miguel is someone you can trust, a great mentor and team player, always willing to help and create a collaborative environment where we feel comfortable giving feedback and contributions. I am confident that Miguel would be valuable to any organisation.","linkedinUrl":0,"https://www.linkedin.com/in/ricardofmm/","avatar":0,{"src":0,"/_astro/ricardo-martins.6K59Owhl_ZAzxfq.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"nils-hofmeister","name":0,"Nils Hofmeister","role":0,"VP of Technology","company":0,"New Work SE","relationship":0,"Managed Miguel directly","quote":0,"For the last almost 4 years, I had the pleasure to work with Miguel. The first half of this time he reported directly to me. Miguel is a passionate, people-oriented and hands-on engineering manager with an entrepreneurial mindset. I could always rely on him solving every problem I threw at him. He proactively and successfully developed his team and successfully delivered while continuously bringing smart tech and business ideas to the table. If you seek a smart, loyal and resourceful engineering manager, I strongly recommend to have a look at him.","linkedinUrl":0,"https://www.linkedin.com/in/nilshofmeister/","avatar":0,{"src":0,"/_astro/nils-hofmeister.DajXpkbF_1iNIS6.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"sergio-oliveira","name":0,"Sérgio Oliveira","role":0,"Senior Backend Engineer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"Miguel is a person and a professional I wish I had by my side along all my way as an IT engineer. I truly believe that his people and technical skills are assets that any company could take advantage of, and any other professional by his side can grow and thrive as I did. Multi-skilled, competent, very professional and, on top of all of that, an awesome human being are some definitions that fits Miguel very well. I would blindly team-up with him again for another ride.","linkedinUrl":0,"https://www.linkedin.com/in/sergiowoj/","avatar":0,{"src":0,"/_astro/sergio-oliveira.BNXlyAyt_Z2vHdyC.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"pedro-vale","name":0,"Pedro Vale","role":0,"Engineering Team Lead","company":0,"New Work SE","relationship":0,"Worked alongside Miguel","quote":0,"Miguel is a tech savvy Team Lead, capable of not only discuss tech but also to be the people manager his team needs: he can build trust, mentor and develop people. He is willing to support and find compromising solutions and is great managing stakeholders. I would be happy to work with Miguel again.","linkedinUrl":0,"https://www.linkedin.com/in/pvale/","avatar":0,{"src":0,"/_astro/pedro-vale.DeZXXEA8_23pbXh.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"antonio-ramos","name":0,"António Ramos","role":0,"iOS Engineer","company":0,"New Work SE","relationship":0,"Miguel managed him directly","quote":0,"Miguel was my team leader during the last 14 months, during that time he demonstrated exceptional leadership qualities and had a unique ability to inspire and motivate the team to deliver exceptional results. He played a vital role in directing and guiding the team in the development of various computer engineering projects. Miguel has excellent problem-solving skills coupled with his technical expertise that allowed him to take on complex projects and deliver high-quality results. Overall, I strongly recommend Miguel as a leader for any computer engineering position.","linkedinUrl":0,"https://www.linkedin.com/in/apramos/","avatar":0,{"src":0,"/_astro/antonio-ramos.3WFyorBI_ZmJ8DN.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"shahrooz-jahanshah","name":0,"Shahrooz Jahanshah","role":0,"Android Engineer","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel was an effective and supportive CTO. I enjoyed working for nine-month at Bamilo. Thanks to his supervision, I learned practically everything I know now about software architecture and microservice development. He had a powerful combination of expert knowledge and innate leadership abilities. His outgoing yet firm approach to handling conflicts in the team is worthy to be praised. I recommend Miguel as a CTO who can not only increase the technical growth of team members but also, promote the personal and professional growth of them.","linkedinUrl":0,"https://www.linkedin.com/in/shjahanshah/","avatar":0,{"src":0,"/_astro/shahrooz-jahanshah.D6avmyBR_1Hwaqd.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"farzan-dalaee","name":0,"Farzan Dalaee","role":0,"Senior Backend Engineer","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel is one of my colleagues that I miss working with him, he takes actions in perfect moments based on his experience. Great personality, I never feel he is my CTO, always cares like a friend. Wish you all the best!","linkedinUrl":0,"https://www.linkedin.com/in/farzan-dalaee/","avatar":0,{"src":0,"/_astro/farzan-dalaee.BaxbNZRG_ZeQFQV.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"sepehr-lorestani","name":0,"Sepehr Lorestani","role":0,"Senior System Administrator","company":0,"Bamilo","relationship":0,"Miguel managed him directly","quote":0,"Miguel Enes is one of the most effective among all people I have ever worked with. He's a very strong work ethic and unparalleled analytic and problem solving abilities. Miguel Enes provided outstanding results for Bamilo. He showed a high level of Leadership, motivation, scheduling, knowledge, precision, technical, management technical skills and was a valuable contributor to our projects. I could always depend on him to set the best example as CTO at Bamilo. I definitely would recommend him as CTO.","linkedinUrl":0,"https://www.linkedin.com/in/sepehr-lorestani/","avatar":0,{"src":0,"/_astro/sepehr-lorestani.DxgdJRwp_Z1E9V2H.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"wesley-stuurman","name":0,"Wesley Stuurman","role":0,"Senior Product Manager","company":0,"Lazada Group","relationship":0,"Worked alongside Miguel","quote":0,"Miguel is one of the most engaged, caring engineers I ever had the pleasure of working with. He had the most in-depth knowledge about Lazada's payment infrastructure of anyone at the company and the ability to quickly evaluate ideas and push them forward. The payments team at Lazada is highly respected and extremely productive thanks to all the work Miguel has done over the years.","linkedinUrl":0,"https://www.linkedin.com/in/wstuurman/","avatar":0,{"src":0,"/_astro/wesley-stuurman.DjvzxZYg_Z1HD7g2.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"long-hoang","name":0,"Long Hoang","role":0,"Backend Engineer","company":0,"Lazada Group","relationship":0,"Miguel managed him directly","quote":0,"I knew Miguel almost 4 years since he has moved from Portugal to dev team in Vietnam, and saw him progress from a developer to team leader, then technical group manager. Whatever the position, he was just so awesome. With Miguel in the team, impossible is nothing, he always can find solution for the toughest issues. He is also an industrious leader with amazing technical skill. I always feel comfortable when working with him. He always covers your back, and stays in front of troubles. That is so admirable.","linkedinUrl":0,"https://www.linkedin.com/in/longhoang87/","avatar":0,{"src":0,"/_astro/long-hoang.Cp1XPQIm_aeX4L.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}},0,{"id":0,"hieu-vo","name":0,"Hieu Vo","role":0,"Senior Backend Engineer","company":0,"Lazada Group","relationship":0,"Miguel managed him directly","quote":0,"I had chance to work in payment team together with Miguel for more than 1 year. Firstly he has great mindset of analytic and critical thinking, quickly catch issues and propose solutions immediately. With the insane negotiation skills for dealing with business guys, he can turn the worst situation into favorable one in a blink of an eye. He always covers teammates from pressure of higher managers or business; and make sure every people in the team feel comfortable as working. Moreover, thanks to his good sense of humour and friendliness, the team is always full of laughs and positive atmosphere.","linkedinUrl":0,"https://www.linkedin.com/in/hieuvpm/","avatar":0,{"src":0,"/_astro/hieu-vo.DK_uenAC_Z2oAK7p.webp","width":0,112,"height":0,112,"srcSet":0,"sizes":0}}} renderer-url/_astro/client.9unXo8s5.js ssr uidZ1fSL7H>div classflex flex-col h-full w-full>div classitems-center flex gap-3 border-b border-white/5 md:p-6 p-5 styleopacity:0;transform:translateY(-10px)>div>svg classlucide h-5 md:h-6 md:w-6 w-5 text-accent-teal lucide-quote fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>path dM5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>/svg>/div>h2 classfont-mono font-semibold tracking-widest uppercase md:text-base text-sm text-starlight-dim>Testimonials/h2>span classborder border-white/5 px-2.5 py-1 rounded-lg bg-surface-light/50 font-mono md:text-sm ml-auto text-starlight-dim/60 text-xs>1/12/span>/div>div classflex flex-col relative flex-1 md:p-8 overflow-hidden p-6>div classflex flex-col space-y-6 md:space-y-8 styleopacity:0;transform:translateX(30px) scale(.95)>div classborder-white/5 border-b pb-4 space-y-2 styleopacity:0;transform:translateY(10px)>div classitems-center flex gap-4>div classflex-shrink-0 styleopacity:0;transform:scale(.8)>img altMiguel Garcia, General Manager & VP of Technology at New Work SE classrounded-full border-2 border-accent-teal/30 h-12 md:h-14 md:w-14 object-cover shadow-lg w-12 height112 loadinglazy src/_astro/miguel-garcia.YSHvp8_y_Znxn0l.webp width112 decodingasync />/div>div classmin-w-0 flex-1>a classitems-center gap-2 font-semibold inline-flex group hover:text-accent-teal md:text-lg text-base text-starlight transition-colors hrefhttps://www.linkedin.com/in/miguelfgarcia/ relnoopener noreferrer target_blank>Miguel Garciadiv tabindex0>svg classlucide h-4 w-4 lucide-external-link group-hover:text-accent-teal md:h-5 md:w-5 text-starlight-dim transition-colors fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM15 3h6v6>/path>path dM10 14 21 3>/path>path dM18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6>/path>/svg>/div>/a>p classmt-1 md:text-base text-sm text-starlight-dim/90>General Manager & VP of Technology/p>p classtext-sm md:text-base text-accent-indigo/90 font-medium>New Work SE/p>/div>/div>/div>div classitems-center flex border-white/5 border-b justify-between pb-4 styleopacity:0>button classborder transition-all rounded-xl border-transparent hover:bg-white/10 hover:border-white/10 hover:text-starlight p-2 text-starlight-dim tabindex0>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-chevron-left fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm15 18-6-6 6-6>/path>/svg>/button>div classitems-center flex gap-2>button classrounded-full transition-all h-2 bg-accent-teal shadow-accent-teal/50 shadow-lg w-6 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>button classrounded-full transition-all h-2 bg-starlight-dim/30 hover:bg-starlight-dim/50 w-2 tabindex0>/button>span classfont-mono text-xs md:text-sm ml-1 text-starlight-dim/50>+6/span>/div>button classborder transition-all rounded-xl border-transparent hover:bg-white/10 hover:border-white/10 hover:text-starlight p-2 text-starlight-dim tabindex0>svg classlucide h-4 w-4 md:h-5 md:w-5 lucide-chevron-right fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dm9 18 6-6-6-6>/path>/svg>/button>/div>div classflex flex-col bg-surface-light/30 border border-white/5 md:p-6 p-5 rounded-2xl space-y-4>svg classlucide flex-shrink-0 h-6 lucide-quote mb-2 md:h-8 md:w-8 text-accent-indigo/40 w-6 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>path dM16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>path dM5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z>/path>/svg>p classmd:text-lg text-base font-light leading-relaxed text-starlight/90 italic lg:text-xl>"Having worked 10 years ago and again hiring Miguel to work closely with me for the past 4 years tells a lot about how much trust and respect I have for him. Miguel Enes has a very entrepreneurial mindset that always sets him to find solutions and to move organisations forward. He does that relying on his profound and complete tech knowledge and on-hands experience, leading by example/execution and supporting his team along the way. I highly recommend him as an autonomous, energiser, tech-savvy and delivery oriented Engineering Manager."/p>/div>/div>/div>/div>!--astro:end-->/astro-island>/div>/div>/main>footer aria-labelSite footer classw-full min-w-0 max-w-none 2xl:px-12 3xl:px-16 lg:px-8 md:px-6 px-4 xl:px-10 md:mt-16 md:pb-12 mt-12 pb-8 rolecontentinfo>div classtext-starlight-dim/70 font-light md:text-base text-center text-sm>p>© 2026 Miguel Enes. Built with Astro./p>/div>/footer>astro-island await-children clientload component-exportdefault component-url/_astro/LanguageSwitcher.D-EYVqdW.js opts{"name":"LanguageSwitcher","value":true} prefixr15 props{} renderer-url/_astro/client.9unXo8s5.js ssr uidZsfglu>div classright-6 bottom-6 fixed z-50>button classitems-center flex justify-center rounded-full border border-white/10 glass-panel group h-14 hover:text-accent-indigo shadow-xl text-starlight transition-colors w-14 tabindex0 aria-labelSwitch language>div>svg classlucide lucide-globe h-6 w-6 fillnone strokecurrentColor viewBox0 0 24 24 aria-hiddentrue height24 stroke-linecapround stroke-linejoinround stroke-width2 width24 xmlnshttp://www.w3.org/2000/svg>circle cx12 cy12 r10>/circle>path dM12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20>/path>path dM2 12h20>/path>/svg>/div>div classitems-center flex justify-center rounded-full -right-1 -top-1 absolute bg-accent-indigo border-2 border-surface h-5 w-5>span classtext-xs font-bold>🇬🇧/span>/div>/button>/div>!--astro:end-->/astro-island>script srchttps://plausible.io/js/script.js data-domainmiguelenes.com deferdefer>/script>script>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]