RSSAmplifier

Blog

Edvins Antonovs

This is my portfolio RSS feed

edvins.ioRSS feed ↗94 posts

Latest posts

You don't choose the cards

Perfect circumstances are fiction. You cannot choose the hand you are dealt, but you are responsible for how you play it.

I was supposed to build a map. I built a map editor instead.

A small detour while building a medieval idle browser MMORPG turned into a better product decision: making the world editable, layered, and exportable before writing lore around it.

The Mom Test in the AI era

Rob Fitzpatrick wrote The Mom Test before AI could simulate a customer conversation. Thirteen years later, the core advice still holds - but the failure modes have shifted.

The Mom Test book notes

Key lessons from The Mom Test by Rob Fitzpatrick on how to talk to customers and validate ideas without getting lied to

Everything is a wrapper

The wrapper is not the shortcut. The wrapper is the product.

You cannot build deep skills on shallow attention

Shorts and reels have damaged my attention span. I noticed it when I could not sit through a 9-hour AI Engineering course. That was the wake-up call.

Sharing is good, timing still matters

A small esports story from 2014 about oversharing, timing, and giving your opponent the roadmap.

How the JavaScript event loop affects React

Understanding how the JavaScript event loop works under the hood helps explain React's rendering behaviour, state batching, and why blocking the main thread tanks your UI performance.

How to build a live visitor counter with Next.js and Supabase

Build a live "active now" visitor counter in Next.js using Supabase, Postgres RPC, anonymous browser IDs, and a simple heartbeat.

We built an agent workflow app in 24 hours and got top 5 at Cursor Riga Hackathon

How our Flow Build team built Routine, an agent workflow desktop app, in 24 hours at Cursor Riga Hackathon and made it to the top 5.

What happens when you enter a website URL in the browser

A top-down, framework-agnostic walkthrough from typing a domain to loading HTML, CSS, JS, and an interactive page.

Building automated Patreon subscription sync with Supabase

How I automated subscription management for 10k+ Patreon members using Supabase Edge Functions, from OAuth linking to daily cron jobs with email notifications.

Shipping code without a repo using git bundle

How to send complete Git history as a single file using git bundle, and why it's useful for interviews, audits, and private code sharing.

How I built in-app feedback capture in React (and why I didn't ship it as a product)

A practical breakdown of building in-app feedback capture in React, from payload design and metadata collection to screenshots, delivery strategies, and why this works better as a reusable pattern than a paid SDK.

Building a lightweight changelog system in React

How to build a "What's New" notification system using React, localStorage, and markdown (no backend required)

Rebuilding the "Welcome Back" mechanic from idle games in React

A step-by-step look at how idle games calculate offline progress, recreate the classic "Welcome Back" screen, and make it all work in React.

Migrating from Gatsby to Next.js

My experience migrating 77 blog posts, 4 static pages, and 5 interactive components from Gatsby to Next.js while preserving SEO and URLs

Rebuilding Clash of Clans’ building system in React

A step-by-step deep dive into recreating Clash of Clans’ resource generation and upgrade mechanics using React, showcasing efficient state management and lazy resource calculation.

Cleaning up dead files in your React project

Learn how to identify and remove unused files in your React codebase with tools like knip. Simplify your project and improve maintainability

Why I regret not launching my side project

Four years ago, I built a fully functional habit-tracking app, but I never launched it. Here's how that regret taught me the value of launching without waiting for 'perfect' and how it helped me succeed with my next project

Using React Context for Supabase state management

Learn how to combine React Context with Supabase to manage state in your app.

Creating a swipeable stories component in React

Learn how to build a swipeable Stories component in React. Implement touch event handling for seamless story navigation. Perfect for social media-like features.

Creating a custom React Hook to fetch image dimensions

Learn how to create a custom React hook, useImageDimensions, to fetch and display image dimensions dynamically.

Building dynamic routes in Next.js with Supabase

Learn how to implement dynamic routes in a Next.js app using Supabase for data fetching. This tutorial covers creating a dynamic route for individual blog posts and a directory listing all blog posts.

Exploring TypeScript: typeof and keyof

Discover two powerful yet often misunderstood operators in TypeScript are typeof and keyof.

Exploring TypeScript: type guards

Discover type guards in TypeScript. Learn how to use it for safer and more maintainable code.

Exploring TypesScript: any vs unknown

Discover the differences between 'any' and 'unknown' in TypeScript. Learn when to use each type for safer and more maintainable code.

Exploring TypeScript: generics (w/ React example)

Delve into the world of TypeScript generics with a practical guide featuring a React example. Learn how to enhance code reusability and type safety effectively.

Debounce method in JavaScript code challenge

We are going to implement a Lodash's debounce method from scratch.

useMemo overdose

When overuse of useMemo hook becomes a problem

HTML table generator in React code challenge

We are going to implement a HTML table generator in React.

Get deeply nested object in JavaScript code challenge

We are going to implement a Lodash's get method that returns the value at path of object.

Chunk method in JavaScript code challenge

We are going to implement a function that splits the input array into grops of length size and returns them within a new array.

My first talk experience: embracing failure and growth

I recently had the opportunity to give my first talk on Maximising performance with React code-splitting techniques at a local developer meetup. While it was undoubtedly a nerve-wracking experience, I must admit that it didn't go as smoothly as I had hoped.

Build a Text-to-Speech component in React

In this tutorial, we will build a text-to-speech component for a React app using the Web Speech API

How to efficiently refactor useState to useReducer in React

Learn how to improve the performance and maintainability of your React code by refactoring useState to useReducer. My step-by-step guide includes code examples and best practices to help you make the switch.

How to implement your version of Array.map() in JavaScript

Learn how to create your own implementation of the popular JavaScript's built-in Array.map() method

The Almanack of Naval Ravikant book notes

The core idea behind this book is to introduce the concept of the Hook Model (Trigger, Action, Variable Reward, Investment).

Integrating sound effects in React

Learn how to add dynamic and engaging sound effects to your React application using HTML5 audio and React libraries. Follow this practical guide to bring life to your React app.

Removing stickers from my MacBook Pro

Six years ago, I bought my old Macbook Pro and recently upgraded, so it was time to factory reset and removed all the stickers I had collected over the years.

Maximising performance with React code splitting techniques

You can maximise the performance of your React applications with my guide to the latest code-splitting techniques. Learn how to use dynamic imports, React Lazy, Loadable Components, route-based code splitting, preloading, inlining critical CSS, and dynamic chunks with code examples.

Types vs Interfaces in TypeScript

Learn key differences between types and interfaces in TypeScript

Extreme Ownership book notes

Extreme Ownership which means taking full responsibility for one's actions and decisions and not making excuses or blaming others

Transform CSV string into JSON format JavaScript code challenge

My approach to solving LeetCode's Transform CSV string into JSON format JavaScript code challenge

4 ways to implement pagination on the front-end

Closures in JavaScript

JavaScript closure is a powerful feature that allows a function to access variables from an outer scope even after the outer function has returned.

Hoisting in JavaScript

In JavaScript, when you declare a variable, it is automatically assigned to the top of the current scope. This is called hoisting.

React's useLayoutEffect explained

React's useLayoutEffect is a powerful tool for triggering side effects that need to be run after a component has been rendered.

Callbacks in JavaScript

At a high level, a callback is a function that is passed as an argument to another function, and is executed by that function at a later point in time.

Promises in JavaScript

JavaScript Promises are a powerful tool for handling asynchronous code in JavaScript