👋 Hi, I'm Nicolas Charpentier
I'm a Software Engineer mainly playing with React Native, React, GraphQL, and Continuous Integrations (CircleCI, GitHub Actions). I'm an open source enthusiast, and I enjoy removing friction from the developer experience. I often describe myself as someone doing the "backend" work of the frontend: frontend architecture and infrastructure. Currently working at Shortcut (formerly Clubhouse).
Apollo Client's Hidden Gems: Interface-Based Type Policies
Did you know that type policies can also be applied to interfaces and not just to "types"!? 🤯
UI Flickering With Apollo Client: Previous Data to the Rescue!
Have you ever noticed that using Apollo Client could lead to some UI flickers within your app? Especially when you refetch. Let's see how using previousData could help solve this bad UX.
GraphQL Enums Are Unsafe
We often talk about how we shouldn't introduce breaking changes in GraphQL, but fail to mention how enums in GraphQL are, by nature, almost always introducing breaking changes. Let's go over best practices to write resilient GraphQL applications.
Open-Ended Unions and Autocomplete With TypeScript
Let's see how to achieve an open-ended union in TypeScript to provide autocomplete on literal string unions.
Graphite: The End of Mammoth Pull Requests? My Experience
Ever felt trapped by colossal pull requests or tangled in merge conflicts? Dive into my experience with Graphite, the game-changer in code reviews. Discover the power of stacking, stay unblocked, and embrace a smoother Git journey. 🚀
Testing TypeScript Types: Part 2 (Advanced Solutions)
Advanced solutions to test TypeScript types.
Testing TypeScript Types: Part 1
Preamble and early solution to start testing TypeScript types.
Properly type Object.keys and Object.entries
Have you ever noticed that Object.keys and Object.entries are a little bit tricky to work with in TypeScript? They won't return what you would expect. Here's how to properly type them.
Use Custom Merge Driver to Simplify Git Conflicts
Tired of solving merge conflicts manually when it could be automated? Let's leverage Git's custom merge driver to simplify the process.
Enforce Best Practices Incrementally With Betterer
Using Betterer to adopt, enforce, and teach best practices incrementally without having to refactor the whole codebase.
Software Engineering is like cooking chicken.
Find What Commit Introduced a Bug With Git Bisect
Let's see how to efficiently track down a bug even without knowing the codebase.
Array.prototype.groupBy to the rescue!
Wrapping Gatsby's <Link> with TypeScript
How to properly wrap Gatsby's <Link> component while preserving GatsbyLinkProps type.
Setting up an Example App for Your React Native Library
Having a hard time with a React Native example app? Here’s how you can simplify this with Metro bundler.
React Native at Classcraft
We had to carefully find a way to introduce React Native bit-by-bit into the existing native application.
Arrow Functions in Class Properties Might Not Be As Great As We Think
Since the last year, the Class Properties Proposal simplify our life, especially in React with the internal state, or even with statics ones like propTypes and defaultProps. But, should we really use arrow functions in class field properties?
5 Things You Should Know About ES8
ECMAScript 2017 8th edition (ES2017/ES8) has been officially released and published a few weeks ago, let’s figure it out some important changes. All of these are available with Node 8 and with the latest version of browsers without babel or any polyfills.
Continuous Integration with Angular CLI
Angular CLI is a powerful tool to scaffold and build Angular apps. Not only it provides you scalable project structure, instead, it handles all common tedious tasks for you out of the box and it already follows the Angular best practices.
When you build a piece of software you want to build a reliable one, so often you’re using various continuous integration tools. But, is your continuous integration process is as reliable as you think?