PageSourceSearch

https://mayronalves.com/_next/static/chunks/caf3ac40334ef3f2.js

js mayronalves.com collected 2026-10-02 01:35:35 UTC 41,799 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,33525,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"warnOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},64856,e=>{"use strict";var t=e.i(43476),a=e.i(71645);function r({showDevlog:e=!0}){let[r,n]=(0,a.useState)("light"),[o,i]=(0,a.useState)(!1);(0,a.useEffect)(()=>{n(document.documentElement.getAttribute("data-theme")||"light")},[]),(0,a.useEffect)(()=>(document.body.style.overflow=o?"hidden":"",()=>{document.body.style.overflow=""}),[o]);let s=()=>i(!1),l=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("a",{href:"/#about",onClick:s,children:"About"}),(0,t.jsx)("a",{href:"/#projects",onClick:s,children:"Projects"}),e?(0,t.jsx)("a",{href:"/devlog",onClick:s,children:"Devlog"}):null,(0,t.jsx)("a",{href:"/#stack",onClick:s,children:"Stack"}),(0,t.jsx)("a",{href:"/#resume",onClick:s,children:"Resume"}),(0,t.jsx)("a",{href:"/#contact",onClick:s,children:"Contact"})]});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("nav",{className:"nav",children:(0,t.jsxs)("div",{className:"nav-inner",children:[(0,t.jsxs)("a",{className:"nav-logo",href:"/",style:{textDecoration:"none"},children:[(0,t.jsx)("img",{className:"nav-logo-mark",src:"/favicon/apple-touch-icon.png",alt:"","aria-hidden":"true"}),(0,t.jsx)("span",{children:"Mayron Alves"})]}),(0,t.jsx)("div",{className:"nav-links nav-links-desktop",children:l}),(0,t.jsxs)("div",{className:"nav-actions",children:[(0,t.jsx)("button",{className:"theme-toggle",onClick:()=>{let e="light"===r?"dark":"light";document.documentElement.setAttribute("data-theme",e),n(e)},title:"light"===r?"Switch to dark":"Switch to light","aria-label":"Toggle color scheme",children:"light"===r?(0,t.jsx)("svg",{viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M13.2 9.6a5.2 5.2 0 0 1-6.8-6.8 0.6 0.6 0 0 0-0.78-0.76A6.4 6.4 0 1 0 13.96 10.38a0.6 0.6 0 0 0-0.76-0.78z"})}):(0,t.jsxs)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",children:[(0,t.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,t.jsx)("line",{x1:"8",y1:"1",x2:"8",y2:"3",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"8",y1:"13",x2:"8",y2:"15",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"1",y1:"8",x2:"3",y2:"8",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"13",y1:"8",x2:"15",y2:"8",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"3",y1:"3",x2:"4.5",y2:"4.5",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"11.5",y1:"11.5",x2:"13",y2:"13",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"3",y1:"13",x2:"4.5",y2:"11.5",strokeLinecap:"round"}),(0,t.jsx)("line",{x1:"11.5",y1:"4.5",x2:"13",y2:"3",strokeLinecap:"round"})]})}),(0,t.jsxs)("button",{className:"nav-burger",onClick:()=>i(e=>!e),"aria-label":o?"Close menu":"Open menu","aria-expanded":o,children:[(0,t.jsx)("span",{className:o?"open":""}),(0,t.jsx)("span",{className:o?"open":""}),(0,t.jsx)("span",{className:o?"open":""})]})]})]})}),(0,t.jsx)("div",{className:`nav-drawer ${o?"open":""}`,onClick:s,children:(0,t.jsx)("div",{className:"nav-drawer-inner",onClick:e=>e.stopPropagation(),children:l})})]})}e.s(["default",()=>r])},98183,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={assign:function(){return l},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return s}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});function o(e){let t={};for(let[a,r]of e.entries()){let e=t[a];void 0===e?t[a]=r:Array.isArray(e)?e.push(r):t[a]=[e,r]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function s(e){let t=new URLSearchParams;for(let[a,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.append(a,i(e));else t.set(a,i(r));return t}function l(e,...t){for(let a of t){for(let t of a.keys())e.delete(t);for(let[t,r]of a.entries())e.append(t,r)}return e}},95057,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={formatUrl:function(){return s},formatWithValidation:function(){return c},urlObjectKeys:function(){return l}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let o=e.r(90809)._(e.r(98183)),i=/https?|ftp|gopher|file/;function s(e){let{auth:t,hostname:a}=e,r=e.protocol||"",n=e.pathname||"",s=e.hash||"",l=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:a&&(c=t+(~a.indexOf(":")?`[${a}]`:a),e.port&&(c+=":"+e.port)),l&&"object"==typeof l&&(l=String(o.urlQueryToSearchParams(l)));let d=e.search||l&&`?${l}`||"";return r&&!r.endsWith(":")&&(r+=":"),e.slashes||(!r||i.test(r))&&!1!==c?(c="//"+(c||""),n&&"/"!==n[0]&&(n="/"+n)):c||(c=""),s&&"#"!==s[0]&&(s="#"+s),d&&"?"!==d[0]&&(d="?"+d),n=n.replace(/[?#]/g,encodeURIComponent),d=d.replace("#","%23"),`${r}${c}${n}${d}${s}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return s(e)}},18581,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"useMergedRef",{enumerable:!0,get:function(){return n}});let r=e.r(71645);function n(e,t){let a=(0,r.useRef)(null),n=(0,r.useRef)(null);return(0,r.useCallback)(r=>{if(null===r){let e=a.current;e&&(a.current=null,e());let t=n.current;t&&(n.current=null,t())}
1else e&&(a.current=o(e,r)),t&&(n.current=o(t,r))},[e,t])}function o(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let a=e(t);return"function"==typeof a?a:()=>e(null)}}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},18967,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return x},MissingStaticPage:function(){return b},NormalizeError:function(){return v},PageNotFoundError:function(){return w},SP:function(){return f},ST:function(){return g},WEB_VITALS:function(){return o},execOnce:function(){return i},getDisplayName:function(){return u},getLocationOrigin:function(){return c},getURL:function(){return d},isAbsoluteUrl:function(){return l},isResSent:function(){return h},loadGetInitialProps:function(){return m},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return k}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,a=!1;return(...r)=>(a||(a=!0,t=e(...r)),t)}let s=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>s.test(e);function c(){let{protocol:e,hostname:t,port:a}=window.location;return`${e}//${t}${a?":"+a:""}`}function d(){let{href:e}=window.location,t=c();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function h(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function m(e,t){let a=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await m(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(a&&h(a))return r;if(!r)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${r}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return r}let f="u">typeof performance,g=f&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class v extends Error{}class w extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class b extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class x extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function k(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"isLocalURL",{enumerable:!0,get:function(){return o}});let r=e.r(18967),n=e.r(52817);function o(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),a=new URL(e,t);return a.origin===t&&(0,n.hasBasePath)(a.pathname)}catch(e){return!1}}},84508,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"errorOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},22016,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={default:function(){return y},useLinkStatus:function(){return w}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let o=e.r(90809),i=e.r(43476),s=o._(e.r(71645)),l=e.r(95057),c=e.r(8372),d=e.r(18581),u=e.r(18967),h=e.r(5550);e.r(33525);let p=e.r(91949),m=e.r(73668),f=e.r(9396);function g(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function y(t){var a;let r,n,o,[l,y]=(0,s.useOptimistic)(p.IDLE_LINK_STATUS),w=(0,s.useRef)(null),{href:b,as:x,children:k,prefetch:j=null,passHref:P,replace:S,shallow:M,scroll:N,onClick:C,onMouseEnter:E,onTouchStart:L,legacyBehavior:A=!1,onNavigate:T,ref:I,unstable_dynamicOnHover:H,...O}=t;r=k,A&&("string"==typeof r||"number"==typeof r)&&(r=(0,i.jsx)("a",{children:r}));let D=s.default.useContext(c.AppRouterContext),B=!1!==j,R=!1!==j?null===(a=j)||"auto"===a?f.FetchStrategy.PPR:f.FetchStrategy.Full:f.FetchStrategy.PPR,{href:_,as:F}=s.default.useMemo(()=>{let e=g(b);return{href:e,as:x?g(x):e}},[b,x]);if(A){if(r?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>
1` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});n=s.default.Children.only(r)}let W=A?n&&"object"==typeof n&&n.ref:I,q=s.default.useCallback(e=>(null!==D&&(w.current=(0,p.mountLinkInstance)(e,_,D,R,B,y)),()=>{w.current&&((0,p.unmountLinkForCurrentNavigation)(w.current),w.current=null),(0,p.unmountPrefetchableInstance)(e)}),[B,_,D,R,y]),z={ref:(0,d.useMergedRef)(q,W),onClick(t){A||"function"!=typeof C||C(t),A&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(t),!D||t.defaultPrevented||function(t,a,r,n,o,i,l){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,m.isLocalURL)(a)){o&&(t.preventDefault(),location.replace(a));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(99781);s.default.startTransition(()=>{u(r||a,o?"replace":"push",i??!0,n.current)})}}(t,_,F,w,S,N,T)},onMouseEnter(e){A||"function"!=typeof E||E(e),A&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),D&&B&&(0,p.onNavigationIntent)(e.currentTarget,!0===H)},onTouchStart:function(e){A||"function"!=typeof L||L(e),A&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),D&&B&&(0,p.onNavigationIntent)(e.currentTarget,!0===H)}};return(0,u.isAbsoluteUrl)(F)?z.href=F:A&&!P&&("a"!==n.type||"href"in n.props)||(z.href=(0,h.addBasePath)(F)),o=A?s.default.cloneElement(n,z):(0,i.jsx)("a",{...O,...z,children:r}),(0,i.jsx)(v.Provider,{value:l,children:o})}e.r(84508);let v=(0,s.createContext)(p.IDLE_LINK_STATUS),w=()=>(0,s.useContext)(v);("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},71652,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(22016);let n=[{slug:"peek",title:"Peek",logo:"/projects/peek/logo.png",logoClass:"app-icon",eyebrow:"New release",pill:"Localhost only",tagline:"Point at a DOM node. Your coding agent gets the selector, a slice of HTML, and a cropped screenshot.",description:"Chrome extension plus a local Go daemon. You pick the node; Grok, Claude Code, Codex, and Cursor look. Nothing leaves localhost — no telemetry.",tags:["Chrome Extension","Go","MCP","Native Host"],features:[{title:"You pick, the model looks",desc:"Not a browser-driving agent. You click the node. The agent gets what you pointed at."},{title:"Selector, HTML, screenshot",desc:"One pin ships a CSS selector, a DOM slice, and a cropped screenshot to the agent."},{title:"Localhost only",desc:"Pins live in ~/.peek/ (mode 0600). No telemetry, no cloud, no accounts."},{title:"MCP + skills",desc:"Works with Grok Build, Claude Code, Codex, and Cursor via MCP and a Peek skill."}],link:"/projects/peek",chromeWebStore:"https://chromewebstore.google.com/detail/peek/afalnlminndnlfgnlphbelelpcblcbld",github:"https://github.com/iammayron/peek",featured:!0,visual:"peek"},{slug:"pour",title:"Pour",logo:"/projects/pour/logo.png",logoClass:"app-icon",eyebrow:"New release",pill:"macOS 14+",tagline:"Pour 25 minutes into a Todoist task. A floating liquid-glass card fills with water while you focus.",description:"A macOS menu-bar Pomodoro for Todoist. Pick a task, start a session, and an always-on-top glass card shows the countdown with water rising as time passes. Sessions get logged back to the task.",tags:["macOS","Swift","Menu Bar","Todoist"],features:[{title:"Floating card",desc:"Always on top, on every Space. Liquid Glass on macOS 26. Wide or compact."},{title:"Water clock",desc:"Blue water rises while you focus, green water drains during the break."},{title:"Todoist in, Todoist out",desc:"Search and filter your tasks. Complete from the card. Sessions logged as comments."},{title:"Menu bar glyph",desc:"A glass that fills with progress, a cup during breaks, the countdown beside it."}],link:"/projects/pour",github:"https://github.com/iammayron/pour",releases:"https://github.com/iammayron/pour/releases/latest",featured:!0,visual:"pour"},{slug:"cantio",title:"Cantio",logo:"/projects/cantio/logo.png",logoClass:"app-icon",eyebrow:"Featured project",pill:"macOS 14+",tagline:"Karaoke-grade Spotify lyrics in a floating pill — or a fullscreen view that looks like Apple shipped it.",description:"A macOS menu-bar app that reads Spotify locally. No OAuth, no telemetry. Timed lyrics come from LRCLIB. That’s the only network call.",tags:["macOS","Swift","Menu Bar","Spotify"],features:[{title:"Two looks",desc:"A draggable floating pill, or a fullscreen karaoke view with an album-art-tinted backdrop."},{title:"Local Spotify",desc:"Track and position come from the local Spotify app over AppleScript. No Web API, no login."},{title:"LRCLIB only",desc:"The only thing that leaves the machine is a lyrics lookup. Playback never does."},{title:"Native feel",desc:"Glass materials, alignment guides, Reduce Motion, Reduce Trans
1parency, VoiceOver."}],link:"/projects/cantio",github:"https://github.com/iammayron/cantio",releases:"https://github.com/iammayron/cantio/releases/latest",featured:!0,visual:"cantio"},{slug:"markbridge",title:"MarkBridge",logo:"/projects/markbridge/logo.png",eyebrow:"Featured project",pill:"Free & open source",tagline:"Bookmarks & extensions, perfectly synced across every Chromium browser. Your data, your storage.",description:"Sync bookmarks and extensions across Chromium browsers. Stored in your GitHub Gist or Google Drive — no third-party servers.",tags:["Chrome Extension","JavaScript","GitHub API","Google Drive"],features:[{title:"Cross-browser sync",desc:"Chrome, Brave, Edge, Arc, Vivaldi, Opera and more."},{title:"Your data, your storage",desc:"Private GitHub Gist or Google Drive. No third parties."},{title:"Auto-sync",desc:"Background sync from 1 to 60 minutes. Set and forget."},{title:"Multi-profile",desc:"Each browser auto-detected. Switch profiles instantly."}],link:"/projects/markbridge",chromeWebStore:"https://chromewebstore.google.com/detail/markbridge-%E2%80%93-multi-profil/jdmclnadijeiflbceglkmikakmgdcmji",github:null,featured:!0,visual:"markbridge"},{slug:"justenough",title:"Just Enough",logo:null,mark:"JE",tagline:"An ADHD Chrome task board. Enough structure to start — not another system to maintain.",description:"An ADHD Chrome task board. Enough structure to start the next thing — not another system to maintain instead of doing the work.",tags:["Chrome Extension","ADHD","Productivity"],features:[{title:"Start the next thing",desc:"A board that helps you pick up the next task instead of redesigning the board."},{title:"Chrome, close at hand",desc:"Lives in the browser you already work in."},{title:"Not a second job",desc:"Enough structure. No ritual, no points, no garden to tend."},{title:"Personal project",desc:"Built for how an ADHD brain actually starts work. No store listing."}],link:"/projects/justenough",github:null,featured:!1,cta:"Read the case study"},{slug:"dopo",title:"Dopo",logo:null,mark:"D",tagline:"A focus timer. Sit down, start, stay with the work.",description:"A focus timer with a waitlist at usedopo.com. Built to help you sit down, start, and stay with the work.",tags:["Focus","Timer","Waitlist"],features:[{title:"Sit down and start",desc:"Built to get you into the work, not to decorate a productivity stack."},{title:"Coming soon",desc:"A page is up at usedopo.com. Not a download, not a store listing."},{title:"A timer, not a suite",desc:"Focus first. No download on this page."},{title:"Personal product",desc:"Shipped as a side project, not a client build."}],link:"/projects/dopo",waitlist:"https://usedopo.com",github:null,featured:!1,cta:"Read the case study"},{slug:"aloft",title:"Aloft",logo:"/projects/aloft/logo.png",logoClass:"app-icon",eyebrow:"New release",pill:"macOS 26+",tagline:"Any window, always on top. Pick it from a grid of live previews, or pin what you are looking at with one shortcut.",description:"A macOS menu-bar app that keeps a window in front of everything else. The picker shows every open window as a live thumbnail, so you choose the one you mean at a glance instead of reading a list of titles.",tags:["macOS","Swift","Menu Bar","ScreenCaptureKit"],features:[{title:"Live previews",desc:"Every open window as a captured thumbnail, two columns, searchable. Pinned ones sort to the top."},{title:"One shortcut",desc:"Pins whatever is frontmost. Refuses combinations another app holds, and names the app when one answers behind its back."},{title:"Guided first run",desc:"Each permission asked once, verified, and the flow moves itself on the moment you grant it."},{title:"Honest about the limit",desc:"macOS will not let an app change another app's window level, so a pin is a re-raise. The README says so."}],link:"/projects/aloft",github:"https://github.com/iammayron/aloft",releases:"https://github.com/iammayron/aloft/releases/latest",featured:!0,visual:"aloft"},{slug:"gabble",title:"Gabble",logo:null,mark:"G",tagline:"An unofficial Google Chat desktop app. A dedicated window for people who live in Chat all day.",description:"An unofficial Google Chat desktop app. A dedicated window for people who live in Chat all day — not another browser tab to lose.",tags:["Desktop","Google Chat","Personal"],features:[{title:"A window, not a tab",desc:"Chat in its own desktop space so it does not vanish behind twenty other tabs."},{title:"Unofficial",desc:"Not a Google product. Built for personal use."},{title:"Draft-only",desc:"No public download, store listing, or GitHub release yet."},{title:"Personal project",desc:"For people who live in Chat all day."}],link:"/projects/gabble",github:null,featured:!1,cta:"Read the case study"}];function o(){let[e,r]=(0,a.useState)("light");return(0,a.useEffect)(()=>{let e=()=>r(document.documentElement.getAttribute("data-theme")||"light");e();let t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>t.disconnect()},[]),(0,t.jsx)("span",{"aria-label":"love",children:"dark"===e?"🤍":"🖤"})}function i(){return(0,t.jsx)("footer",{className:"footer",children:(0,t.jsxs)("div",{className:"container footer-inner",children:[(0,t.jsx)("div",{className:"footer-credit",children:(0,t.jsxs)("span",{children:["Made with ☕️ and ",(0,t.jsx)(o,{})," by Mayron · © ",new Date().getFullYear()]})}),(0,t.jsxs)("nav",{className:"footer-links","aria-label":"Site",children:[(0,t.jsx)(r.default,{href:"/",children:"Home"}),(0,t.jsx)(r.default,{href:"/#projects",children:"Projects"}),n.filter(e=>e.link&&!e.external).map(e=>(0,t.jsx)(r.default,{href:e.link,children:e.title},e.slug)),n.filter(e=>e.live).map(e=>(0,t.jsxs)("a",{href:e.live,target:"_blank",rel:"noopener noreferrer",children:[e.title," live"]},`${e.slug}-live`)),(0,t.jsx)("a",{href:"https://x.com/iammayron",target:"_blank",rel:"noopener noreferrer",children:"X"}),(0,t.jsx)("a",{href:"https://www.linkedin.com/in/iammayron/",target:"_blank",rel:"noopener noreferrer",children:"LinkedIn"}),(0,t.jsx)("a",{href:"https://www.instagram.com/iammayron_",target:"_blank",rel:"noopener noreferrer",children:"Instagram"}),(0,t.jsx)("a",{href:"https://buymeacoffee.com/iammayron",target:"_blank",rel:"noopener noreferrer",children:"🍕 Buy me a pizza"})]})]})})}n.filter(e=>e.featured),n.filter(e=>!e.featured),e.s(["default",()=>i],71652)},6476,e=>{"use strict";var t=e.i(43476),a=e.i(71645);function r(){let e=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=e.current;if(!t)return;let a=()=>{let e=t.getBoundingClientRect(),a=e.top+e.height/2,r=(window.innerHeight/2-a)/window.innerHeight;t.style.setProperty("--ty",`${-32*r}px`)},r=e=>{let a=t.getBoundingClientRect(),r=(e.clientX-(a.left+a.width/2))/a.width,n=(e.clientY-(a.top+a.height/2))/a.height;t.style.setProperty("--rx",`${-6*n}
1deg`),t.style.setProperty("--ry",`${8*r}deg`)},n=()=>{t.style.setProperty("--rx","0deg"),t.style.setProperty("--ry","0deg")};return window.addEventListener("scroll",a,{passive:!0}),t.addEventListener("mousemove",r),t.addEventListener("mouseleave",n),a(),()=>{window.removeEventListener("scroll",a),t.removeEventListener("mousemove",r),t.removeEventListener("mouseleave",n)}},[]),(0,t.jsxs)("section",{className:"hero",id:"top",children:[(0,t.jsx)("div",{className:"dot-field"}),(0,t.jsxs)("div",{className:"container hero-grid",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("span",{className:"hero-eyebrow eyebrow",children:[(0,t.jsx)("span",{className:"dot"}),"Available for select projects"]}),(0,t.jsxs)("h1",{className:"display-xl",children:["Building software"," ",(0,t.jsx)("br",{}),"with ",(0,t.jsx)("span",{className:"accent",children:"craft"})," ",(0,t.jsx)("br",{}),"and ",(0,t.jsx)("span",{className:"accent",children:"curiosity."})]}),(0,t.jsx)("p",{className:"hero-sub",children:"I'm Mayron, a software engineer working remotely. I focus on shipping performant web apps, useful tools, and thoughtful Shopify experiences."}),(0,t.jsxs)("div",{className:"hero-actions",children:[(0,t.jsx)("a",{className:"btn btn-primary",href:"#projects",children:"See my work"}),(0,t.jsx)("a",{className:"btn btn-secondary",href:"mailto:[email protected]?subject=Player%202%20Has%20Entered%20The%20Chat%20%F0%9F%95%B9%EF%B8%8F",children:"Get in touch"})]}),(0,t.jsxs)("div",{className:"hero-socials","aria-label":"Social links",children:[(0,t.jsx)("a",{href:"https://github.com/iammayron",target:"_blank",rel:"noopener noreferrer","aria-label":"GitHub",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56 0-.27-.01-1.18-.02-2.14-3.2.7-3.87-1.36-3.87-1.36-.52-1.32-1.27-1.67-1.27-1.67-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.75 2.68 1.24 3.34.95.1-.74.4-1.24.72-1.53-2.55-.29-5.24-1.28-5.24-5.7 0-1.26.45-2.29 1.18-3.1-.12-.29-.51-1.46.11-3.05 0 0 .97-.31 3.18 1.18A11.1 11.1 0 0 1 12 6.8c.98.01 1.97.13 2.89.39 2.21-1.49 3.18-1.18 3.18-1.18.62 1.59.23 2.76.11 3.05.74.81 1.18 1.84 1.18 3.1 0 4.43-2.69 5.41-5.26 5.69.41.36.78 1.06.78 2.14 0 1.55-.01 2.79-.01 3.17 0 .31.21.68.8.56C20.21 21.39 23.5 17.08 23.5 12 23.5 5.65 18.35.5 12 .5z"})})}),(0,t.jsx)("a",{href:"https://www.linkedin.com/in/iammayron/",target:"_blank",rel:"noopener noreferrer","aria-label":"LinkedIn",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M20.45 20.45h-3.55v-5.57c0-1.33-.03-3.04-1.85-3.04-1.86 0-2.14 1.45-2.14 2.95v5.66H9.36V9h3.41v1.56h.05c.47-.9 1.63-1.85 3.36-1.85 3.59 0 4.26 2.36 4.26 5.43v6.31zM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z"})})}),(0,t.jsx)("a",{href:"https://x.com/iammayron",target:"_blank",rel:"noopener noreferrer","aria-label":"X",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77z"})})}),(0,t.jsx)("a",{href:"https://www.instagram.com/iammayron_",target:"_blank",rel:"noopener noreferrer","aria-label":"Instagram",children:(0,t.jsxs)("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[(0,t.jsx)("rect",{x:"3",y:"3",width:"18",height:"18",rx:"5"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"4"}),(0,t.jsx)("circle",{cx:"17.5",cy:"6.5",r:"1",fill:"currentColor",stroke:"none"})]})})]}),(0,t.jsxs)("div",{className:"hero-meta",children:[(0,t.jsx)("span",{className:"hero-meta-item",children:"📍 Remote · Worldwide"}),(0,t.jsx)("span",{className:"hero-meta-item",children:"🇧🇷 / 🇺🇸 EN · PT"}),(0,t.jsx)("span",{className:"hero-meta-item",children:"☕️ Powered by coffee"})]})]}),(0,t.jsxs)("div",{className:"photo-card",ref:e,style:{transform:"perspective(1200
1px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--ty,0px))",transformStyle:"preserve-3d",transition:"transform 0.4s cubic-bezier(0.2, 0.6, 0.2, 1)"},children:[(0,t.jsx)("img",{src:"/profile.png",alt:"Mayron portrait"}),(0,t.jsx)("span",{className:"pixel-egg"}),(0,t.jsxs)("div",{className:"photo-tag",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"name",children:"Mayron Alves"}),(0,t.jsx)("div",{className:"role",children:"Software Engineer · Tech Lead"})]}),(0,t.jsx)("span",{className:"badge",children:"PLAYER 1"})]})]})]})]})}e.s(["default",()=>r])},34103,e=>{"use strict";var t=e.i(43476),a=e.i(71645);function r({end:e,suffix:r="",duration:n=1400}){let o=(0,a.useRef)(null),[i,s]=(0,a.useState)(0),[l,c]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(!o.current)return;let t=new IntersectionObserver(t=>{t.forEach(t=>{if(t.isIntersecting&&!l){c(!0);let t=performance.now(),a=r=>{let o=Math.min(1,(r-t)/n);s(Math.round(e*(1-Math.pow(1-o,3)))),o<1&&requestAnimationFrame(a)};requestAnimationFrame(a)}})},{threshold:.5});return t.observe(o.current),()=>t.disconnect()},[e,n,l]),(0,t.jsxs)("span",{ref:o,children:[i,(0,t.jsx)("span",{className:"unit",children:r})]})}e.s(["default",()=>r])},93881,e=>{"use strict";var t=e.i(43476),a=e.i(71645);let r={Experience:[{company:"DevSquad",location:"Utah, United States · Remote",roles:[{role:"Technical Product Manager",dates:"Jun 2021 – Dec 2024"},{role:"Technical Lead",dates:"Dec 2020 – Jun 2021"},{role:"Senior Software Developer",dates:"Jan 2020 – Dec 2020"}],desc:"Led product strategy and cross-functional engineering teams. Drove technical architecture decisions, managed roadmaps, and mentored developers across the organization.",tags:["PHP","JavaScript","Web","Front-end","Leadership"]},{company:"Movida Car Rental",location:"Brazil",roles:[{role:"Senior PHP Developer",dates:""}],desc:"Built and maintained web applications for one of Brazil's largest car-rental companies.",tags:["PHP","HTML","Web"]},{company:"IPDV, Strategic Intelligence in Systems",location:"Brazil",roles:[{role:"PHP Developer",dates:""}],desc:"Built strategic web systems and internal tooling for enterprise clients.",tags:["PHP","HTML","Web"]},{company:"AprendaCerto",location:"Brazil",roles:[{role:"PHP Developer",dates:""}],desc:"Developed a corporate e-learning platform in PHP. Built automated tests with Selenium and Facebook PHP WebDriver.",tags:["PHP","Selenium","Web"]},{company:"Fox Solution",location:"Brazil",roles:[{role:"Software Developer",dates:""}],desc:"Website development, online tools, and rich content managers in PHP.",tags:["PHP","HTML","Web"]},{company:"Escala Web",location:"Brazil",roles:[{role:"Software Developer",dates:""}],desc:"Full-stack web development using PHP and front-end technologies.",tags:["PHP","HTML","Web"]},{company:"Mega Fast — Payroll Loan",location:"Brazil",roles:[{role:"IT Support",dates:"Jan 2012 – Dec 2012"}],desc:"Provided IT support and maintained internal systems.",tags:["PHP"]}],Education:[{company:"Ensign College",role:"Bachelor of Applied Science, Computer Software Engineering",dates:"Jan 2024 – Current"},{company:"Columbia College",role:"Bachelor of Applied Science, Management Information Systems",dates:"Jun 2023 – Dec 2023"},{company:"Universidade Anhembi Morumbi",role:"Associate Degree, Systems Analysis & Development",dates:"2019 – 2021"}],Skills:["JavaScript","TypeScript","PHP","Python","SQL","HTML","CSS","React","React Native","Vue","Next.js","Nuxt","Tailwind CSS","Vite","Node.js","Bun","Express","Laravel","Livewire","Shopify","GraphQL","REST APIs","MySQL","PostgreSQL","MongoDB","Docker","AWS","Azure","GCP","Git","CI/CD","Product Management","Technical Leadership","Scrum","Entrepreneurship","Mentoring","Cross-functional Collaboration"],Certs:[{name:"Scrum: The Basics",from:"LinkedIn",dates:"Jul 2025"},{name:"Characteristics of a Great Scrum Master",from:"LinkedIn",dates:"Jul 2025"},{name:"Microsoft Office Specialist: Excel Associate (Microsoft 365 Apps)",from:"Microsoft",dates:"Feb 2025"},{name:"International Business Foundations",from:"LinkedIn",dates:"Jul 2024"},{name:"Entrepreneurship: Finding and Testing Your Business Idea",from:"LinkedIn",dates:"Jul 2024"},{name:"Negotiation Foundations",from:"LinkedIn",dates:"Jul 2024"},{name:"Having Difficult Conversations",from:"LinkedIn",dates:"Apr 2024"},{name:"Communicating with Emotional Intelligence",from:"LinkedIn",dates:"Mar 2024"},{name:"Effective Listening",from:"LinkedIn",dates:"Feb 2024"},{name:"Cultivating a Growth Mindset",from:"LinkedIn",dates:"Jan 2024"}],Recs:[{quote:"Mayron is an outstanding partner. Always trying to improve the product, develop new features, and rethink workflow, while managing teams in the best way for both the product and the engineering team.",author:"Gustavo Silva",authorMeta:"Softw
1are Engineer",rel:"Reported directly to Mayron"},{quote:"Mayron is extremely smart and a great person to work with. He's always trying to improve and learn something new. Definitely recommend him for any role that requires solving complex problems.",author:"Mauricio Kiyama",authorMeta:"Building products at DevSquad",rel:"Managed Mayron directly"},{quote:"Mayron have tech and business qualifications. This highly qualified professional played as Tech Lead and Project Manager and I could saw a very hard working between those two fronts. Always delivering valuable features and playing as a team to help.",author:"André Lunelli",authorMeta:"Senior Software Engineer | Laravel & PHP Specialist",rel:"Worked with Mayron on the same team"},{quote:"I had the pleasure of working with Mayron for several months, and I can definitely say he has an exceptional talent for providing great solutions for every situation. His exceptional skills in product management and development are matched by his ability to think critically and solve problems with creativity and precision. His communication is clear, concise, and empathetic. He's always playing as a team, giving his best advices, always ready to lend a hand or share his insights to help others grow. I have no doubt that Mayron will continue to achieve great things, and I feel fortunate to have had the opportunity to work with him. He is a true professional and a wonderful person to work alongside. I highly recommend him without hesitation!",author:"Flavio Gonzalez Pano",authorMeta:"Technical Product Manager",rel:"Worked with Mayron on the same team"},{quote:"I had the pleasure of working with Mayron as my product manager and later as a fellow manager, and it's rare to meet someone who excels at so many aspects of product development. Mayron isn't just an outstanding developer with a talent for writing high-quality, efficient code — he's also a fantastic product manager who understands how to align technical solutions with business goals. He consistently demonstrates exceptional attention to detail, ensures projects are delivered on time, and has a natural ability to collaborate with cross-functional teams. His insights and commitment elevate the entire team's performance, and working with him is productive and genuinely enjoyable. Working with Mayron has been one of the highlights of my career. His combination of technical excellence and strategic thinking is truly rare.",author:"Sandro Engler Boçon",authorMeta:"Technical Product Manager",rel:"Reported directly to Mayron"},{quote:"I've been working with Mayron on several projects, some of them where he was a Lead Tech Leader, and on one of them he is a Product Manager. Regardless of his role in the team, Mayron shows a great combination of leadership, hard skills, and soft skills. In the technical field, Mayron has outstanding skills with PHP and Laravel, bringing great solutions for each problem we face during the projects, no matter if the problem is related to payments, real-time notifications, AWS, Docker, queues, caching, etc. Mayron is a great asset for any company.",author:"Abimael Tavares",authorMeta:"Full-Stack Engineer | ReactJS | VueJS | NodeJS | Laravel",rel:"Reported directly to Mayron"},{quote:"I've had the privilege of working with Mayron across various capacities: first as my manager, then as my tech lead, and later as a fellow manager. He consistently stands out for his proactivity, reliability, and exceptional skills as both a programmer and communicator. His ability to foster strong connections with peers and clients alike makes him an indispensable asset in crafting outstanding products—a talent he demonstrates time and again.",author:"Nelson Pereira",authorMeta:"Product Manager @ DevSquad",rel:"Worked with Mayron on the same team"},{quote:"Mayron is not only an outstanding developer but also an exceptional technical leader and, eventually, a highly skilled Technical Product Manager. He possesses a meticulous understanding of products, balancing both technical parameters and business vision seamlessly. I can confidently say he is a well-rounded professional. Beyond his technical and managerial expertise, Mayron is an excellent individual with an extraordinary level of commitment.",author:"Caio Vinicius Pratavieira Alves",authorMeta:"Technical Product Manager at DevSquad",rel:"Reported directly to Mayron"},{quote:"I had the pleasure of working under Mayron as my Tech Lead in a previous role. During this time, Mayron played a pivotal role in the development of our team and consistently demonstrated exceptional technical expertise in programming. We faced numerous challenges, and in each instance, he showcased remarkable skills in team management, technical guidance, and the development of actionable plans. Mayron is undoubtedly the ideal person for any project involving web development!",author:"AJ Meireles",authorMeta:"PHP Specialist | Full-stack PHP Developer | Senior Laravel Engineer",rel:"Reported directly to Mayron"},{quote:"I had the privilege of working with Mayron for four years, during which he consistently demonstrated exceptional technical expertise and always had a strategic approach to product management. As a Technical Product Manager, he does an excellent job at closing the gap between the complex technical requirements and the business needs. Besides his technical skills, I believe his collaborative mindset makes him an invaluable team member. Mayron was always able to achieve project success while I worked with him. He is also a supp
1ortive teammate and mentor. He has a knack for motivating coworkers and leading by example, inspiring everyone to do their best. I highly recommend Mayron to any organization looking for a skilled and results-driven employee. He's a true asset to any team.",author:"Mariana Monteiro",authorMeta:"Product Manager | Business Analyst",rel:"Worked with Mayron on the same team"},{quote:"Mayron is an incredible person, with whom I had the privilege of working and learning. Without a doubt, he was one of the best people I have ever met. Every piece of advice and lesson I received from him will stay with me for a lifetime. Always willing to help and correct when necessary, Mayron demonstrated a true spirit of leadership, sharing knowledge with patience and dedication. Working with him was a deeply enriching and unforgettable experience.",author:"Daniel Henrique",authorMeta:"Software Engineer GoLang | PHP",rel:"Reported directly to Mayron"},{quote:"Mayron is an excellent person, an honest and communicative professional. We work together at Devsquad and I was always impressed with his technical skills and how he was able to explain difficult technical issues in simple terms, no wonder he was our tech lead. I learned a lot from him.",author:"Ítalo Epifânio",authorMeta:"AI/ML Platform Engineer | Researcher",rel:"Reported directly to Mayron"}],Languages:[{name:"English",level:"Native or bilingual proficiency"},{name:"Portuguese",level:"Native or bilingual proficiency"}]};function n(){let[e,n]=(0,a.useState)("Experience"),o=Object.keys(r);return(0,t.jsx)("section",{id:"resume",children:(0,t.jsxs)("div",{className:"container",children:[(0,t.jsxs)("div",{className:"section-head reveal",children:[(0,t.jsx)("span",{className:"eyebrow magenta",children:"Career"}),(0,t.jsx)("h2",{className:"display-l",children:"A decade in motion."}),(0,t.jsx)("p",{className:"body-l",style:{maxWidth:640},children:"From PHP shops in Brazil to leading remote teams in the US. Here's the path so far."})]}),(0,t.jsx)("div",{className:"resume-tabs reveal",role:"tablist",children:o.map(a=>(0,t.jsx)("button",{className:`resume-tab ${e===a?"active":""}`,onClick:()=>n(a),role:"tab","aria-selected":e===a,children:a},a))}),(0,t.jsxs)("div",{className:"reveal",children:["Experience"===e&&r.Experience.map(e=>(0,t.jsxs)("div",{className:"resume-card",children:[(0,t.jsxs)("div",{className:"head",children:[(0,t.jsx)("h3",{className:"company",children:e.company}),(0,t.jsx)("span",{className:"location",children:e.location})]}),e.roles.map(e=>(0,t.jsxs)("div",{className:"role-row",children:[(0,t.jsx)("span",{className:"role",children:e.role}),(0,t.jsx)("span",{className:"dates",children:e.dates})]},e.role)),(0,t.jsx)("p",{className:"desc",children:e.desc}),(0,t.jsx)("div",{className:"tags",children:e.tags.map(e=>(0,t.jsx)("span",{className:"tag",children:e},e))})]},e.company)),"Education"===e&&r.Education.map(e=>(0,t.jsxs)("div",{className:"resume-card",children:[(0,t.jsxs)("div",{className:"head",children:[(0,t.jsx)("h3",{className:"company",children:e.company}),(0,t.jsx)("span",{className:"location",children:e.dates})]}),(0,t.jsx)("p",{className:"desc",style:{margin:"8px 0 0"},children:e.role})]},e.company)),"Skills"===e&&(0,t.jsx)("div",{className:"skills-cloud",children:r.Skills.map(e=>(0,t.jsx)("span",{className:"skill-pill",children:e},e))}),"Certs"===e&&r.Certs.map(e=>(0,t.jsx)("div",{className:"resume-card",style:{padding:"20px 28px"},children:(0,t.jsxs)("div",{className:"head",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"company",style:{fontSize:18,marginBottom:4},children:e.name}),(0,t.jsx)("span",{style:{fontSize:13,color:"var(--accent)"},children:e.from})]}),(0,t.jsx)("span",{className:"dates",children:e.dates})]})},e.name)),"Recs"===e&&r.Recs.map(e=>(0,t.jsxs)("div",{className:"rec-card",children:[(0,t.jsxs)("p",{className:"quote",children:["“",e.quote,"”"]}),(0,t.jsx)("div",{className:"author",children:e.author}),(0,t.jsx)("div",{className:"author-meta",children:e.authorMeta}),(0,t.jsx)("div",{className:"rel",children:e.rel})]},e.author)),"Languages"===e&&(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16},children:r.Languages.map(e=>(0,t.jsxs)("div",{className:"resume-card",style:{margin:0},children:[(0,t.jsx)("h3",{className:"company",style:{fontSize:20},children:e.name}),(0,t.jsx)("p",{className:"desc",style:{margin:"4px 0 0"},children:e.level})]},e.name))})]})]})})}e.s(["default",()=>n])},70269,e=>{"use strict";var t=e.i(71645);function a(){return(0,t.useEffect)(()=>{let e=document.querySelectorAll(".reveal");
1if(!("IntersectionObserver"in window))return void e.forEach(e=>e.classList.add("in"));let t=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(e.target.classList.add("in"),t.unobserve(e.target))})},{threshold:.12,rootMargin:"0px 0px -40px 0px"});return e.forEach(e=>t.observe(e)),()=>t.disconnect()},[]),null}e.s(["default",()=>a])}]);

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.