# Devin Schulz > Devin Schulz is a Senior Frontend Engineer at Stripe. He has been building for the web since 2012, first as a designer and then as a frontend engineer. This is his personal portfolio, with selected work and writing on code and design. Every page below is available as Markdown. - Site: https://devinschulz.com/ - Contact: hello@devinschulz.com - Code: https://github.com/devinschulz - Profile: https://www.linkedin.com/in/devinschulz/ ## Selected work - [Cape](https://devinschulz.com/work/cape/index.md): Designer & Lead Frontend Engineer, 2020-2025. Product design and frontend leadership for an AI workspace spanning conversation, risk dashboards, and document review. - [Warranties](https://devinschulz.com/work/warranties/index.md): Designer & Developer, 2023-2025. Designing and building a small app for tracking the things you own and the coverage that comes with them, from first release to the end of support in 2025. - [InVision](https://devinschulz.com/work/invision/index.md): Senior Software Engineer, 2014-2020. Frontend engineering on the tools that sit between design and development: Inspect, Conversations and Boards. ## Writing 19 articles from 2018–2026. Older posts are marked as archived and keep their original publication dates; details in those posts may have aged. - [Building a Chat Interface That Doesn't Fight Your Scroll Position](https://devinschulz.com/blog/building-a-chat-interface-that-doesnt-fight-your-scroll-position/index.md): 2026. A React implementation for following streaming replies, pausing when someone scrolls up, and keeping their place when older messages load. Includes a working demo. - [Reflecting on Twelve Years of Remote Work](https://devinschulz.com/blog/reflecting-on-twelve-years-of-remote-work/index.md): 2026. Looking back on nearly twelve years of remote work, what changed during COVID, and what I still appreciate about working from home. - [The Hardest Part of Frontend Development Isn't Writing Code](https://devinschulz.com/blog/the-hardest-part-of-frontend-development-isnt-writing-code/index.md): 2026. After more than a decade of building interfaces, the hardest work is deciding how they should behave when things don't go as planned. - [Using React Component Variants to Compose CSS Classes](https://devinschulz.com/blog/using-react-component-variants-to-compose-css-classes/index.md): 2022. Learn how to build React component variants by composing CSS classes in a typesafe and flexible manner. - [My Definition of a First-Class Pull Request](https://devinschulz.com/blog/my-definition-of-a-first-class-pull-request/index.md): 2020. Learn how to spruce up your pull requests with a few simple tips. These tips shouldn't add more than a couple of minutes to your workflow, and you'll look like a rockstar to your peers. - [Handling an Event Callback Once](https://devinschulz.com/blog/handling-an-event-callback-once/index.md): 2020. Learn how to simplify your code by using a simple trick to remove an event listener after an event has been fired once. - [Rename Fields by Using Aliases in GraphQL](https://devinschulz.com/blog/rename-fields-by-using-aliases-in-graphql/index.md): 2020. Learn how to rename fields of a GraphQL object by using aliases. - [Filter Out Multiple Console Messages in Google Chrome](https://devinschulz.com/blog/filter-out-multiple-console-messages-in-google-chrome/index.md): 2020. Learn how to filter out multiple console messages by using either regular expressions or prefixing a string with a hyphen-minus. - [Restrictions While Styling Visited Links](https://devinschulz.com/blog/restrictions-while-styling-visited-links/index.md): 2020. Learn what the :visited pseudo-class selector is and the limits on how you can style it. - [Modify Create React App's Babel Configuration Without Ejecting](https://devinschulz.com/blog/modify-create-react-apps-babel-configuration-without-ejecting/index.md): 2020. Learn how to modify the underlying Create React App configuration with customize-cra to include new Babel plugins, all without having to eject. - [I've Lost Faith in Client-Side Analytics](https://devinschulz.com/blog/ive-lost-faith-in-client-side-analytics/index.md): 2019. Since switching to Netlify's server-side analytics, I learned how different the data is when compared to Google Analytics. - [Accumulate Complex Objects With the Reduce Method](https://devinschulz.com/blog/accumulate-complex-objects-with-the-reduce-method/index.md): 2019. Learn how to recursively reduce a nested data structure by harnessing the power of the Array.reduce method. - [Building the Inspect Measurement Engine](https://devinschulz.com/blog/building-the-inspect-measurement-engine/index.md): 2019. Thoughts and learnings I had while building the Inspect measurement engine. - [From Hugo to Next.js and Back Again](https://devinschulz.com/blog/from-hugo-to-next-js-and-back-again/index.md): 2019. Learn why I chose Hugo over a React-based static site generator for my blog. - [Reflecting on Four Years of Remote Work](https://devinschulz.com/blog/reflecting-on-four-years-of-remote-work/index.md): 2019. Learn about the good and the bad I've experienced while working remotely over the past four years. - [Building a Likes API With Google Cloud Functions](https://devinschulz.com/blog/building-a-likes-api-with-google-cloud-functions/index.md): 2018. Learn how to use Google Cloud Functions to build a likes API with Node. - [Copy React Props to Your Clipboard in Google Chrome](https://devinschulz.com/blog/copy-react-props-to-your-clipboard-in-google-chrome/index.md): 2018. Learn how to copy React props to your clipboard using Google Chrome and the React Developer Tools. - [Combining Synchronous Actions Using Redux Thunk](https://devinschulz.com/blog/combining-synchronous-actions-using-redux-thunk/index.md): 2018. Learn how to use Redux Thunk for handling several synchronous actions at once to modify different areas of the application state. - [Welcome Readers](https://devinschulz.com/blog/welcome-readers/index.md): 2018. My first post, about why it took me years to launch a blog of my own, why I landed on Hugo, and what I plan to write about. ## Site indexes and feeds - [Site search index](https://devinschulz.com/search.json) - [Writing tags](https://devinschulz.com/tags/index.md) - [Analytics articles](https://devinschulz.com/tags/analytics/index.md) - [Array articles](https://devinschulz.com/tags/array/index.md) - [Babel articles](https://devinschulz.com/tags/babel/index.md) - [Career articles](https://devinschulz.com/tags/career/index.md) - [CSS articles](https://devinschulz.com/tags/css/index.md) - [DevTools articles](https://devinschulz.com/tags/devtools/index.md) - [Firebase articles](https://devinschulz.com/tags/firebase/index.md) - [Flow articles](https://devinschulz.com/tags/flow/index.md) - [Frontend articles](https://devinschulz.com/tags/frontend/index.md) - [Google Cloud articles](https://devinschulz.com/tags/google-cloud/index.md) - [GraphQL articles](https://devinschulz.com/tags/graphql/index.md) - [JavaScript articles](https://devinschulz.com/tags/javascript/index.md) - [Jest articles](https://devinschulz.com/tags/jest/index.md) - [Map articles](https://devinschulz.com/tags/map/index.md) - [Node articles](https://devinschulz.com/tags/node/index.md) - [Opinion articles](https://devinschulz.com/tags/opinion/index.md) - [Performance articles](https://devinschulz.com/tags/performance/index.md) - [React articles](https://devinschulz.com/tags/react/index.md) - [Redux articles](https://devinschulz.com/tags/redux/index.md) - [Remote articles](https://devinschulz.com/tags/remote/index.md) - [Serverless articles](https://devinschulz.com/tags/serverless/index.md) - [Static Sites articles](https://devinschulz.com/tags/static-sites/index.md) - [Tailwind articles](https://devinschulz.com/tags/tailwind/index.md) - [Tailwind CSS articles](https://devinschulz.com/tags/tailwind-css/index.md) - [Testing articles](https://devinschulz.com/tags/testing/index.md) - [Today I Learned articles](https://devinschulz.com/tags/today-i-learned/index.md) - [TypeScript articles](https://devinschulz.com/tags/typescript/index.md) - [UX articles](https://devinschulz.com/tags/ux/index.md) - [Workflow articles](https://devinschulz.com/tags/workflow/index.md) - [Home page as Markdown](https://devinschulz.com/index.md) - [Writing index as Markdown](https://devinschulz.com/blog/index.md) - [RSS feed](https://devinschulz.com/index.xml)