Every developer who works with distributed teams has felt the pain: it's 9:15am and you need to schedule a meeting. You open a timezone converter, switch between tabs, do the math, close the calculator. You do this 5 times a day. There's a better way. Dedicated timezone apps (like World Time Buddy, Every Time Zone) are great for scheduling, but they require navigation to a separate website. That's
Every developer has opinions about their development environment. Terminal themes, editor fonts, keyboard shortcuts. But there's one piece of the environment that gets strangely little attention: the new tab page. You open it hundreds of times a day. It flashes on screen for a moment every time you hit Ctrl+T. And yet most developers use the browser default — which shows either a search box with a
Publishing to Mozilla's Add-ons site (AMO) is different from any other app store. Here's exactly what I learned going through the process with Weather & Clock Dashboard. Firefox currently supports both Manifest V2 and V3. Chrome is forcing V3 (which has significant limitations for ad blockers). Firefox's stance is more pragmatic — they support both and have promised to maintain V2 support longer.
It was 2:47 AM when the alerts started. A seemingly straightforward database migration had triggered a cascading failure across three downstream services, and our payment processing pipeline was dropping roughly 12% of transactions. The on-call engineer didn't need to wake anyone, locate a rollback script, or wait for a CI pipeline to churn through another deploy. She opened the LaunchDarkly dashb
How to Prevent IDOR Vulnerabilities in Django REST APIs An authenticated user changes /api/orders/42/ to /api/orders/43/ and reads someone else's order. No privilege escalation needed — the endpoint just returns it. This is IDOR in its simplest form, and it's endemic in Django REST Framework code because DRF makes it trivially easy to wire up a ModelViewSet that exposes every object in a table.
The drift problem Every project that ships a translated README has the same lifecycle: Someone writes README.md in English. A contributor opens a PR with README.zh.md. Great. Three months later, English has six new sections. Chinese has the original. A second translator opens README.es.md. Spanish gets translated from… which version? The current README.md? Or README.zh.md, by accident, because t
When I built Weather & Clock Dashboard for Firefox, I made a decision early on: no analytics, no accounts, no external calls except weather data. Here's what I learned about building browser extensions with privacy as a design principle — and why I think more extension developers should take this approach. Most web development assumes you want to know who your users are. Analytics platforms are on
Have you ever spent 20 minutes looking for a conversation you had with Cursor last week? The one where it helped you fix a tricky async bug—and now you're facing the same issue in a different project, but can't find that thread anywhere? This isn't a user error. It's a structural limitation in how Cursor handles session history. Cursor includes a built-in conversation history panel. You can browse