41554 blogs · [ { "id": "01a08771-a82b-7300-a81f-60554c025177", "title": "You don't choose the cards", "url": "https://edvins.io/you-dont-choose-the-cards", "published_at": "2026-08-12T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554ccac56f", "title": "I was supposed to build a map. I built a map editor instead.", "url": "https://edvins.io/building-a-map-editor-before-building-the-map", "published_at": "2026-06-28T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554d3022d5", "title": "The Mom Test in the AI era", "url": "https://edvins.io/the-mom-test-in-the-ai-era", "published_at": "2026-06-05T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554d6469a8", "title": "The Mom Test book notes", "url": "https://edvins.io/the-mom-test-book-notes", "published_at": "2026-06-03T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554d98f275", "title": "Everything is a wrapper", "url": "https://edvins.io/everything-is-a-wrapper", "published_at": "2026-05-28T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554de6838d", "title": "You cannot build deep skills on shallow attention", "url": "https://edvins.io/you-cannot-build-deep-skills-on-shallow-attention", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554e320fb8", "title": "Sharing is good, timing still matters", "url": "https://edvins.io/sharing-is-good-timing-still-matters", "published_at": "2026-05-25T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554ec598ff", "title": "How the JavaScript event loop affects React", "url": "https://edvins.io/how-the-javascript-event-loop-works-in-react", "published_at": "2026-05-21T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60554f2830b5", "title": "How to build a live visitor counter with Next.js and Supabase", "url": "https://edvins.io/live-visitor-counter-nextjs-supabase", "published_at": "2026-05-16T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055501c3646", "title": "We built an agent workflow app in 24 hours and placed 5th at Cursor Riga Hackathon", "url": "https://edvins.io/we-built-an-agent-workflow-app-in-24-hours-and-got-top-5-at-cursor-riga-hackathon", "published_at": "2026-05-14T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055506ad2e7", "title": "What happens when you enter a website URL in the browser", "url": "https://edvins.io/what-happens-when-you-enter-a-url-in-the-browser", "published_at": "2026-02-26T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605550a0ef23", "title": "Building automated Patreon subscription sync with Supabase", "url": "https://edvins.io/building-automated-patreon-subscription-sync-with-supabase", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555167ea85", "title": "Shipping code without a repo using git bundle", "url": "https://edvins.io/shipping-code-without-repo-using-git-bundle", "published_at": "2026-02-06T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605552051e21", "title": "How I built in-app feedback capture in React (and why I didn't ship it as a product)", "url": "https://edvins.io/in-app-feedback-capture-react", "published_at": "2026-01-02T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055521f8fb0", "title": "Building a lightweight changelog system in React", "url": "https://edvins.io/building-a-lightweight-changelog-system-in-react", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055525b0a93", "title": "Rebuilding the \"Welcome Back\" mechanic from idle games in React", "url": "https://edvins.io/rebuilding-the-welcome-back-mechanic-from-idle-games-in-react", "published_at": "2025-11-02T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605552a11726", "title": "Migrating from Gatsby to Next.js", "url": "https://edvins.io/migrating-from-gatsby-to-nextjs", "published_at": "2025-10-20T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605552f2e964", "title": "Rebuilding Clash of Clans’ building system in React", "url": "https://edvins.io/clash-of-clans-building-system-react", "published_at": "2025-06-05T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055539867c8", "title": "Cleaning up dead files in your React project", "url": "https://edvins.io/cleaning-up-dead-files-in-your-react-project", "published_at": "2024-11-29T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605553bbc0c1", "title": "Why I regret not launching my side project", "url": "https://edvins.io/why-i-regret-not-launching-my-side-project", "published_at": "2024-10-10T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055542923b5", "title": "Using React Context for Supabase state management", "url": "https://edvins.io/using-react-context-for-supabase-state-management", "published_at": "2024-07-24T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605555157717", "title": "Creating a swipeable stories component in React", "url": "https://edvins.io/creating-a-swipeable-stories-component-in-react", "published_at": "2024-07-23T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605555e04af6", "title": "Creating a custom React Hook to fetch image dimensions", "url": "https://edvins.io/creating-a-custom-react-hook-to-fetch-image-dimensions", "published_at": "2024-07-22T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605556213840", "title": "Building dynamic routes in Next.js with Supabase", "url": "https://edvins.io/building-dynamic-routes-in-nextjs-with-supabase", "published_at": "2024-07-04T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605556e21243", "title": "Exploring TypeScript: typeof and keyof", "url": "https://edvins.io/exploring-typescript-typeof-and-keyof", "published_at": "2023-09-30T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605557654f3f", "title": "Exploring TypeScript: type guards", "url": "https://edvins.io/exploring-typescript-type-guards", "published_at": "2023-09-02T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555773625f", "title": "Exploring TypesScript: any vs unknown", "url": "https://edvins.io/exploring-typescript-any-vs-unknown", "published_at": "2023-09-01T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605558720356", "title": "Exploring TypeScript: generics (w/ React example)", "url": "https://edvins.io/exploring-typescript-generics", "published_at": "2023-08-31T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055591ba27b", "title": "Debounce method in JavaScript code challenge", "url": "https://edvins.io/debounce-in-javascript", "published_at": "2023-08-30T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055594a483a", "title": "useMemo overdose", "url": "https://edvins.io/usememo-overdose", "published_at": "2023-08-20T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555a48bef2", "title": "HTML table generator in React code challenge", "url": "https://edvins.io/html-table-generator-in-react", "published_at": "2023-07-22T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555a83837c", "title": "Get deeply nested object in JavaScript code challenge", "url": "https://edvins.io/get-deeply-nested-object-in-javascript", "published_at": "2023-07-16T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555aed2c87", "title": "Chunk method in JavaScript code challenge", "url": "https://edvins.io/chunk-method-in-javascript", "published_at": "2023-07-15T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555bc938e9", "title": "My first talk experience: embracing failure and growth", "url": "https://edvins.io/my-first-talk", "published_at": "2023-07-12T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555be06552", "title": "Build a Text-to-Speech component in React", "url": "https://edvins.io/react-text-to-speech", "published_at": "2023-04-05T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555ca454ca", "title": "How to efficiently refactor useState to useReducer in React", "url": "https://edvins.io/how-to-efficiently-refactor-usestate-to-usereducer", "published_at": "2023-04-03T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555d6d0cc3", "title": "How to implement your version of Array.map() in JavaScript", "url": "https://edvins.io/implement-your-array-map-javascript", "published_at": "2023-02-19T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555e699aa3", "title": "The Almanack of Naval Ravikant book notes", "url": "https://edvins.io/almanack-of-naval-ravikant-book-notes", "published_at": "2023-02-18T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555f126b9c", "title": "Integrating sound effects in React", "url": "https://edvins.io/integrating-sound-effects-in-react", "published_at": "2023-02-10T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-60555fb01756", "title": "Removing stickers from my MacBook Pro", "url": "https://edvins.io/removing-stickers-from-my-macbook-pro", "published_at": "2023-02-08T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055602cf36e", "title": "Maximising performance with React code splitting techniques", "url": "https://edvins.io/react-code-splitting-techniques", "published_at": "2023-02-02T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605560a1964d", "title": "Types vs Interfaces in TypeScript", "url": "https://edvins.io/types-vs-interfaces-in-typescript", "published_at": "2023-01-27T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605560bc4fc5", "title": "Extreme Ownership book notes", "url": "https://edvins.io/extreme-ownership-book-notes", "published_at": "2023-01-23T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605560bf1ef8", "title": "Transform CSV string into JSON format JavaScript code challenge", "url": "https://edvins.io/transform-csv-string-into-json-format-javascript-code-challenge", "published_at": "2023-01-20T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605560f93c4f", "title": "4 ways to implement pagination on the front-end", "url": "https://edvins.io/4-ways-to-implement-pagination", "published_at": "2023-01-18T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055618afbc4", "title": "Closures in JavaScript", "url": "https://edvins.io/closures-in-javascript", "published_at": "2023-01-01T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605562251a65", "title": "Hoisting in JavaScript", "url": "https://edvins.io/hoisting-in-javascript", "published_at": "2022-12-29T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605562464a56", "title": "React's useLayoutEffect explained", "url": "https://edvins.io/react-uselayouteffect-explained", "published_at": "2022-12-26T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-605562ce4e30", "title": "Callbacks in JavaScript", "url": "https://edvins.io/callbacks-in-javascript", "published_at": "2022-12-21T00:00:00+00:00" }, { "id": "01a08771-a82b-7300-a81f-6055631135b0", "title": "Promises in JavaScript", "url": "https://edvins.io/promises-in-javascript", "published_at": "2022-12-18T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08437ec02408", "title": "Implement an array-based Stack data structure in JavaScript", "url": "https://edvins.io/how-to-flatten-array-in-javascript", "published_at": "2022-12-13T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08437f0e13e6", "title": "Find pivot index code challenge", "url": "https://edvins.io/find-pivot-index-code-challenge", "published_at": "2022-11-29T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08437f6a1b9f", "title": "FizzBuzz code challenge", "url": "https://edvins.io/fizzbuzz-code-challenge", "published_at": "2022-11-28T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08437fe53082", "title": "Number of steps to reduce a number to zero code challenge", "url": "https://edvins.io/number-of-steps-to-reduce-a-number-to-zero-code-challenge", "published_at": "2022-11-28T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438019ad18", "title": "Richest customer wealth code challenge", "url": "https://edvins.io/richest-customer-wealth-code-challenge", "published_at": "2022-11-28T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843808be28b", "title": "Bill Division code challenge", "url": "https://edvins.io/bill-division-code-challenge", "published_at": "2022-11-27T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843813c85a3", "title": "Running sum of 1d array code challenge", "url": "https://edvins.io/running-sum-of-1d-array-code-challenge", "published_at": "2022-11-27T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084381b282c7", "title": "Compare the Triplets code challenge", "url": "https://edvins.io/compare-triplets-code-challenge", "published_at": "2022-11-26T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843827db1c3", "title": "Backspace String Compare code challenge", "url": "https://edvins.io/backspace-string-compare-code-challenge", "published_at": "2022-11-25T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843833af68b", "title": "Breaking the Records code challenge", "url": "https://edvins.io/breaking-the-records", "published_at": "2022-11-24T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084383696535", "title": "My tech stack", "url": "https://edvins.io/my-tech-stack", "published_at": "2022-11-23T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843839f614d", "title": "Counting Sort 1 code challenge", "url": "https://edvins.io/counting-sort-1-code-challenge", "published_at": "2022-11-21T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843849b6e56", "title": "Find the Median code challenge", "url": "https://edvins.io/find-median-code-challange", "published_at": "2022-11-21T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084384da2be1", "title": "How to add Utterances to your dev blog", "url": "https://edvins.io/how-to-add-utterances-to-your-dev-blog", "published_at": "2022-11-21T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843859a3a64", "title": "Diagonal Difference code challenge", "url": "https://edvins.io/diagonal-difference-code-challenge", "published_at": "2022-11-20T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084386300978", "title": "Lonely Integer code challenge", "url": "https://edvins.io/lonely-integer-code-challenge", "published_at": "2022-11-20T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438695ecee", "title": "Time Conversion code challenge", "url": "https://edvins.io/time-conversion-code-challenge", "published_at": "2022-11-20T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438727adf3", "title": "Mini-Max Sum code challenge", "url": "https://edvins.io/mini-max-sum-code-challenge", "published_at": "2022-11-19T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084387fe384a", "title": "Plus Minus code challenge", "url": "https://edvins.io/plus-minus-code-challenge", "published_at": "2022-11-19T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843880b10b0", "title": "My favourite 5 talks from Next.js Conf 2022", "url": "https://edvins.io/my-favourite-5-talks-from-nextjs-conf-2022", "published_at": "2022-11-17T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084388ae5cd8", "title": "DevX Conf 2022 Recap", "url": "https://edvins.io/devx-conf-2022-recap", "published_at": "2022-05-12T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843890bf6fa", "title": "Add search to a Gatsby blog", "url": "https://edvins.io/add-search-to-a-gatsby-blog", "published_at": "2022-04-03T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438975e52e", "title": "14 habits of highly productive developers book notes", "url": "https://edvins.io/14-habits-book-notes", "published_at": "2022-03-19T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438a1806f0", "title": "List of goals for 2022", "url": "https://edvins.io/list-of-goals-for-2022", "published_at": "2022-01-02T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438a68c5b2", "title": "2021 Recap", "url": "https://edvins.io/2021-recap", "published_at": "2021-12-31T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438b4e3993", "title": "How to strip emojis from string in JavaScript", "url": "https://edvins.io/how-to-strip-emojis-from-string-in-javascript", "published_at": "2021-12-22T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438c297ac9", "title": "How to reverse a string in JavaScript", "url": "https://edvins.io/how-to-reverse-a-string-in-javascript", "published_at": "2021-09-22T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438cfaf2fe", "title": "Two years to find a perfect backpack", "url": "https://edvins.io/two-years-to-find-a-perfect-backpack", "published_at": "2021-02-26T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438da67d7c", "title": "How to remove duplicates from array in JavaScript", "url": "https://edvins.io/how-to-remove-duplicates-from-array-in-javascript", "published_at": "2021-02-16T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438ddaaaa8", "title": "Vim cheat sheet", "url": "https://edvins.io/vim-cheat-sheet", "published_at": "2021-02-14T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438df8abcc", "title": "How to yarn audit fix", "url": "https://edvins.io/how-to-yarn-audit-fix", "published_at": "2021-02-11T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438ee9898c", "title": "Add social share buttons to Gatsby blog", "url": "https://edvins.io/add-social-share-buttons-to-gatsby-blog", "published_at": "2021-02-09T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438f5e4703", "title": "How to use Redux-Persist with Redux-Toolkit", "url": "https://edvins.io/how-to-use-redux-persist-with-redux-toolkit", "published_at": "2021-01-29T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08438fde2df9", "title": "List of goals for 2021", "url": "https://edvins.io/list-of-goals-for-2021", "published_at": "2021-01-01T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843900dc037", "title": "How to deploy Create-React-App to Firebase Hosting", "url": "https://edvins.io/how-to-deploy-create-react-app-to-firebase-hosting", "published_at": "2020-08-21T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-08439067618d", "title": "Migrating from WordPress to Gatsby", "url": "https://edvins.io/migrating-from-wordpress-to-gatsby", "published_at": "2020-08-20T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084390d32908", "title": "Hooked Book Notes", "url": "https://edvins.io/hooked-book-notes", "published_at": "2020-02-03T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084390d5a027", "title": "Error Boundaries in React", "url": "https://edvins.io/error-boundaries-in-react", "published_at": "2019-05-23T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843912c2629", "title": "Introduction to React Fragments", "url": "https://edvins.io/introduction-to-react-fragments", "published_at": "2019-03-05T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084391fa898a", "title": "Show and hide password in React", "url": "https://edvins.io/show-and-hide-password-in-react", "published_at": "2018-12-18T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084392235922", "title": "How to loop in JSX", "url": "https://edvins.io/how-to-loop-in-jsx", "published_at": "2018-12-05T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084392f70f25", "title": "The effective communication for developers", "url": "https://edvins.io/the-effective-communication-for-developers", "published_at": "2018-05-10T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-0843930caa76", "title": "Introduction to the Headless CMS", "url": "https://edvins.io/introduction-to-the-headless-cms", "published_at": "2018-04-23T00:00:00+00:00" }, { "id": "01a08771-a82c-701a-93b4-084393f91719", "title": "Deep dive into the Angular CLI", "url": "https://edvins.io/deep-dive-into-the-angular-cli", "published_at": "2018-04-17T00:00:00+00:00" } ] posts Claim your blog
Back to edvins.io
Blog · corpus.blog/blogs/edvins.io/posts

edvins.io

edvins.io

2026

2025

2024

2023

2022

2021

2020

2019

2018