1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[405],{2701:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});var n=r(1373);/** 2 * @license lucide-react v0.436.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */let a=(0,n.Z)("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])},2112:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});var n=r(1373);/** 7 * @license lucide-react v0.436.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */let a=(0,n.Z)("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]])},8312:function(e,t,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return r(4151)}])},1843:function(e,t,r){"use strict";var n=r(5893),a=r(1664),s=r.n(a),i=r(3495),l=r(2701);t.Z=e=>{let{title:t,description:r,date:a,slug:o,showDate:c=!0}=e;return(0,n.jsx)(s(),{href:"/blog/post/".concat(o),className:"block w-full",children:(0,n.jsxs)(i.E.div,{className:"group flex justify-between pb-6",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("h2",{className:"text-base transition duration-[150] ease-in-out group-hover:text-neutral-500",children:t}),(0,n.jsx)(l.Z,{className:"arrow-reveal h-2.5 text-neutral-400",strokeWidth:2.6})]}),(0,n.jsx)("p",{className:"max-w-lg text-sm tracking-[0.01em] text-neutral-400",children:r})]}),c&&(0,n.jsxs)("p",{className:"hidden min-w-fit text-xs tabular-nums tracking-tighter text-neutral-400/50 md:block",children:[new Date(a).toLocaleString("default",{month:"2-digit"}),"/",new Date(a).getFullYear()]})]})})}},4151:function(e,t,r){"use strict";r.r(t),r.d(t,{__N_SSG:function(){return P},default:function(){return pages}});var n=r(5893),a=r(3495),s=r(9215),i=r(1526),l=r(8583),o=r(1373);/** 12 * @license lucide-react v0.436.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */let c=(0,o.Z)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var d=r(2112),u=r(9008),m=r.n(u),h=r(5675),x=r.n(h),p=r(1664),f=r.n(p),g=r(7294);let j={idle:"/idle.png","blink-half":"/blink-half.png",blink:"/blink.png","hair-moved-half":"/hair-moved-half.png","hair-moved":"/hair-moved.png"},v=[{frame:"blink-half",duration:60},{frame:"blink",duration:80},{frame:"blink-half",duration:60},{frame:"idle",duration:0}],rand=(e,t)=>e+Math.random()*(t-e);function AnimatedAvatar(e){let{className:t,size:r=256,alt:a=""}=e,[s,i]=(0,g.useState)("idle"),l=(0,g.useRef)([]);return(0,g.useEffect)(()=>{Object.values(j).forEach(e=>{let t=new window.Image;t.src=e})},[]),(0,g.useEffect)(()=>{let push=(e,t)=>{l.current.push(setTimeout(e,t))},e=!1,runBlink=()=>{if(e)return push(runBlink,200);e=!0;let t=0;v.forEach(e=>{let{frame:r,duration:n}=e;push(()=>i(r),t),t+=n}),push(()=>{e=!1,scheduleBlink()},t)},runHairMove=()=>{if(e)return push(runHairMove,400);e=!0;let t=[{frame:"hair-moved-half",duration:360},{frame:"hair-moved",duration:rand(700,700)},{frame:"hair-moved-half",duration:360},{frame:"idle",duration:0}],r=0;t.forEach(e=>{let{frame:t,duration:n}=e;push(()=>i(t),r),r+=n}),push(()=>{e=!1,scheduleHairMove()},r)},scheduleBlink=()=>{push(runBlink,rand(2e3,4e3))},scheduleHairMove=()=>{push(runHairMove,rand(700,700))};return scheduleBlink(),scheduleHairMove(),()=>{l.current.forEach(clearTimeout),l.current=[]}},[]),(0,n.jsx)("div",{className:t,style:{width:r,height:r},children:(0,n.jsx)("img",{src:j[s],alt:a,width:r,height:r,draggable:!1,style:{width:"100%",height:"100%",objectFit:"contain"}})})}var _=r(4731),w=r(2701),link_arrow=e=>{let{children:t,href:r,className:a}=e;return(0,n.jsxs)(f(),{href:r,target:"".concat(r.startsWith("http")||r.startsWith("mailto")?"_blank":""),className:"group flex items-center transition-all duration-[150] ease-in-out hover:text-neutral-500 ".concat(null!=a?a:""),children:[t,r.startsWith("http")||r.startsWith("mailto")?(0,n.jsx)(d.Z,{className:"arrow-reveal h-2.5",strokeWidth:2.6}):(0,n.jsx)(w.Z,{className:"arrow-reveal h-2.5 text-neutral-400",strokeWidth:2.6})]})},k=r(1843);let b=(0,g.forwardRef)((e,t)=>
16{let{text:r,scrambleSpeed:a=50,scrambledLetterCount:s=2,characters:i="abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+",className:l="",scrambledClassName:o="",autoStart:c=!0,onStart:d,onComplete:u}=e,[m,h]=(0,g.useState)(""),[x,p]=(0,g.useState)(!1),[f,j]=(0,g.useState)(0),[v,_]=(0,g.useState)(0),w=(0,g.useCallback)(()=>{p(!0),j(0),_(0),null==d||d()},[d]),k=(0,g.useCallback)(()=>{p(!1),j(0),_(0),h("")},[]);return(0,g.useImperativeHandle)(t,()=>({start:w,reset:k})),(0,g.useEffect)(()=>{c&&w()},[c,w]),(0,g.useEffect)(()=>{let e;return x&&(e=setInterval(()=>{f<r.length?j(e=>e+1):v<s?_(e=>e+1):(clearInterval(e),p(!1),null==u||u());let t=Math.max(0,r.length-f),n=Math.min(t,s),a=Array(n).fill(0).map(()=>i[Math.floor(Math.random()*i.length)]).join("");h(r.slice(0,f)+a)},a)),()=>{e&&clearInterval(e)}},[x,r,f,v,s,i,a,u]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"sr-only",children:r}),(0,n.jsx)("span",{className:"inline-block whitespace-pre-wrap","aria-hidden":"true",children:(()=>{let e=m.slice(0,f),t=m.slice(f);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:l,children:e}),(0,n.jsx)("span",{className:o,children:t})]})})()})]})});b.displayName="ScrambleIn";var y=r(2390),N=r(8004),I=r(3181);let staggerDelay=e=>.1+.06*e,FadeIn=e=>{let{index:t,animate:r,as:s="div",className:i,children:l}=e,o="li"===s?a.E.li:a.E.div;return(0,n.jsx)(o,{initial:!!r&&{opacity:0,filter:"blur(4px)",y:12},animate:{opacity:1,filter:"blur(0px)",y:0},transition:{duration:.3,delay:r?staggerDelay(t):0,ease:[0,-.02,.49,.99],y:{duration:.7,delay:r?staggerDelay(t):0,ease:[.33,1,.68,1]}},className:i,children:l})},ProjectPreview=e=>{let{title:t,description:r,link:s,logo:l}=e,[o,c]=(0,g.useState)(!1);return(0,n.jsxs)(f(),{href:s,target:"_blank",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),className:"group flex w-full cursor-pointer flex-col gap-1 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(x(),{src:l,alt:t,width:12,height:12,className:" h-3 w-3"}),(0,n.jsxs)("div",{className:"flex items-center transition-all duration-[150] ease-in-out group-hover:text-neutral-500",children:[t,(0,n.jsx)(i.M,{children:o&&(0,n.jsx)(a.E.div,{initial:{opacity:0,width:0,marginLeft:0,scale:.95},animate:{opacity:1,width:"auto",marginLeft:6,scale:1},exit:{opacity:0,width:0,marginLeft:0,scale:.95},transition:{duration:.15,ease:"easeInOut"},children:(0,n.jsx)(d.Z,{className:"h-2.5 w-2.5 text-neutral-400",strokeWidth:2.6})})})]})]}),(0,n.jsx)("p",{className:"text-sm tracking-[0.01em] text-neutral-400",children:r})]})};var P=!0,pages=e=>{let{postsMetadata:t}=e,[r,o]=(0,l.KO)(N.bM),[d]=(0,l.KO)(N.Rx),[u,h]=(0,l.KO)(N.GN),x=(0,I.d)(),p=(0,g.useRef)(u),f=(0,g.useRef)(null),j=(0,s.Y)(f,{once:!0,amount:.6}),v=(0,g.useRef)(null);(0,g.useEffect)(()=>{if(j){var e;null===(e=v.current)||void 0===e||e.start()}},[j]),(0,g.useEffect)(()=>{p.current=!1},[]),(0,g.useEffect)(()=>{r&&setTimeout(()=>{o(!1)},2e3),console.log(" ___-------___\n _-~~ ~~-_\n _-~ /~-_\n /^\\__/^\\ /~ \\ / \\\n /| O|| O| / \\_______________/ \\\n | |___||__| / / \\ \\\n | \\ / / \\ \\\n | (_______) /______/ \\_________ \\\n | / / \\ / \\\n \\ \\^\\\\ \\ / \\ /\n \\ || \\______________/ _-_ //\\__//\n \\ ||------_-~~-_ ------------- \\ --/~ ~\\ || __/\n ~-----||====/~ |==================| |/~~~~~\n (_(__/ ./ / \\_\\ \\.\n (_(___/ \\_____)_)")},[]);let w=t.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()).slice(0,3),P=[...y.C].sort((e,t)=>
16{var r,n;return(null!==(r=t.stars)&&void 0!==r?r:0)-(null!==(n=e.stars)&&void 0!==n?n:0)}).slice(0,x?3:4);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(m(),{children:[(0,n.jsx)("title",{children:"Gustavo Fior"}),(0,n.jsx)("link",{rel:"icon",href:"/favicon.ico"}),(0,n.jsx)("meta",{name:"description",content:"Brazilian technologist"}),(0,n.jsx)("meta",{property:"og:title",content:"Gustavo Fior"}),(0,n.jsx)("meta",{property:"og:description",content:"Brazilian technologist"}),(0,n.jsx)("meta",{property:"og:type",content:"website"}),(0,n.jsx)("meta",{property:"og:url",content:"https://www.gustavofior.com"}),(0,n.jsx)("meta",{property:"og:site_name",content:"Gustavo Fior"}),(0,n.jsx)("meta",{property:"og:image",content:"https://www.gustavofior.com/api/og"}),(0,n.jsx)("meta",{property:"twitter:image",content:"https://www.gustavofior.com/api/og"}),(0,n.jsx)("meta",{property:"twitter:card",content:"summary_large_image"}),(0,n.jsx)("meta",{property:"twitter:title",content:"Gustavo Fior"}),(0,n.jsx)("meta",{property:"twitter:description",content:"Brazilian technologist"})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,n.jsxs)("div",{className:"pb-2",children:[(0,n.jsx)(FadeIn,{index:0,animate:r,className:"flex flex-col items-start",children:(0,n.jsx)(AnimatedAvatar,{size:96,alt:"Gustavo Fior",className:"-ml-[1.35rem] -mt-4"})}),(0,n.jsx)(FadeIn,{index:1,animate:r,className:"flex flex-col items-start pb-2 pt-2",children:(0,n.jsx)("h1",{className:"font-serif text-lg font-medium",children:"Gustavo Fior"})}),(0,n.jsx)(FadeIn,{index:2,animate:r,children:(0,n.jsx)("p",{className:"text-balance pb-8 text-sm tracking-[0.01em] text-neutral-400",children:"Brazilian technologist who loves to build, surf, and learn new things."})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(FadeIn,{index:3,animate:r,children:(0,n.jsxs)("h2",{className:"flex items-center justify-between pb-1 text-sm tracking-[0.01em] text-neutral-400",children:["Projects",(0,n.jsxs)("button",{onClick:()=>h(!u),className:"group flex items-center transition-all duration-200 ease-in-out hover:text-neutral-500",children:[u?"Hide":"Older",(0,n.jsx)(c,{className:"arrow-reveal h-2.5 ".concat(u?"":"rotate-180"),strokeWidth:2.6})]})]})}),(0,n.jsxs)("div",{className:"grid grid-cols-1 pb-8",children:[(0,n.jsx)(FadeIn,{index:4,animate:r,children:(0,n.jsx)(ProjectPreview,{title:"Craft",description:"A collection of design engineering concepts.",link:"https://craft.gustavofior.com/",logo:"/logos/craft.png"})}),(0,n.jsx)(FadeIn,{index:5,animate:r,children:(0,n.jsx)(ProjectPreview,{title:"Foglamp",description:"Open source tool to make better AI agents.",link:"https://foglamp.dev/",logo:"/logos/foglamp.png"})}),(0,n.jsx)(FadeIn,{index:6,animate:r,children:(0,n.jsx)(ProjectPreview,{title:"CCC",description:"A coding (but not only) club in Curitiba.",link:"https://curitibacodingclub.com",logo:"/logos/ccc-black-bold.png"})}),(0,n.jsx)(i.M,{children:u&&(0,n.jsxs)(a.E.div,{initial:!p.current&&{opacity:0,filter:"blur(4px)",height:0},animate:{opacity:1,filter:"blur(0px)",height:"auto"},exit:{opacity:0,filter:"blur(4px)",height:0},transition:{duration:.3,type:"spring",bounce:0},className:"grid grid-cols-1",children:[(0,n.jsx)(ProjectPreview,{title:"VAY\xd8",description:"A home for your best internet finds.",link:"https://vayo.me/",logo:"/logos/vayo.png"}),(0,n.jsx)(ProjectPreview,{title:"Olwen",description:"GEO agent for busy founders.",link:"https://olwen.io",logo:"/logos/olwen.svg"}),(0,n.jsx)(ProjectPreview,{title:"5Devs",description:"Fake data for testing purposes.",link:"https://5devs.com.br/",logo:"/logos/5devs.png"}),(0,n.jsx)(ProjectPreview,{title:"Option",description:"The best GEO platform for marketing teams.",link:"https://tryoption.ai/",logo:"/logos/option.png"}),(0,n.jsx)(ProjectPreview,{title:"Itzam",description:"AI integration has never been so easy.",link:"https://itz.am/",logo:"/logos/itzam.svg"}),(0,n.jsx)(ProjectPreview,{title:"Rafa Resumos",description:"My girlfriend's med-school writings.",link:"https://rafaresumos.com.br/",logo:"/logos/rafa.png"}),(0,n.jsx)(ProjectPreview,{title:"Ache o Pet",description:"Lost & found for dogs and cats.",link:"https://acheopet.vercel.app/",logo:"/logos/ache-o-pet.png"}),(0,n.jsx)(ProjectPreview,{title:"Censorfy",description:"AI content moderation API.",link:"https://censorfy.vercel.app/",logo:"/logos/censorfy.png"}),(0,n.jsx)(ProjectPreview,{title:"Mind",description:"Connecting patients and therapists.",link:"https://mind.abdulhdr.com/",logo:"/logos/mind.png"})]})})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)(FadeIn,{index:7,animate:r,className:"flex justify-between pb-4 al
16ign-middle text-sm tracking-[0.01em] text-neutral-400",children:["Writing",(0,n.jsx)(link_arrow,{href:"/blog",className:"flex w-fit text-sm text-neutral-400",children:"Older"})]}),(0,n.jsx)("ul",{className:"flex flex-col pb-8",children:w.map((e,t)=>(0,n.jsx)(FadeIn,{as:"li",index:8+t,animate:r,children:(0,n.jsx)(k.Z,{title:e.title,description:e.description,date:e.date,slug:e.slug,showDate:!1})},e.slug))})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)(FadeIn,{index:11,animate:r,className:"flex justify-between pb-6 align-middle text-sm tracking-[0.01em] text-neutral-400",children:["Books",(0,n.jsx)(link_arrow,{href:"/books",className:"flex w-fit text-sm text-neutral-400",children:"More"})]}),(0,n.jsx)(FadeIn,{index:12,animate:r,children:(0,n.jsx)("ul",{className:"grid grid-cols-3 grid-rows-1 gap-x-8 pb-20 md:grid-cols-4",children:P.map(e=>(0,n.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,n.jsx)(_.F,{src:e.coverImageUrl,alt:"PT"===d?e.name:e.englishName,width:50,height:75}),(0,n.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,n.jsx)("p",{className:"pointer-events-none line-clamp-2 text-sm",children:"PT"===d?e.name:e.englishName}),(0,n.jsx)("p",{className:"pointer-events-none mb-1 text-xs tracking-[0.01em] text-neutral-400",children:e.author})]})]},e.name))})})]}),(0,n.jsx)("div",{children:(0,n.jsxs)("div",{className:"flex gap-4 tracking-[0.01em] md:gap-6",children:[(0,n.jsx)(FadeIn,{index:13,animate:r,children:(0,n.jsx)(link_arrow,{href:"https://x.com/heyimgustavo",className:"text-sm text-neutral-400",children:"X"})}),(0,n.jsx)(FadeIn,{index:14,animate:r,children:(0,n.jsx)(link_arrow,{href:"mailto:[email protected]",className:"text-sm text-neutral-400",children:"Email"})}),(0,n.jsx)(FadeIn,{index:15,animate:r,children:(0,n.jsx)(link_arrow,{href:"https://vayo.me/bookmarks/cltpx1nq70001jw1tc90e4ht6",className:"text-sm text-neutral-400",children:"Bookmarks"})}),(0,n.jsx)(FadeIn,{index:16,animate:r,children:(0,n.jsx)(link_arrow,{href:"https://vayo.me/bookmarks/clublk9rh000113g5qf4tj038",className:"text-sm text-neutral-400",children:"Cool Stuff"})})]})}),(0,n.jsx)("footer",{ref:f,className:"flex pb-12 pt-20",children:(0,n.jsx)("p",{className:"font-serif text-xs font-medium tracking-[0.01em] text-neutral-300/70",children:(0,n.jsx)(b,{ref:v,text:"The life of every human being is a journey towards oneself.",autoStart:!1,scrambleSpeed:35,scrambledLetterCount:4,characters:"abcdefghijklmnopqrstuvwxyz",scrambledClassName:"text-neutral-300"})})})]})]})}},9215:function(e,t,r){"use strict";r.d(t,{Y:function(){return useInView}});var n=r(7294),a=r(5487);let s={some:0,all:1};function useInView(e,{root:t,margin:r,amount:i,once:l=!1}={}){let[o,c]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{if(!e.current||l&&o)return;let n={root:t&&t.current||void 0,margin:r,amount:i};return function(e,t,{root:r,margin:n,amount:i="some"}={}){let l=function(e,t,r){var n;if("string"==typeof e){let s=document;t&&((0,a.k)(!!t.current,"Scope provided, but no element detected."),s=t.current),r?(null!==(n=r[e])&&void 0!==n||(r[e]=s.querySelectorAll(e)),e=r[e]):e=s.querySelectorAll(e)}else e instanceof Element&&(e=[e]);return Array.from(e||[])}(e),o=new WeakMap,c=new IntersectionObserver(e=>{e.forEach(e=>{let r=o.get(e.target);if(!!r!==e.isIntersecting){if(e.isIntersecting){let r=t(e);"function"==typeof r?o.set(e.target,r):c.unobserve(e.target)}else r&&(r(e),o.delete(e.target))}})},{root:r,rootMargin:n,threshold:"number"==typeof i?i:s[i]});return l.forEach(e=>c.observe(e)),()=>c.disconnect()}(e.current,()=>(c(!0),l?void 0:()=>c(!1)),n)},[t,e,r,l,i]),o}}},function(e){e.O(0,[675,809,774,888,179],function(){return e(e.s=8312)}),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.