logo

/blog

OpenClaw can get your Gmail disabled

All major services have policies to guard against automation. Whether its web scraping, click bots or more recently, autonomous AI agents, companies are not happy when their services are hit 10x faster and more often than a human would. My advice: always use a test account, don’t start with your 20 year old gmail account. This way you wont end up with a disabled gmail account like @iamlukethedev.

Read more →

Updated config lookup algorithm in ESLint 10

ESLint 10 is out and it comes with something truly great: config discovery starting from the directory where the linted file resides, instead of process.cwd() and moving down. This means you can have different ESLint configs for different directories without having to write a custom CLI wrapper over ESLint to deal with the whole thing. This guarantees that the config file in use is the closes to the file being linted.

Read more →

Agent token costs = yearly senior dev wage

In a recent podcast episode, Jason Calacanis mentioned he’s paying $300/day on tokens to run an AI agent (Claude). Given the wave of AI-powered layoffs in the tech industry, I can’t help but wonder: are the executives signing off on such actions victims of aggressive, well thought-out marketing or are they perpetrators?

Read more →

Code brevity

/ web-development

We all want to write simple, short, effective code. My biggest desire when i was just starting up as a developer was to write short code. Even today, when I look at a piece of code, my initial reaction is to look for ways to simplify . The problem? I might not know enough about the problem I’m solving or the code I am working with to make that change… yet.

Read more →

Let’s become web developers again

/ web-development

We’ve turned everything into bundles of JavaScript and everything else… even HTML is JavaScript… I spend most of my day looking at red text in the console and in performance audit reports for websites. Websites, mind you, not web apps! The web can do so much these days so let’s become web developers again. Or, in the words of the great Jay Z: Get back to rap, you’re T-paining too much…

Read more →

Circuit breakers

/ Opinion

The more invested you are in a specific solution to a problem the harder it is for you to consider other options. I prove this to myself on a daily basis. This is why I’ve adopted a circuit breaker — I say “STOP!”, out loud. Picked this trick up from Deep Work, by Cal Newport, a couple of years back. Works like a charm!

Read more →

Core Web Vitals - The DevTools coverage report

/ Core Web Vitals / Web Performance

Since Google announced their initiative to include page experience KPIs in how they calculate search engine rankings, brands have been faced with the poor performance of their websites. Years of technical debt induced by feature development and optimization for delivery and shorter time to market are now taking their toll. What many of us fail to read is the fine print of Google’s reasoning and recommendations around Core Web Vitals. We’re missing the fact that Core Web Vitals only impact ranking in mobile searches.

Read more →

How to remove the trailing slash of a URL on a Hugo static website running on Netlify

/ Static Site Generators

I recently migrated www.oprea.rocks from Gatsby.js to Hugo. My biggest complaint was not being able to remove the trailing slash on all pages. Assuming your website is on Netlify, here are the steps to remove trailing slashes on your Hugo website/blog. Enable asset optimization on Netlify You can hand-pick your settings but for this purpose I left them all on — especially the “Pretty URLs” setting. That turns the HTML files generated by Hugo into nicely formatted URLs, but without that ugly, trailing slash.

Read more →

Fixing Golang GIN-debug WARNING Headers were already written.

/ Software Development / Golang

If you’re just getting your hands dirty with Golang, and specifically with Gin, which is a web development framework, you might come across this specific warning: [GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 200 Most likely, you’re trying to use BindJSON on a property that does not exist. Here’s an example. I’m building an analytics solution for weremote.eu and for its pageview counter, I wanted to also be able to pass in extra props besides the usual props such an event would carry.

Read more →

Handling errors is an essential skill

/ Coding Stories / Opinion

I’ve met tons of developers who would not do error handling because of fear of it being too much. Here’s a short list of reasons: We’re going to write too much boilerplate because the properties are too deeply nested. The code will look ugly. Why write a ton of if statements? The server always returns that response, why bother? Why validate this input — it’s declared as type="number" in the DOM so it only takes numbers.

Read more →
Copyright (c) 2026 Adrian Oprea. All rights reserved.