# Devin Schulz > Senior Frontend Engineer at Stripe. Product interfaces where clarity, trust, and the small details are not optional. This file indexes the site for language models; every page below is also available as Markdown. - Site: https://devinschulz.com/ - Contact: hello@devinschulz.com - Code: https://github.com/devinschulz - Profile: https://www.linkedin.com/in/devinschulz/ ## Case studies - [Cape](https://devinschulz.com/work/cape/index.md): Designer & Lead Frontend Engineer. Product design and frontend leadership for an AI workspace spanning conversation, risk dashboards, and document review. - [InVision](https://devinschulz.com/work/invision/index.md): Senior Software Engineer, 2014 — 2020. Frontend engineering for the space between design and development. A look back at Inspect, Conversations, and Boards. - [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. ## Writing Archived posts, kept at their original publication dates. - [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 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 about what the :visited pseudo-class selector is and its limitations while styling them. - [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 about why I choose 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 bad's 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. Explore the journey of a designer-turned-developer as they tackle the challenges of creating a custom blog, choosing Hugo for its efficiency. Dive into this blog for insights into web development, best practices, and the balance between professional growth and personal commitments. Join a journey of learning, sharing, and community in the realm of frontend development. ## Optional - [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)