1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[405],{4202:function(e,t,n){"use strict";n.r(t),n.d(t,{__N_SSG:function(){return O},default:function(){return _}});var r=n(7105),o=n(4246),i=n(8720),s=n(7378),a=n(8298);function c(){var e=(0,i.Z)(["\n color: ",";\n"]);return c=function(){return e},e}function h(){var e=(0,i.Z)(["\n width: 100%;\n display: flex;\n justify-content: flex-end;\n\n font-weight: 300;\n opacity: 0.7;\n font-style: italic;\n"]);return h=function(){return e},e}function l(){var e=(0,i.Z)(["\n line-height: 1.4;\n"]);return l=function(){return e},e}function d(){var e=(0,i.Z)(["\n font-weight: 900;\n font-size: 2em;\n"]);return d=function(){return e},e}function u(){var e=(0,i.Z)(["\n padding: 20px;\n max-width: 750px;\n"]);return u=function(){return e},e}function f(){var e=(0,i.Z)(["\n margin-bottom: 2em;\n margin-top: -0.5em;\n"]);return f=function(){return e},e}var m=function(){var e=(0,s.useState)(),t=e[0],n=e[1];return(0,s.useLayoutEffect)((function(){var e,t,r,o,i,s,a=Boolean(null===(e=window)||void 0===e?void 0:e.chrome)&&!1===(null===(t=window)||void 0===t||null===(r=t.navigator)||void 0===r||null===(o=r.userAgentData)||void 0===o?void 0:o.mobile)&&(null===(i=window)||void 0===i||null===(s=i.navigator)||void 0===s?void 0:s.userAgentData.brands.find((function(e){return"Chromium"===e.brand})));n(a)}),[]),(0,o.jsxs)(w,{children:[(0,o.jsx)(j,{children:"Hi, I'm Cyrus :)"}),(0,o.jsx)(x,{children:"This is my engineering-focused personal website."}),(0,o.jsx)(p,{titleText:"Highlights from my favorite companies:",elements:[(0,o.jsxs)(x,{children:["At"," ",(0,o.jsx)(b,{color:v.jam.dim,href:"https://jam.dev",children:"Jam"}),", I'm working at with my two favorite PMs from Cloudflare! I have a great time doing everything from architecting + implementing systems with my teammates, to performance optimizations, to simply finding a product area, highlighting it, and improving it to the point where customers love it. If you want to work with me,"," ",(0,o.jsx)(b,{href:"https://8wvzuv0oszm.typeform.com/to/MNRVQWaa",children:"we're hiring!"})]}),(0,o.jsxs)(x,{children:["At"," ",(0,o.jsx)(b,{color:v.tandem.main,href:"https://tandem.chat",children:"Tandem"}),", I shipped features closely with my favorite designer,"," ",(0,o.jsx)(b,{href:"https://bernatfortet.com/",children:"Bernat"}),"! I prototyped interesting ideas"," ",(0,o.jsx)(b,{href:"https://blog.tandem.chat/cross-talk/",children:"(like crosstalk)"}),", and shipped them to production. To free up ",(0,o.jsx)(b,{href:"https://timsu.org",children:"Tim's"})," busy EM schedule, I took ownership of the most boring part of our app: desktop Electron features and maintenance. From my work in that area, I"," ",(0,o.jsx)(b,{href:"https://blog.tandem.chat/portal-windows/",children:"wrote and open-sourced"})," ","our dynamic window-management library,"," ",(0,o.jsx)(b,{href:"https://github.com/cryptagon/portal-windows",children:"portal windows"}),"."]}),(0,o.jsxs)(x,{children:["At"," ",(0,o.jsx)(b,{color:v.cloudflare.darker,href:"https://www.cloudflare.com",children:"Cloudflare"}),": I owned the DNS portion of Cloudflare Access. On a short deadline, I architected a complex auth flow for DNS resolvers and end-users that would allow us to ship without requiring changes from other teams. My eng work ranged from modifying 1.1.1.1's resolver code (Lua), building our beta API (Go), designing our DB schema (pgSQL), and writing a worker (Typescript) to bridge auth across datacenters, and more. A formative new-grad experience :)"]})]}),(0,o.jsx)(p,{titleText:"Some deep-dives on tech I've built in my personal time:",elements:[(0,o.jsxs)(x,{children:[(0,o.jsx)(b,{href:"https://blog.cyrusroshan.com/post/phone-data-hotspot",children:"An ad-hoc personal hotspot"}),", for when you don't have a hotspot plan enabled by your phone carrier"]}),(0,o.jsxs)(x,{children:[(0,o.jsx)(b,{href:"https://blog.cyrusroshan.com/post/spin-to-win",children:"A 3d scanner"})," made cheaply"]}),(0,o.jsxs)(x,{children:[(0,o.jsx)(b,{href:"https://blog.cyrusroshan.com/post/electronic-banjo",children:"An electronic banjo"}),"\u2014",(0,o.jsx)("i",{children:"NOT"})," an electric banjo"]})]}),(0,o.jsxs)(x,{children:["More writing can be found ",(0,o.jsx)(b,{href:"https://blog.cyrusroshan.com/",children:"at my blog"})," or"," ",(0,o.jsx)(b,{href:"https://twitter.com/cyrusroshan",children:"on Twitter"}),"."]}),t&&(0,o.jsx)(y,{children:(0,o.jsxs)(x,{children:["Want to see a ",(0,o.jsx)(b,{href:"/hosted-projects/magic-card-paste",children:"magic trick"}),"?"]})}),(0,o.jsx)("hr",{}),(0,o.jsx)(x,{style:{opacity:.7},children:(0,o.jsx)(p,{titleText:"Historical links:",elements:[(0,o.jsx)(b,{href:"https://github.com/cyrusroshan",children:"Github"}),(0,o.jsx)(b,{href:"https://linkedin.com/in/cyrusroshan",children:"LinkedIn"}),(0,o.jsx)(b,{href:"https://devpost.com/cyrusroshan",children:"Hackathon Archive"})]})})]})},p=function(e){return(0,o.jsxs)(o.Fragment,{children:["titleText"in e&&(0,o.jsx)(x,{children:e.titleText}),"title"in e&&e.title,(0,o.jsx)(g,{children:e.elements.map((function(e,t){return(0,o.jsx)("li",{children:e},t)}))})]})},g=a.Z.ul(f()),w=a.Z.div(u()),j=a.Z.h1(d()),x=a.Z.p(l()),y=a.Z.div(h()),b=a.Z.a(c(),(function(e){return e.color})),v={cloudflare:{lighter:"#faad3e",darker:"#f48121"},tandem:{main:"#4341dc",alt:"#00b6b6"},jam:{main:"#ff4070",dim:"#bf224a",alt:"#73e5bf"}};function k(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var O=!0;function _(e){return(0,o.jsx)(m,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};
1t%2?k(Object(n),!0).forEach((function(t){(0,r.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},e))}},4423:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return n(4202)}])}},function(e){e.O(0,[987,774,888,179],(function(){return t=4423,e(e.s=t);var t}));var t=e.O();_N_E=t}]);
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.