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.
This is my portfolio RSS feed
Perfect circumstances are fiction. You cannot choose the hand you are dealt, but you are responsible for how you play it.
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.
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.
Key lessons from The Mom Test by Rob Fitzpatrick on how to talk to customers and validate ideas without getting lied to
The wrapper is not the shortcut. The wrapper is the product.
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.
A small esports story from 2014 about oversharing, timing, and giving your opponent the roadmap.
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.
Build a live "active now" visitor counter in Next.js using Supabase, Postgres RPC, anonymous browser IDs, and a simple heartbeat.
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.
A top-down, framework-agnostic walkthrough from typing a domain to loading HTML, CSS, JS, and an interactive page.
How I automated subscription management for 10k+ Patreon members using Supabase Edge Functions, from OAuth linking to daily cron jobs with email notifications.
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.
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.
How to build a "What's New" notification system using React, localStorage, and markdown (no backend required)
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.
My experience migrating 77 blog posts, 4 static pages, and 5 interactive components from Gatsby to Next.js while preserving SEO and URLs
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.
Learn how to identify and remove unused files in your React codebase with tools like knip. Simplify your project and improve maintainability
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
Learn how to combine React Context with Supabase to manage state in your app.
Learn how to build a swipeable Stories component in React. Implement touch event handling for seamless story navigation. Perfect for social media-like features.
Learn how to create a custom React hook, useImageDimensions, to fetch and display image dimensions dynamically.
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.
Discover two powerful yet often misunderstood operators in TypeScript are typeof and keyof.
Discover type guards in TypeScript. Learn how to use it for safer and more maintainable code.
Discover the differences between 'any' and 'unknown' in TypeScript. Learn when to use each type for safer and more maintainable code.
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.
We are going to implement a Lodash's debounce method from scratch.
When overuse of useMemo hook becomes a problem
We are going to implement a HTML table generator in React.
We are going to implement a Lodash's get method that returns the value at path of object.
We are going to implement a function that splits the input array into grops of length size and returns them within a new array.
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.
In this tutorial, we will build a text-to-speech component for a React app using the Web Speech API
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.
Learn how to create your own implementation of the popular JavaScript's built-in Array.map() method
The core idea behind this book is to introduce the concept of the Hook Model (Trigger, Action, Variable Reward, Investment).
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.
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.
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.
Learn key differences between types and interfaces in TypeScript
Extreme Ownership which means taking full responsibility for one's actions and decisions and not making excuses or blaming others
My approach to solving LeetCode's Transform CSV string into JSON format JavaScript code challenge
JavaScript closure is a powerful feature that allows a function to access variables from an outer scope even after the outer function has returned.
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 is a powerful tool for triggering side effects that need to be run after a component has been rendered.
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.
JavaScript Promises are a powerful tool for handling asynchronous code in JavaScript