41554 blogs · [ { "id": "01a0b68b-4cdf-7170-bcdf-c4f83dc68590", "title": "Caleb Olojo", "url": "https://meje.dev", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42341a5577", "title": "an interface can actually extend multiple interfaces", "url": "https://meje.dev/blog/multiple-interface-extensions", "published_at": "2026-07-19T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4234e86b19", "title": "tuples can be unambiguous", "url": "https://meje.dev/blog/named-tuples", "published_at": "2026-07-13T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4235bdb126", "title": "On strings and characters in Haskell", "url": "https://meje.dev/blog/strings-and-chars", "published_at": "2026-04-15T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423614818e", "title": "Bits, bytes and pieces", "url": "https://meje.dev/blog/bits-and-pieces", "published_at": "2026-03-18T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4236528207", "title": "Remotes", "url": "https://meje.dev/blog/remotes", "published_at": "2026-03-04T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4236afd4c7", "title": "An up-close look at UCANs in the wild", "url": "https://meje.dev/blog/ucans-in-the-wild", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4237a5c6f5", "title": "Content-deterministic CIDs?", "url": "https://meje.dev/blog/content-determinism-for-cids", "published_at": "2026-02-02T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42389e920b", "title": "A reward for thinking", "url": "https://meje.dev/blog/a-reward-for-thinking", "published_at": "2026-01-31T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42399e6d81", "title": "This frailty", "url": "https://meje.dev/blog/this-frailty", "published_at": "2026-01-27T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4239d38cc6", "title": "a thrum of defiance", "url": "https://meje.dev/blog/a-thrum-of-defiance", "published_at": "2026-01-01T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423a89baa9", "title": "On Buffers, Binary Serialization and Endianness", "url": "https://meje.dev/blog/buffers-endianess-serialization", "published_at": "2025-07-23T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423b67a3ad", "title": "React performance: Memoization", "url": "https://meje.dev/blog/react-performance-memoization", "published_at": "2025-05-17T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423b7c3ca2", "title": "How to move FIL out of MetaMask: My Experience", "url": "https://meje.dev/blog/how-to-move-fil-from-metamask", "published_at": "2025-03-01T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423c2f41af", "title": "Building a proximity feature into maps with React", "url": "https://meje.dev/blog/building-proximity-feature-react-leaflet", "published_at": "2025-02-25T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423ca2bdc3", "title": "Adding image info/metadata to Zed", "url": "https://meje.dev/blog/adding-image-info-to-zed", "published_at": "2025-02-10T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423d24586a", "title": "Blog posts don't show up immediately with GhostCMS", "url": "https://meje.dev/blog/ghost-cms-posts-doesnt-show", "published_at": "2024-12-26T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423db92c7d", "title": "How I fixed a UX issue with a Polling mechanism", "url": "https://meje.dev/blog/polling-network-requests", "published_at": "2024-07-29T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423df814b9", "title": "I opened three Next.js projects with Zed and my PC did not prepare for liftoff", "url": "https://meje.dev/blog/tried-zed-on-linux", "published_at": "2024-07-12T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423e29c4e2", "title": "Monkey patching: refresh token mechanism in React", "url": "https://meje.dev/blog/refresh-token-mechanism-in-nextjs", "published_at": "2024-05-11T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423e4ebbaf", "title": "OAuth with Supabase in a Vite React app", "url": "https://meje.dev/blog/supabase-oauth-in-react-apps", "published_at": "2024-02-26T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423ef2ee11", "title": "How to use react-spring with Chakra UI", "url": "https://meje.dev/blog/using-react-spring-with-chakraui", "published_at": "2024-02-11T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423f0b7627", "title": "Moving husky pre-commit hook into Github Actions", "url": "https://meje.dev/blog/husky-precommit-into-github-actions", "published_at": "2024-01-26T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423f848039", "title": "Blur images onLoad with Next.js", "url": "https://meje.dev/blog/nextjs-image-blur-on-load", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e423fca0834", "title": "Querying a MongoDB collection", "url": "https://meje.dev/blog/querying-a-mongodb-collection", "published_at": "2024-01-10T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424004dde9", "title": "2023 — Outside the four walls of a classroom", "url": "https://meje.dev/blog/year-in-review-2023", "published_at": "2024-01-08T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42405b85ff", "title": "Edge function timeouts of next/image on Netlify", "url": "https://meje.dev/blog/next-image-error-on-netlify", "published_at": "2023-12-28T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4241315514", "title": "Building a pagination feature with SWR", "url": "https://meje.dev/blog/building-a-pagination-component-with-swr", "published_at": "2023-11-12T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4241c758d4", "title": "Next.js supports styled-components now?", "url": "https://meje.dev/blog/nextjs-supports-styled-components", "published_at": "2023-11-06T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42422715f1", "title": "Persisting auth state in Next.js, React Context and cookie wrappers", "url": "https://meje.dev/blog/persisting-auth-state-in-nextjs-context-and-cookies", "published_at": "2023-10-07T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42425ba088", "title": "pageExtensions in Next.js", "url": "https://meje.dev/blog/page-extensions-in-nextjs", "published_at": "2023-09-20T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42427353e4", "title": "Confirm email with Djoser in a Next.js app", "url": "https://meje.dev/blog/confirm-email-with-djoser-in-nextjs", "published_at": "2023-09-15T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424338baba", "title": "Active nested routes in Next.js — How I figured it out.", "url": "https://meje.dev/blog/nested-navitems-in-nextjs", "published_at": "2023-08-12T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4243c08555", "title": "TypeScript Unions — How I used it.", "url": "https://meje.dev/blog/how-i-used-typscript-unions", "published_at": "2023-08-10T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4244051665", "title": "Fixing href interpolation errors in Next.js", "url": "https://meje.dev/blog/nextjs-href-interpolation-error", "published_at": "2023-07-12T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4244efd9a6", "title": "Here's how to use React Suspense in Next.js", "url": "https://meje.dev/blog/suspense-in-nextjs", "published_at": "2023-06-26T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424518b51a", "title": "Authentication in Next.js with cookies and getServerSideProps", "url": "https://meje.dev/blog/nextjs-auth-with-cookies-and-getserversideprop", "published_at": "2023-06-19T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424559f17b", "title": "You Might not need a state-management Library", "url": "https://meje.dev/blog/keep-state-in-the-url", "published_at": "2023-06-13T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42458c06eb", "title": "Masking endpoints with Next.js API routes", "url": "https://meje.dev/blog/mask-api-urls-with-api-routes", "published_at": "2023-05-19T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4245ef7c9b", "title": "Adding post controllers to my blog", "url": "https://meje.dev/blog/adding-prev-and-next-buttons", "published_at": "2023-05-03T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4246bc3da0", "title": "Optional props in TypeScript", "url": "https://meje.dev/blog/optional-props-in-typescript", "published_at": "2023-04-24T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4247033f87", "title": "useRef instead of querySelector in React", "url": "https://meje.dev/blog/useref-not-queryselector", "published_at": "2023-03-27T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4247cc4fa0", "title": "How to fix styled-components server mismatch error in Next.js", "url": "https://meje.dev/blog/styled-components-hydration-error", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424855109e", "title": "The perils of building a Table of Content component", "url": "https://meje.dev/blog/building-a-table-of-content-component", "published_at": "2023-03-03T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4248a401fb", "title": "handleChange in TypeScript", "url": "https://meje.dev/blog/handle-change-in-ts", "published_at": "2023-03-02T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4248b016e6", "title": "Add a preloader to a Next.js site — the right way", "url": "https://meje.dev/blog/building-a-nextjs-preloader-the-right-way", "published_at": "2023-02-17T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42493fcf98", "title": "JavaScript in CSS — A subtle approach", "url": "https://meje.dev/blog/js-in-css-basics", "published_at": "2023-02-08T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424a3f4921", "title": "Preventing the default scroll event with Next.js useRouter", "url": "https://meje.dev/blog/prevent-default-scroll-event", "published_at": "2023-02-05T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424adc2e24", "title": "Type-checking with TypeScript in React", "url": "https://meje.dev/blog/type-checking-in-typescript", "published_at": "2023-01-09T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424aee531d", "title": "2022 — you evasive psycho!", "url": "https://meje.dev/blog/year-in-review-2022", "published_at": "2022-12-31T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424b280d01", "title": "Building a real-time views component with Next.js and MongoDB", "url": "https://meje.dev/blog/building-a-reatime-view-counter", "published_at": "2022-12-19T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424c09e9df", "title": "Using PropTypes in React", "url": "https://meje.dev/blog/using-proptypes-in-react", "published_at": "2022-12-15T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424ca10201", "title": "Production error with the .next directory on Netlify", "url": "https://meje.dev/blog/next-directory-returns-error-404-on-netlify", "published_at": "2022-12-12T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424d133ac9", "title": "Internationalization in Next.js", "url": "https://meje.dev/blog/html-lang-attribute-in-nextjs", "published_at": "2022-11-10T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424dd493c1", "title": "My fair share of rehydration in React", "url": "https://meje.dev/blog/practical-approach-to-hydration", "published_at": "2022-10-22T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424e31c565", "title": "Gatsby's link component feels tricky", "url": "https://meje.dev/blog/gatsbys-link-component", "published_at": "2022-10-15T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424f0bd8a1", "title": "Animating SVGs with Remotion", "url": "https://meje.dev/blog/svg-animtion-with-remotion", "published_at": "2022-10-11T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424f18fc20", "title": "Build a re-usable YouTube embed component with React", "url": "https://meje.dev/blog/reusable-youtube-component", "published_at": "2022-08-20T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424f4cc01e", "title": "Time's up. But, I'm not done yet.", "url": "https://meje.dev/blog/times-up", "published_at": "2022-07-08T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e424f509053", "title": "The CSS overview devtool", "url": "https://meje.dev/blog/the-css-overview-devtool", "published_at": "2022-05-22T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4250419387", "title": "The grayscale CSS Filter effect", "url": "https://meje.dev/blog/filter-effects-in-css", "published_at": "2022-05-14T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42504aae98", "title": "Styling the Next.js image component", "url": "https://meje.dev/blog/styling-nextjs-image-component", "published_at": "2022-05-11T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4251018d59", "title": "How I built my blog with Next.js and MDX", "url": "https://meje.dev/blog/how-i-built-this-blog", "published_at": "2022-04-21T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e4251616df0", "title": "Social sharing meta tags error in Next.js", "url": "https://meje.dev/blog/meta-tags-error-in-nextjs", "published_at": "2022-04-17T00:00:00+00:00" }, { "id": "01a087a3-b616-722f-81fd-4e42524fbb12", "title": "Next.js Image optimization error on Netlify", "url": "https://meje.dev/blog/image-optimization-error-in-nextjs", "published_at": "2022-04-16T00:00:00+00:00" } ] posts Claim your blog
Back to Caleb Olojo
Blog · corpus.blog/blogs/meje.dev/posts

Caleb Olojo

meje.dev

2026

2025

2024

2023

2022