41554 blogs · [ { "id": "01a08797-d95e-707e-b491-6b0a479d8a39", "title": "“Help” Doesn't Mean What it Meant", "url": "https://kyleshevlin.com/help-doesnt-mean-what-it-meant/", "published_at": "2026-06-05T16:34:15+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a480e2db4", "title": "AsyncData", "url": "https://kyleshevlin.com/async-data/", "published_at": "2026-01-11T18:14:40+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4867084d", "title": "Nothing is Something", "url": "https://kyleshevlin.com/nothing-is-something/", "published_at": "2025-12-20T00:14:23+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a488cc329", "title": "data Attributes for Testing", "url": "https://kyleshevlin.com/data-attributes-for-testing/", "published_at": "2025-11-21T18:37:54+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4964ac58", "title": "Prefer Gaps To Margins", "url": "https://kyleshevlin.com/prefer-gaps-to-margins/", "published_at": "2025-06-23T15:20:35+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a49b6baaa", "title": "“Refactor” is Not a Scary Word", "url": "https://kyleshevlin.com/refactor-is-not-a-scary-word/", "published_at": "2025-02-27T16:45:58+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4a23e283", "title": "Fun Coding Exercise: Pyramid Slide Down", "url": "https://kyleshevlin.com/fun-coding-exercise-pyramid-slide-down/", "published_at": "2025-01-27T17:15:10+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4b0a02f9", "title": "Algorithm: Sliding Window", "url": "https://kyleshevlin.com/algorithm-sliding-window/", "published_at": "2025-01-16T18:32:25+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4b9cfbcf", "title": "The Consciousness Lottery", "url": "https://kyleshevlin.com/consciousness-lottery/", "published_at": "2024-11-19T16:24:07+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4bf4c62f", "title": "How I Built “Test Your Focus”", "url": "https://kyleshevlin.com/how-i-built-test-your-focus/", "published_at": "2024-11-15T03:13:17+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4c8c3595", "title": "What ADHD Feels Like to Me", "url": "https://kyleshevlin.com/what-adhd-feels-like-to-me/", "published_at": "2024-11-11T16:48:05+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4d529db2", "title": "Prefer Explicit Maps", "url": "https://kyleshevlin.com/prefer-explicit-maps/", "published_at": "2024-10-30T16:19:36+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4d8cbb27", "title": "My git Workflow for Refactoring", "url": "https://kyleshevlin.com/my-git-workflow-for-refactoring/", "published_at": "2024-09-29T16:34:56+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4e2c435b", "title": "Never Call new Date() Inside Your Components", "url": "https://kyleshevlin.com/never-call-new-date-inside-your-components/", "published_at": "2024-08-20T19:12:27+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4e5b1d41", "title": "Composable Flourishes", "url": "https://kyleshevlin.com/composable-flourishes/", "published_at": "2024-08-02T02:28:47+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4e8192d3", "title": "Prefer Alphabetized Object Keys", "url": "https://kyleshevlin.com/prefer-alphabetized-object-keys/", "published_at": "2024-07-30T15:27:23+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4ea090d7", "title": "Responsive Design and Composition", "url": "https://kyleshevlin.com/responsive-design-and-composition/", "published_at": "2024-06-15T02:34:01+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4f13b34d", "title": "Design System Retrospective", "url": "https://kyleshevlin.com/design-system-retrospective/", "published_at": "2024-05-23T15:51:54+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4f8637e7", "title": "Prefer Noun-Adjective Naming", "url": "https://kyleshevlin.com/prefer-noun-adjective-naming/", "published_at": "2024-05-18T23:21:57+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a4fb37676", "title": "Prefer Multiple Compositions", "url": "https://kyleshevlin.com/prefer-multiple-compositions/", "published_at": "2024-05-17T21:12:18+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a50282e09", "title": "align-items: center vs. text-align: center", "url": "https://kyleshevlin.com/align-items-center-vs-text-align-center/", "published_at": "2024-05-04T16:39:19+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a5126bf5b", "title": "Creating a React Native “Curved Bottom Bar” with Handwritten SVG", "url": "https://kyleshevlin.com/react-native-curved-bottom-bar-with-handwritten-svg/", "published_at": "2024-04-20T15:45:12+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a51fd4bcf", "title": "Tailwind “Minimum Full Height” Layout", "url": "https://kyleshevlin.com/tailwind-minimum-full-height-layout/", "published_at": "2024-03-30T18:23:51+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a5239df23", "title": "Make Checkpoint", "url": "https://kyleshevlin.com/make-checkpoint/", "published_at": "2024-03-29T16:01:20+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a52fb7c48", "title": "Agathist VSCode Themes", "url": "https://kyleshevlin.com/agathist-vscode-themes/", "published_at": "2024-03-16T16:55:07+00:00" }, { "id": "01a08797-d95e-707e-b491-6b0a5384da4c", "title": "Two Types of Composition", "url": "https://kyleshevlin.com/two-types-of-composition/", "published_at": "2024-03-12T15:23:44+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe058bfccb5", "title": "Agathist Q&A", "url": "https://kyleshevlin.com/agathist-q-and-a/", "published_at": "2024-03-05T16:35:56+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe059a93cf4", "title": "No Outer margin", "url": "https://kyleshevlin.com/no-outer-margin/", "published_at": "2024-02-26T16:13:32+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05a0aa0cb", "title": "Type TODO", "url": "https://kyleshevlin.com/type-todo/", "published_at": "2024-01-23T03:47:59+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05ac559c9", "title": "Wrangling Tuple Types", "url": "https://kyleshevlin.com/wrangling-tuple-types/", "published_at": "2024-01-21T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05b19919e", "title": "UI Composition", "url": "https://kyleshevlin.com/ui-composition/", "published_at": "2023-10-03T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05be6880a", "title": "Typescript Prevents Bad Things... and Good Things", "url": "https://kyleshevlin.com/typescript-prevents-bad-things-and-good-things/", "published_at": "2023-09-08T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05cdc0222", "title": "Quit Your YAP-ing", "url": "https://kyleshevlin.com/quit-your-yapping/", "published_at": "2023-08-14T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05cdd597f", "title": "Compound Components", "url": "https://kyleshevlin.com/compound-components/", "published_at": "2023-05-27T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05da677da", "title": "Context, Composition, and Flexibility", "url": "https://kyleshevlin.com/context-composition-and-flexibility/", "published_at": "2023-05-02T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05e94e3a8", "title": "Algorithms: Insertion Sort", "url": "https://kyleshevlin.com/algorithms-insertion-sort/", "published_at": "2023-01-22T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05ebf1004", "title": "Algorithms: Bubble Sort", "url": "https://kyleshevlin.com/algorithms-bubble-sort/", "published_at": "2023-01-18T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05f35184e", "title": "JSX was a Mistake", "url": "https://kyleshevlin.com/jsx-was-a-mistake/", "published_at": "2022-11-07T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe05f7d0a74", "title": "Capture Phase Event Handling in React", "url": "https://kyleshevlin.com/capture-phase-event-handling-in-react/", "published_at": "2022-06-18T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06027cbf7", "title": "Why Use useReducer?", "url": "https://kyleshevlin.com/why-use-use-reducer/", "published_at": "2022-06-06T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe060feda7d", "title": "Patterns for Functions with Conditionals", "url": "https://kyleshevlin.com/patterns-for-functions-with-conditionals/", "published_at": "2022-05-24T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe061dc03d1", "title": "Updating State with a Component", "url": "https://kyleshevlin.com/updating-state-with-a-component/", "published_at": "2022-05-05T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe062aadd07", "title": "Conway's Game of Life", "url": "https://kyleshevlin.com/conways-game-of-life/", "published_at": "2022-02-03T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06371604f", "title": "The Simulation Pattern", "url": "https://kyleshevlin.com/simulation-pattern/", "published_at": "2022-01-28T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe063da42db", "title": "The Wrapped State Setter Pattern", "url": "https://kyleshevlin.com/wrapped-state-setter-pattern/", "published_at": "2022-01-19T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe064a01417", "title": "Parametric Design", "url": "https://kyleshevlin.com/parametric-design/", "published_at": "2022-01-18T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe065309172", "title": "The “Folded Code” Test", "url": "https://kyleshevlin.com/the-folded-code-test/", "published_at": "2022-01-03T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0659c9cee", "title": "My Course Platform", "url": "https://kyleshevlin.com/my-course-platform/", "published_at": "2021-11-29T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe065d2e075", "title": "How I Would Use a UI Library", "url": "https://kyleshevlin.com/how-I-would-use-a-ui-library/", "published_at": "2021-11-06T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06668cc78", "title": "What is a Factory Function?", "url": "https://kyleshevlin.com/what-is-a-factory-function/", "published_at": "2021-11-05T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe066fc1162", "title": "Careful with Context Composition", "url": "https://kyleshevlin.com/careful-with-context-composition/", "published_at": "2021-10-18T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe067c671cc", "title": "Comparing `useRef` and `useState`", "url": "https://kyleshevlin.com/comparing-use-ref-and-use-state/", "published_at": "2021-09-22T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0680d9f02", "title": "What is a Closure?", "url": "https://kyleshevlin.com/what-is-a-closure/", "published_at": "2021-09-02T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0683d4406", "title": "Prefer Function Updaters in State Setters", "url": "https://kyleshevlin.com/prefer-function-updaters-in-state-setters/", "published_at": "2021-08-30T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe068ddb0f6", "title": "Dependency Injection and Default Parameters", "url": "https://kyleshevlin.com/dependency-injection-and-default-parameters/", "published_at": "2021-08-19T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe069090d14", "title": "Discriminated Unions and Destructuring in TypeScript", "url": "https://kyleshevlin.com/discriminated-unions-and-destructuring-in-typescript/", "published_at": "2021-08-11T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06925c44a", "title": "Prefer Declarative State Updaters", "url": "https://kyleshevlin.com/prefer-declarative-state-updaters/", "published_at": "2021-08-07T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0694ff7b3", "title": "How I Structure My React Projects", "url": "https://kyleshevlin.com/how-i-structure-my-react-projects/", "published_at": "2021-07-01T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe069afb4d9", "title": "What are “Magic Values”?", "url": "https://kyleshevlin.com/what-are-magic-values/", "published_at": "2021-06-26T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe069b226e4", "title": "`useMemo` and Stable Values", "url": "https://kyleshevlin.com/usememo-and-stable-values/", "published_at": "2021-06-08T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06a67444d", "title": "Symbolic Logic", "url": "https://kyleshevlin.com/symbolic-logic/", "published_at": "2021-05-12T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06b246687", "title": "Set Theory", "url": "https://kyleshevlin.com/set-theory/", "published_at": "2021-04-21T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06bc583ae", "title": "What is a Tuple?", "url": "https://kyleshevlin.com/what-is-a-tuple/", "published_at": "2021-04-01T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06c156c46", "title": "Conditional React Hooks", "url": "https://kyleshevlin.com/conditional-react-hooks/", "published_at": "2021-03-30T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06cbe787f", "title": "Debounce and Throttle Callbacks with React Hooks", "url": "https://kyleshevlin.com/debounce-and-throttle-callbacks-with-react-hooks/", "published_at": "2021-03-23T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06ce00986", "title": "How to Use React Context Effectively", "url": "https://kyleshevlin.com/how-to-use-react-context-effectively/", "published_at": "2021-03-11T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06d6a4062", "title": "Facade Pattern", "url": "https://kyleshevlin.com/facade-pattern/", "published_at": "2021-02-17T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06e3703a9", "title": "useEncapsulation", "url": "https://kyleshevlin.com/use-encapsulation/", "published_at": "2021-01-28T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06eafec9a", "title": "Encapsulation", "url": "https://kyleshevlin.com/encapsulation/", "published_at": "2020-12-29T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe06f1fc52c", "title": "Use Old School State", "url": "https://kyleshevlin.com/use-old-school-state/", "published_at": "2020-12-17T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0700eb858", "title": "Helpful Debugging Hooks", "url": "https://kyleshevlin.com/helpful-debugging-hooks/", "published_at": "2020-12-04T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07020b9bc", "title": "Headlight Vision", "url": "https://kyleshevlin.com/headlight-vision/", "published_at": "2020-11-10T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0705d7be4", "title": "Pattern Matching in JavaScript", "url": "https://kyleshevlin.com/pattern-matching/", "published_at": "2020-10-18T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0705f5f5c", "title": "Generator Functions", "url": "https://kyleshevlin.com/generator-functions/", "published_at": "2020-09-12T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0712b22ae", "title": "Multiple Boolean Props are a Code Smell", "url": "https://kyleshevlin.com/multiple-boolean-props-are-a-code-smell/", "published_at": "2020-08-28T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0719f9bd2", "title": "Mental Model of Use Effect", "url": "https://kyleshevlin.com/mental-model-of-use-effect/", "published_at": "2020-08-26T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0722d98b0", "title": "Tic-Tac-Toe in React", "url": "https://kyleshevlin.com/tic-tac-toe/", "published_at": "2020-08-02T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07245b20f", "title": "Using `React.memo` to Avoid Unnecessary Rerenders", "url": "https://kyleshevlin.com/using-react-memo-to-avoid-unnecessary-rerenders/", "published_at": "2020-06-16T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0733a6d65", "title": "Memoization: What, Why, and How", "url": "https://kyleshevlin.com/memoization/", "published_at": "2020-06-11T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe073c39190", "title": "The Three Kinds of React State", "url": "https://kyleshevlin.com/three-kinds-of-react-state/", "published_at": "2020-05-29T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe073f73ce9", "title": "Adding Guards to a `useReducer` Finite State Machine", "url": "https://kyleshevlin.com/adding-guards-to-a-use-reducer-finite-state-machine/", "published_at": "2020-05-27T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe074426eb8", "title": "Break Out Your Component Logic with Hooks", "url": "https://kyleshevlin.com/break-out-your-component-logic-with-hooks/", "published_at": "2020-05-19T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0753e163d", "title": "Adding Infinite States to a `useReducer` Finite State Machine", "url": "https://kyleshevlin.com/adding-infinite-states-to-a-use-reducer-finite-state-machine/", "published_at": "2020-05-15T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe075c3b901", "title": "Can a State Machine be a String?", "url": "https://kyleshevlin.com/can-a-state-machine-be-a-string/", "published_at": "2020-05-07T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07665f600", "title": "How to Use `useReducer` as a Finite State Machine", "url": "https://kyleshevlin.com/how-to-use-usereducer-as-a-finite-state-machine/", "published_at": "2020-05-04T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07671824b", "title": "Guidelines for State Machines and XState", "url": "https://kyleshevlin.com/guidelines-for-state-machines-and-xstate/", "published_at": "2020-04-03T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07714bc13", "title": "Managing Cyclomatic Complexity", "url": "https://kyleshevlin.com/managing-cyclomatic-complexity/", "published_at": "2020-03-02T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07744b234", "title": "Recursive React Components", "url": "https://kyleshevlin.com/recursive-react-components/", "published_at": "2020-02-20T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0779a04a9", "title": "Enumerate, Don't Booleanate", "url": "https://kyleshevlin.com/enumerate-dont-booleanate/", "published_at": "2020-01-25T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe0786cb879", "title": "The Future of Second Career Devs", "url": "https://kyleshevlin.com/the-future-of-second-career-devs/", "published_at": "2020-01-04T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07897c2bf", "title": "How to Render an Object in React", "url": "https://kyleshevlin.com/how-to-render-an-object-in-react/", "published_at": "2019-12-27T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe078b153f5", "title": "How to Add Algolia Search to a Gatsby Site", "url": "https://kyleshevlin.com/how-to-add-algolia-search-to-a-gatsby-site/", "published_at": "2019-09-22T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe079a48df2", "title": "Graphs Are Everywhere", "url": "https://kyleshevlin.com/graphs-are-everywhere/", "published_at": "2019-09-06T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe079f741c2", "title": "When `else`s Make Your Code Worse", "url": "https://kyleshevlin.com/when-elses-make-your-code-worse/", "published_at": "2019-07-17T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07a7dc793", "title": "A Plea for Imagination", "url": "https://kyleshevlin.com/a-plea-for-imagination/", "published_at": "2019-05-29T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07b037903", "title": "Just Enough FP: Composition", "url": "https://kyleshevlin.com/just-enough-fp-composition/", "published_at": "2019-05-17T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07b657ad9", "title": "Just Enough FP: Pointfree", "url": "https://kyleshevlin.com/just-enough-fp-pointfree/", "published_at": "2019-05-01T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07c59ca1c", "title": "Just Enough FP: Argument Order", "url": "https://kyleshevlin.com/just-enough-fp-argument-order/", "published_at": "2019-04-29T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07ca95442", "title": "Just Enough FP: Partial Application", "url": "https://kyleshevlin.com/just-enough-fp-partial-application/", "published_at": "2019-04-27T00:00:00+00:00" }, { "id": "01a08797-d95f-7341-999b-7fe07cd5b320", "title": "Just Enough FP: Currying", "url": "https://kyleshevlin.com/just-enough-fp-currying/", "published_at": "2019-04-26T00:00:00+00:00" } ] posts Claim your blog
Back to kyleshevlin.com
Blog · corpus.blog/blogs/kyleshevlin.com/posts

kyleshevlin.com

kyleshevlin.com

2026

2025

2024

2023

2022

2021

2020

2019