56,966 blogs · [ { "id": "01a087a2-e085-7243-99ed-76effaca2821", "title": "OnlineOrNot Diaries 25: you can just build things", "url": "https://maxrozen.com/onlineornot-diaries-25-you-can-just-build-things", "published_at": "2025-08-17T15:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effba66899", "title": "Four years of running a SaaS in a competitive market", "url": "https://maxrozen.com/on-four-years-running-saas-competitive-market", "published_at": "2025-04-04T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effbaabd4a", "title": "OnlineOrNot Diaries 24", "url": "https://maxrozen.com/onlineornot-diaries-24", "published_at": "2025-01-24T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effc434784", "title": "OnlineOrNot Diaries 23", "url": "https://maxrozen.com/onlineornot-diaries-23", "published_at": "2024-12-14T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effd28f6fe", "title": "OnlineOrNot Diaries 22", "url": "https://maxrozen.com/onlineornot-diaries-22", "published_at": "2024-11-22T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effe28014d", "title": "OnlineOrNot Diaries 21", "url": "https://maxrozen.com/onlineornot-diaries-21", "published_at": "2024-08-30T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76effeee22a7", "title": "OnlineOrNot Diaries 20", "url": "https://maxrozen.com/onlineornot-diaries-20", "published_at": "2024-04-12T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76efff9e2336", "title": "OnlineOrNot Diaries 19", "url": "https://maxrozen.com/onlineornot-diaries-19", "published_at": "2024-03-08T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76efffc61053", "title": "Lessons from my third year running a SaaS", "url": "https://maxrozen.com/lessons-from-my-third-year-running-a-saas", "published_at": "2024-02-23T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0007b529c", "title": "OnlineOrNot Diaries 18", "url": "https://maxrozen.com/onlineornot-diaries-18", "published_at": "2024-01-15T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0016416b2", "title": "2023: Focusing on a single product pays off", "url": "https://maxrozen.com/2023-focus-single-product-pays-off", "published_at": "2023-12-23T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0019f5f28", "title": "Starting a Cloudflare Worker from scratch", "url": "https://maxrozen.com/starting-a-cloudflare-worker-from-scratch", "published_at": "2023-12-22T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0023afc09", "title": "OnlineOrNot Diaries 17", "url": "https://maxrozen.com/onlineornot-diaries-17", "published_at": "2023-12-17T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f002f492c1", "title": "OnlineOrNot Diaries 16", "url": "https://maxrozen.com/onlineornot-diaries-16", "published_at": "2023-11-29T17:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0037ada87", "title": "OnlineOrNot Diaries 15", "url": "https://maxrozen.com/onlineornot-diaries-15", "published_at": "2023-09-11T17:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f003d6add9", "title": "OnlineOrNot Diaries 14", "url": "https://maxrozen.com/onlineornot-diaries-14", "published_at": "2023-07-28T17:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f004c01d2f", "title": "OnlineOrNot Diaries 13", "url": "https://maxrozen.com/onlineornot-diaries-13", "published_at": "2023-07-14T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00580011a", "title": "OnlineOrNot Diaries 12", "url": "https://maxrozen.com/onlineornot-diaries-12", "published_at": "2023-06-30T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00583d218", "title": "OnlineOrNot Diaries 11", "url": "https://maxrozen.com/onlineornot-diaries-11", "published_at": "2023-05-27T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f005a6a714", "title": "OnlineOrNot Diaries 10", "url": "https://maxrozen.com/onlineornot-diaries-10", "published_at": "2023-05-13T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00619bd57", "title": "OnlineOrNot Diaries 9", "url": "https://maxrozen.com/onlineornot-diaries-9", "published_at": "2023-04-29T07:10:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f006902d68", "title": "OnlineOrNot Diaries 8", "url": "https://maxrozen.com/onlineornot-diaries-8", "published_at": "2023-04-22T09:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f006d23153", "title": "OnlineOrNot Diaries 7", "url": "https://maxrozen.com/onlineornot-diaries-7", "published_at": "2023-04-07T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f007555046", "title": "OnlineOrNot Diaries 6", "url": "https://maxrozen.com/onlineornot-diaries-6", "published_at": "2023-03-31T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00851f130", "title": "OnlineOrNot Diaries 5", "url": "https://maxrozen.com/onlineornot-diaries-5", "published_at": "2023-03-24T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f008ae4685", "title": "OnlineOrNot Diaries 4", "url": "https://maxrozen.com/onlineornot-diaries-4", "published_at": "2023-03-17T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00908e34e", "title": "Getting your own good enough laptop for under $500", "url": "https://maxrozen.com/getting-your-own-good-enough-laptop-for-under-500", "published_at": "2023-03-13T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0097997d9", "title": "OnlineOrNot Diaries 3", "url": "https://maxrozen.com/onlineornot-diaries-3", "published_at": "2023-03-10T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0098e8900", "title": "OnlineOrNot Diaries 2", "url": "https://maxrozen.com/onlineornot-diaries-2", "published_at": "2023-03-03T17:45:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00a51010d", "title": "OnlineOrNot Diaries 1", "url": "https://maxrozen.com/onlineornot-diaries-1", "published_at": "2023-02-24T17:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00ade6e80", "title": "On replacing my MacBook Air M1 with a Thinkpad T480", "url": "https://maxrozen.com/replacing-my-macbook-m1-with-thinkpad-t480", "published_at": "2023-02-21T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00aed08f9", "title": "2022: I just kept shipping", "url": "https://maxrozen.com/2022-just-keep-shipping", "published_at": "2023-01-14T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00b515506", "title": "Managing your Node.js installation", "url": "https://maxrozen.com/managing-your-node-installation", "published_at": "2022-12-05T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00b6c85af", "title": "How I became a React developer", "url": "https://maxrozen.com/how-i-became-react-developer", "published_at": "2022-11-29T22:50:56+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00bf91027", "title": "Learn Integration Testing with React Hook Form", "url": "https://maxrozen.com/learn-integration-testing-react-hook-form", "published_at": "2022-11-15T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00c5214c1", "title": "Strangers from the internet paid for my MacBook Air: on my 4th year of indiehacking", "url": "https://maxrozen.com/2021-strangers-paid-my-macbook", "published_at": "2021-12-16T05:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00c68890c", "title": "@forge/api: Cannot read properties of undefined (reading ‘fetch’)", "url": "https://maxrozen.com/forge-api-cannot-read-properties-fetch", "published_at": "2021-05-02T11:52:00+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00cc95615", "title": "Keeping up with React Libraries", "url": "https://maxrozen.com/keeping-up-with-react-libraries", "published_at": "2021-02-08T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00ceed83f", "title": "Demystifying useEffect's clean-up function", "url": "https://maxrozen.com/demystifying-useeffect-cleanup-function", "published_at": "2021-02-02T00:00:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00dd6b25a", "title": "A Walkthrough of migrating MaxRozen.com from Gatsby to Next.js", "url": "https://maxrozen.com/walkthrough-migrating-maxrozen-com-gatsby-to-nextjs", "published_at": "2021-01-27T00:00:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00ea9d08b", "title": "Protecting your React routes", "url": "https://maxrozen.com/protecting-react-routes", "published_at": "2021-01-19T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00f2e7028", "title": "Deploying Node and React Shopify apps on Vercel", "url": "https://maxrozen.com/deploying-node-react-shopify-apps-on-vercel", "published_at": "2021-01-16T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f00f8525dc", "title": "Using Tailwind CSS with React and CSS-in-JS", "url": "https://maxrozen.com/using-tailwind-css-in-react-css-in-js", "published_at": "2021-01-11T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0102bdcb8", "title": "Indiehacking: a review of my 3rd year", "url": "https://maxrozen.com/indiehacking-3-year-review", "published_at": "2020-12-22T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f010dfcd7e", "title": "Guidelines for developing Custom Hooks in React", "url": "https://maxrozen.com/guidelines-for-developing-custom-hooks-react", "published_at": "2020-12-15T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f011dc4eef", "title": "Guidelines for Deploying React", "url": "https://maxrozen.com/guidelines-for-deploying-react", "published_at": "2020-12-01T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0123175d5", "title": "Fixing Race Conditions in React with useEffect", "url": "https://maxrozen.com/race-conditions-fetching-data-react-with-useeffect", "published_at": "2020-11-24T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f012c9d1c5", "title": "Fetching Data in React with useEffect", "url": "https://maxrozen.com/fetching-data-react-with-useeffect", "published_at": "2020-11-17T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f012eb6f48", "title": "Guidelines for choosing React Libraries", "url": "https://maxrozen.com/guidelines-for-choosing-react-libraries", "published_at": "2020-11-03T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f0130063df", "title": "Understanding when to use useMemo", "url": "https://maxrozen.com/understanding-when-use-usememo", "published_at": "2020-10-20T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f013f05b79", "title": "Stop useEffect from running on every render with useCallback", "url": "https://maxrozen.com/stop-useeffect-running-every-render-with-usecallback", "published_at": "2020-10-13T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f01484e8ed", "title": "How the React Hooks ESLint plugin saved me hours debugging useEffect", "url": "https://maxrozen.com/react-hooks-eslint-plugin-saved-hours-debugging-useeffect", "published_at": "2020-10-06T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f01556f3f8", "title": "The Definitive Guide to Commonly Used Words in React", "url": "https://maxrozen.com/definitive-glossary-guide-commonly-used-words-react", "published_at": "2020-09-29T09:48:48+00:00" }, { "id": "01a087a2-e085-7243-99ed-76f016002327", "title": "Understanding Integration Testing in React", "url": "https://maxrozen.com/understanding-integration-testing-react", "published_at": "2020-09-23T09:48:48+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7c4f99a9", "title": "Guidelines to improve your React folder structure", "url": "https://maxrozen.com/guidelines-improve-react-app-folder-structure", "published_at": "2020-09-15T09:48:48+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7ce4eec0", "title": "What it means to not test implementation details in React", "url": "https://maxrozen.com/dont-test-implementation-details-react", "published_at": "2020-09-08T09:48:48+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7dd2bcd6", "title": "Examples of large production-grade, open-source React apps", "url": "https://maxrozen.com/examples-of-large-production-grade-open-source-react-apps", "published_at": "2020-09-01T08:42:05+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7e0c3633", "title": "Understanding useState's initial value", "url": "https://maxrozen.com/how-to-use-react-usestate-hook-initial-value", "published_at": "2020-08-25T08:42:05+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7e7e6d0f", "title": "Methods for styling your React app", "url": "https://maxrozen.com/guide-to-styling-react-app", "published_at": "2020-08-18T08:42:05+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7f03da43", "title": "A Guide to Commonly Used React Component Libraries", "url": "https://maxrozen.com/guide-to-component-ui-libraries-react", "published_at": "2020-08-13T21:37:42+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f7f38e3f1", "title": "How to use SVGs in your React App", "url": "https://maxrozen.com/how-to-use-svg-react-app", "published_at": "2020-08-10T21:37:42+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f80198400", "title": "Why you should use functional components + Hooks over class components in React", "url": "https://maxrozen.com/react-components-hooks-functions-vs-classes", "published_at": "2020-08-06T09:22:09+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f804265b7", "title": "Keeping your sites fast with regular performance tests", "url": "https://maxrozen.com/keep-site-fast-regular-performance-tests", "published_at": "2020-08-04T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f80744d80", "title": "Preventing infinite re-renders when using useEffect and useState", "url": "https://maxrozen.com/learn-useeffect-dependency-array-react-hooks", "published_at": "2020-08-04T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f80e08be1", "title": "How to choose a median result when running Google Lighthouse multiple times", "url": "https://maxrozen.com/how-to-choose-median-lighthouse-multiple-runs", "published_at": "2020-07-27T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f81137050", "title": "Frustrated by Formik? Here's a simpler way to do forms in React", "url": "https://maxrozen.com/frustrated-formik-simpler-react-forms", "published_at": "2020-07-23T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f816a3dc5", "title": "Apollo vs Relay Modern: An unbiased look at which GraphQL client to use", "url": "https://maxrozen.com/apollo-vs-relay-which-graphql-client-to-use-2019", "published_at": "2020-07-22T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f822e299c", "title": "Books every developer should read", "url": "https://maxrozen.com/books-every-developer-should-read", "published_at": "2020-07-21T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f82977120", "title": "Automatically testing for accessibility (a11y) issues with jest-axe", "url": "https://maxrozen.com/automatic-a11y-testing-with-jest-axe", "published_at": "2020-07-17T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f82b43099", "title": "Introducing PerfBeacon - Continuously Measure Site Speed via API or Schedule", "url": "https://maxrozen.com/introducing-perfbeacon", "published_at": "2020-07-08T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f838d425d", "title": "Blogging lessons from working for a large blogging company", "url": "https://maxrozen.com/blogging-lessons", "published_at": "2020-06-27T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f84052ab8", "title": "How to implement a Higher-order component in React with TypeScript", "url": "https://maxrozen.com/implement-higher-order-component-react-typescript", "published_at": "2020-04-10T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f84f999d3", "title": "How code splitting can make your React app load significantly faster", "url": "https://maxrozen.com/react-loadable-half-react-app-load-time", "published_at": "2020-02-26T15:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f85169935", "title": "2019: Further reflections on trying to start an internet business", "url": "https://maxrozen.com/2019-further-reflections-trying-to-start-an-internet-business", "published_at": "2019-12-29T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f85c6bae3", "title": "Why early stage startups are the worst for junior developers", "url": "https://maxrozen.com/why-early-stage-startups-are-the-worst-for-junior-developers", "published_at": "2019-12-11T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f861c73b1", "title": "What is the difference between style-loader and mini-css-extract-plugin?", "url": "https://maxrozen.com/difference-between-style-loader-mini-css-extract-plugin", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f86420632", "title": "How do you make relay-compiler run automatically?", "url": "https://maxrozen.com/how-do-you-automatically-run-relay-compiler", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f86e78558", "title": "How do you use variables in the HTML webpack outputs?", "url": "https://maxrozen.com/how-do-you-use-variables-in-webpack-html", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8767efa1", "title": "How do you use resolve.alias in webpack?", "url": "https://maxrozen.com/how-to-use-resolve-alias-in-webpack", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f87f38e49", "title": "Understanding your webpack config", "url": "https://maxrozen.com/understanding-your-webpack-config", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8853eb6f", "title": "Prefetch your Google Fonts for Performance Gains in Gatsby", "url": "https://maxrozen.com/prefetch-google-fonts-with-gatsby", "published_at": "2019-10-10T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f88ba5169", "title": "How to write semantic HTML", "url": "https://maxrozen.com/how-to-write-semantic-html", "published_at": "2019-07-13T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f89127a93", "title": "The books I read in 2018", "url": "https://maxrozen.com/books-i-read-in-2018", "published_at": "2019-01-02T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f893d75eb", "title": "2018: Reflections on trying to start an internet business", "url": "https://maxrozen.com/2018-review-starting-an-internet-business", "published_at": "2018-12-31T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8a224723", "title": "Start your own app with React, GraphQL and Serverless architecture: Part 3 - Let's build a GraphQL backend!", "url": "https://maxrozen.com/start-your-own-app-with-react-part-3", "published_at": "2018-08-16T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8a371b06", "title": "Start your own app with React, GraphQL and Serverless architecture: Part 2 - Deploying to a real domain name", "url": "https://maxrozen.com/start-your-own-app-with-react-part-2", "published_at": "2018-08-15T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8ac7124d", "title": "Start your own app with React, GraphQL and Serverless architecture: Part 1 - Server-side Rendering, Serverlessly!", "url": "https://maxrozen.com/start-your-own-app-with-react-part-1", "published_at": "2018-08-08T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8afefadc", "title": "How to handle server-side rendering in React", "url": "https://maxrozen.com/tips-for-making-server-side-rendering-in-react-easy", "published_at": "2018-06-04T05:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8b89ea71", "title": "How to resolve 'X defined in resolvers, but not in schema' with babel-plugin-inline-import", "url": "https://maxrozen.com/inline-import-graphql-issues", "published_at": "2017-12-12T18:52:00+00:00" }, { "id": "01a087a2-e086-72a1-9730-737f8bf591d3", "title": "How to style react-select with styled-components or emotion", "url": "https://maxrozen.com/style-react-select-styled-components-emotion", "published_at": "2017-12-11T18:52:00+00:00" } ] posts Claim your blog
Back to rozenmd
Blog · corpus.blog/blogs/maxrozen.com/posts

rozenmd

maxrozen.com

2025

2024

2023

2022

2021

2020

2019

2018

2017