We, developers, love the “happy path”. We create a code that happily assumes everything will go perfectly well. But reality isn’t so kind. Servers crash, APIs fail, developers make mistakes, and users do unexpected things. Errors will happen in our apps. So let’s stop ignoring them and instead be ready to deal with them. In this article, I will walk you through 4 + 1 ways how to handle errors in your code. The Consequences of Poor Error Handling Permalink to “The Consequences of Poo...| Tomas Pustelnik
After over a year of development, I finally launched Clipio — a browser extension that lets you save web content effortlessly into Notion. This article is a reflection about my journey with highs and lows and lessons I have learned the hard way. First some numbers: Over 1 year of development, 18 upvotes on ProductHunt and #33 product of the day, made exactly 1 sale. Not an impressive numbers. But here’s the thing: I don’t count it as a total failure either, because I have learner a ton ...| Tomas Pustelnik
Let’s make it clear. My 2024? It wasn’t great. In many ways, it felt like a failure. I had systems, habits, and planning routines in place, yet I ended the year feeling that I had lost track of what really mattered. At the end of each year, our social media feeds are flooded with “the best year ever” posts. Although it feels good to celebrate wins, these posts can make us feel like failures if we don’t have a six-figure business or thousands of followers. That’s why I decided to s...| Tomas Pustelnik
Do you like code reviews? Or do you hate them? Have you ever received a code review that left you scratching your head? Have you been wondering if the reviewer even looked at your code? Or worse, have you been on the other side, struggling to provide valuable feedback? Well, you’re not alone. Code reviews are often a pain in the ass. They are a form of asynchronous dialog, which makes them really difficult to nail. Lost information, misunderstandings, and unclear intent. All these things ca...| Tomas Pustelnik
Supabase promise an easy authentication without a hasle. Turns out there was a lot to figure out. While building Clipio, I had to implement authentication in a browser extension without a regular website. I decide to use Supabase and Supabase UI to setup everthing quickly. And while Supabase does a lot of heavy lifting, there was still a lot of work. And resources for this topic are rare. In this article, I’ll show you how I handle authentication in browser extension running in Chrome and F...| Tomas Pustelnik
When integrating Shadcn UI into an Nx monorepo you can stumble upon few issues. At least I did when I decided to add Shadcn UI into Clipio. Due to Nx structure, running shadcn init will not work. So I have decided to write this article to help others have a smooth setup journey for Shadcn UI and Nx monorepo using pure React. Let’s get into it. Most of the time, you can follow the steps in the Shadcn UI documentation for manual installation. I will briefly describe the steps below for easy f...| Tomas Pustelnik
Rust is a programming language that has gained a lot of popularity recently. As someone who has been interested in Rust for a while, I finally decided to play with it for a month. In this article, I’ll share my experience building a command-line tool with Rust and highlight what I loved about the language, as well as what I struggled with. What did I do Permalink to “What did I do”# I decided to build a command-line tool because it was a perfect fit for my study project. First, I went t...| Tomas Pustelnik
CSS-in-JS has taken a solid place in front-end tooling, and it seems this trend will continue in the near future. Especially in the React world. For example, out of 11492 people who participate in State of CSS survey in 2020 only 14.3% didn’t hear of Styled Components (a dominant CSS-in-JS library). And more than 40% of participants have used the library. I wanted to see an in-depth performance comparison of CSS-in-JS libraries like Styled Components and a good old CSS for a long time. Sadl...| Tomas Pustelnik
Writing web apps in React or other JS frameworks doesn’t mean you don’t need to have a solid foundation of HTML and CSS. While you may be fine most of the time with basic knowledge, having more in-depth knowledge will help you create a much more accessible, robust and maintainable code. And in the end, deliver better products to your users. I have put together several concepts and practices I believe every front-end developer should know (not just JavaScript developers, but I often see th...| Tomas Pustelnik
Creating accessible forms (especially more complex ones) may be difficult. There are many moving parts and different kinds of inputs. And we often have to use JavaScript to make the form accessible for all (check this great summary from Dave Rupert to see what native HTML inputs are not accessible). But on the other hand, there are HTML tags which can help us a lot with structuring our form and make a great deal of work to make it more accessible. There is for example a <datalist> element whi...| Tomas Pustelnik
Front-end development is quite a complex discipline and you will hardly ever need only a browser and code editor (at least for bigger projects). I have decided to post a list of the tools I use for development. I hope this will help others to find some great tools they can use in their workflow. Basic stuff Permalink to “Basic stuff”# Those are the tools I use daily and I couldn’t literary produce much of my work without them. VS Code - You need to write your code somewhere. My editor o...| Tomas Pustelnik
About two weeks ago, I have finally released Qjub in private beta. It was a great feeling to finally kick it off the door. And a big relief as well. However, getting to that moment was not an easy task. This week I had a little time to reflect on that journey. And I would like to share my experience and the lessons I learned with you. TLDR - Lessons I have learned Permalink to “TLDR - Lessons I have learned”# For those who do not have time or do not want to read the entire article: Steady...| Tomas Pustelnik
Not long ago I decided to improve the loading times of my website. It already loads pretty fast, but I knew there was still room for improvement and one of them was CSS loading. I will walk you through the process and show you how you can improve your load times as well. Why loading time matters? Permalink to “Why loading time matters?”# Because Time is money. That proverb is especially true for webpage load times. Your page load time has a direct impact on your profit. People are more li...| Tomas Pustelnik
Some time ago I have published a post about tools I use in front-end development, and it had a bigger response than I expected (in a positive manner 😊). And quite a few people ask me how do I stay up-to-date with modern web dev. So I decided to share another list. This time it’s about blogs and other resources I watch and read to keep myself up-to-date with ever-evolving web development. What is my workflow Permalink to “What is my workflow”# I use Feedly to aggregate RSS feeds from ...| Tomas Pustelnik
A project I currently work on has a lot of different and sometimes non-trivial layouts. And it can be a struggle to get all the different elements sized correctly to avoid overflows and extra scrollbars. So I have deep dive into the CSS specification to learn about sizing and layout models as much as possible. And how to handle issues like this better in the future. I will share my findings with you. We will cover those topics: How percentage works for the height property Two ways how to hand...| Tomas Pustelnik
TLDR: I don’t have enough time to focus on all my side-projects and activities. So I have decided to focus more on my blog than on the Qjub. For more detailed reasons, continue reading. Why I’ve decided that way? Permalink to “Why I’ve decided that way?”# A little bit of context first. I have a full-time job (last couple of months I worked only 4 days/week actually), two little kids, a few small open-source projects, and I wrote my own blog. That is a lot of going on and while one e...| Tomas Pustelnik
Up until recently, I have hosted my site on Netlify. They offer free hosting with great Github integration and a smooth developer experience. All this is supported by plenty of other great services. I was super happy with them. But then Cloudflare announced their new service Pages. So far, Cloudflare was known for its fast CDN and networking services. Given their reputation, I have decided to give it a shot. I was wondering if changing my hosting could have some noticeable impact on my page l...| Tomas Pustelnik
Want to get better at the accessibility, but you don’t know where to start? You can do a lot for the accessibility of your websites with only a few basic techniques. Below you will find a list of items, which are easy to use, but I see many websites doing mistakes in them. TLDR: Permalink to “TLDR:”# Use semantic HTML Add meaningful labels to interactive elements and page sections on the page Make focused elements clearly visible Test with keyboard Learn how to use screen readers Please...| Tomas Pustelnik
Today’s web is a very interactive experience, yet we often fail to provide the same experience to everyone. Complex form widgets, interactive configurators, tables, shop listings, and the list goes on. We should use buttons and links to interact with those components. But often, we just put an onClick handler on a div and call it a day. That leads to a poor experience for some users. I want to show you how to properly turn a div into a button, in case you ever need it. So the result will be...| Tomas Pustelnik
Some time ago, I posted a tweet announcing I had switched from VS Code to VIM (Neovim to be precise). Given that most of my colleagues looked at me in disbelief when I told them. I have decided to summarize my reasons behind this and outline the process for those brave enough to follow 😁. Why I ditched VS Code Permalink to “Why I ditched VS Code”# I would say my two main reasons are performance and navigation in the code. VIM is just great at those. And while you can easily add navigat...| Tomas Pustelnik