
You’ve Been Writing Git Commit Messages Wrong. Here’s What They’re Actually For.
Most developers write “fix”, “update”, and “changes.” Six months later, when a bug hits production at 2AM, those messages mean nothing… Continue reading on Medium »
119 articles from DEV Community, Medium, The New Stack and more. Refreshed every few hours.

Most developers write “fix”, “update”, and “changes.” Six months later, when a bug hits production at 2AM, those messages mean nothing… Continue reading on Medium »

Disclosure: This draft was generated primarily with AI for NixieFX's marketing work. The source, screenshots and measurements come from the supplied local demo. Human technical and platform-policy review are required before publication. A speaking portrait can have a little motion around it while the dialogue stays still. The effect should identify the speaker without becoming another bright object behind the words. This example uses NixieFX with PixiJS 8.22.0 and nixie-fx 0.1.20. It keeps the a

In my last article, I wrote about UX bugs that pass every test — like a wallet with no visible balance. This one is about the biggest category of those bugs: what your app says, or doesn't say, when something goes wrong. The complaint came in as: "The app keeps logging me out randomly." The portal used short-lived access tokens with a refresh flow. The access token expired on schedule, the frontend's refresh call was broken, the refresh silently failed, and the app dumped the user back to the lo

A 100 MB upload through your API server holds a connection, memory, and a worker for the whole transfer. With a few users uploading at once, your app feels slow even though nothing is wrong with your code. The common fix is to let the browser send the file straight to cloud storage (S3, Cloudflare R2, and similar). The backend stops carrying the bytes and only decides who may upload what. This post covers the frontend side of that flow: browser APIs, a React implementation, progress, cancellatio

The MT5 Strategy Tester gives you a lot of numbers: profit factor, drawdown, win rate, consecutive losses. What it doesn't tell you is which part of the EA to change. A profit factor of 0.58 says the EA is losing. It doesn't say whether the entries are wrong or the exits are. So I made a small free tool that reads the Strategy Tester's HTML report and answers that question. It runs in the browser, needs no account, and the report never leaves your machine. https://app.hawk-backtester.com/en/tool

Why your bulletproof app still flashes a white screen of death, and the simple pattern keeping senior engineers from getting paged at 2 AM. Continue reading on Medium »

We write functions every day, but have you ever wondered what actually happens behind the scenes when one function calls another? Continue reading on Medium »

If you have ever built a checkout form, you have probably shown a Visa or Mastercard logo as the user types. That logo comes from the first few digits of the card number: the **BIN**, or Bank Identification Number. This post covers what a BIN tells you, how to detect the brand and validate a number in a few lines of JavaScript, and what you are allowed to keep. ## What a BIN is The first 6 to 8 digits of a card number identify the institution that issued it. The standard (ISO/IEC 7812) calls i

The unglamorous way a healthy project starts to rot months after it ships Continue reading on Python in Plain English »

Cloudflare is buying the startup co-founded by Node.js creator Ryan Dahl, a longtime competitor that recently built its own open-source The post Cloudflare acquires Node.js creator’s startup that copied its serverless playbook appeared first on The New Stack.

Be honest: how many interviews have started with "can you hear me? let me share my screen... wait, can you see it now?" Pairing on a problem should feel like pairing. So on jsitor.com you can now run a live coding interview with one link. 👉 Try it free at jsitor.com That's the demo from the jsitor.com home page. Maya is interviewing Dev on a classic two-sum problem. Both of them are in the same file, each with a named, coloured cursor. Dev writes the solution, Maya follows along and drops a fo
One package fails to build. What should happen to the other forty? vx's @demo/ui has a type error. web and docs depend on it, api does $ vx run build test --all ◼︎ 4ms failed miss @demo/ui#build ⊘ skipped @demo/docs#build • blocked by @demo/ui#build ⊘ skipped @demo/web#build • blocked by @demo/ui#build ⊘ skipped @demo/ui#test • blocked by @demo/ui#build ⊘ skipped @demo/docs#test • blocked by @demo/ui#build ⊘

The Deno team is joining Cloudflare to radically simplify self-hosting Workers and Durable Objects, so developers can use the same primitives in more places.

I built Quick Image Kit as a small browser-local image toolkit: quickimagekit.com The product is intentionally practical. Many people do not need a full photo editor. They need to make a phone photo small enough for an upload form, profile page, email attachment, document portal, school system, job application, or favicon package. The design constraint is simple: the image should be processed in the browser where possible, so the original file does not need to be uploaded to a processing server.

The architectural shift that promised simpler React apps, secretly broke our mental models, and quietly transformed server costs Continue reading on Medium »

Why are we sending confidential family photos, passport scans, and client assets across oceans just to delete white pixels? Most "online image converters" are subscription traps: "Upload your image to our AI engine..." You wait 30 seconds for a fake loading bar. "You have used 1 of 1 free monthly credits! Upgrade to Pro for $19.99/mo to download high-res." Basic image manipulation—segmentation, canvas cropping, compression, and WebP encoding—can execute in sandboxed browser memory at 60 frames p

This lab adds an experimental path without replacing your current one. Use a branch or separate checkout, not an unreviewed change to production CI. Read the current setup guide and support boundaries. The public 0.1.37 package declares Node 22.x or 24.x. Keep optional dependencies enabled because they carry the native engine. Check the installed package if you use a newer release. Install into the pilot checkout: pnpm add -D @ionify/ionify Record the resolved version from your lockfile. Avoid

If you’ve worked with PHP, you’ve probably used nl2br() to turn line breaks in plain text into HTML <br> tags. JavaScript has no built-in… Continue reading on Medium »

If you are a junior Next.js developer, error handling is the afternoon a product page throws because the database hiccuped, and the whole… Continue reading on Medium »

For years, the same three complaints topped every JavaScript survey: dates, types, and boilerplate. Continue reading on JavaScript in Plain English »

Hi everyone 👋 I'm Andrea, a full-stack developer from Italy, living in Tenerife. Yes, that one, the island with the big Teide, a volcano, which is maybe why I ended up building this. I have been building Vue apps in production for about four years: a blockchain explorer, a marketplace, editors, dashboards, data visualisation pages. What I had never built is a map. No GIS, no projections, no OpenLayers. EarthPulse. It is not a big app. But a new library and a new kind of data are a good way to f

A bank with millions of users looked hard at the shiny thing, measured it, and walked away. Here is why that should matter to you. Continue reading on Medium »

Derrière mes livres, il y a des souvenirs, des combats, des moments difficiles… mais aussi beaucoup de courage et d’espoir. 🌿 Continue reading on Medium »

Angular Signals have changed how developers think about reactive state in Angular. At the same time, RxJS remains deeply embedded in the… Continue reading on Medium »

I run UniversalNest, a WordPress publication. Most of what we publish is articles, but some topics are better served by a small interactive tool: a calculator or a side-by-side comparison. I've built a few, and I settled on one pattern that I now reuse: one self-contained HTML file, no framework, no build step, no plugin. Here is why I chose it and where it breaks down. A plugin is the "correct" answer, but for a single tool it carries a lot of overhead: Plugin updates and compatibility checks f

Cron Expressions Demystified — Build a Human-Readable Cron Parser Cron expressions are one of those things that look scary until you break them down. Here's how to parse them and generate human-readable descriptions in JavaScript. ┌───── minute (0–59) │ ┌───── hour (0–23) │ │ ┌───── day of month (1–31) │ │ │ ┌───── month (1–12) │ │ │ │ ┌───── day of week (0–7, 0 and 7 = Sunday) │ │ │ │ │ * * * * * * — every value */n — every n-th value n-m — range from n to m n,m — specific values n and m fun

People paste profile links from chats, browsers, and share sheets. Those links can carry query parameters that are irrelevant to identifying the account. A small parser should extract a handle from the profile path, reject unrelated hosts, and leave the original URL out of the lookup key. I built TikStories to accept a public TikTok handle or profile URL and show currently active public Stories. The example below is a standalone parsing exercise, not a copy of the site's internal code. It delibe

Showing a dot on a map usually means a vendor, an API key, and a script to load. That is a lot of machinery for a drawing. You can skip all of it. The race pages on FieldRank, a rankings site for trail runners, do: the server draws each map as SVG from free public data, and the map needs nothing else to load. The drawing is the easy part. The labels are where it gets hard, and they are what this tutorial builds up to. By the end you'll have one Node script that writes a labeled map of the Alps t

Guía paso a paso para instalar todo lo necesario y correr tu primera app en Android, en tu celular y en el navegador. Continue reading on Medium »

My unit tests were green. My integration tests were green. The feature was broken in a way that produced no error, no warning, and no visual clue that anything was wrong. The feature was a CSS difference blend mode, used to compare a design mockup against a live page: matching pixels turn black, so only the differences light up. Mine turned nothing black. It looked exactly like normal mode, and I lost about a week to it. The cause was one line of CSS, and the reason no test caught it is the inte

Hi everyone! My co-maker and I wanted to build a completely private messaging app that works instantly in the browser without any app store downloads. We just went live with the first version of Ripple Chat! We built this fully as a Progressive Web App (PWA) so you can install it straight to your phone's home screen like a real app. True Zero-Knowledge Privacy: Client-side encryption using ECDH P-256 + AES-GCM. Your private keys never leave your browser context. Rich Messaging: Real-time messag

Continue reading on Medium »

I do a lot of SEO and web work, which means I touch images every single day. Compress this one for a page, remove the background from that one, convert a HEIC someone sent me, resize something for a blog post. And every day it was the same routine. One site for compressing, another for background removal, and another for converting. Half of them hit me with "upgrade to Pro" after one or two images. The rest were so full of ads I had to hunt for the actual download button. Some wanted me to sign

My agent now fixes failing Playwright screenshot tests from a few lines of text instead of three PNGs. Continue reading on JavaScript in Plain English »

What Actually Happens When You Type a URL? You type: https://example.com You press Enter. A second later, the website appears. But what actually happened during that one second? A lot more than you might think. Let's break it down in simple terms. The browser first understands what you entered. For: https://example.com we have: https → protocol example.com → domain The protocol tells the browser how it should communicate with the server. Your computer doesn't directly understand example.com

Four times a year, every sole trader and landlord in Making Tax Digital (MTD) for Income Tax has to send HMRC a summary of their income and expenses. The first deadline of the 2026-27 tax year, 7 Augu

Generic "PDF to Excel" converters are great until you feed them a bank statement. Columns drift, page headers repeat mid-table, wrapped descriptions become extra rows, and the closing balance no longer matches the opening balance plus the sum of amounts. That is not a minor formatting bug — it is a wrong ledger. I spent a while on this while building a free, browser-only converter for text-layer statements. Here is the practical checklist I wish I had on day one. Open the PDF and try to select a

Every developer has opened a changelog and felt their stomach drop. Continue reading on Medium »

Nine Java 21 features that deleted half my boilerplate, with full working code and the traps I hit on the way Continue reading on JavaScript in Plain English »

Every full-stack Next.js developer eventually hits the same wall: you trigger a database update, redirect back to your dashboard, and the… Continue reading on Medium »

Every time I evaluate admin dashboard templates for internal tools, micro-SaaS backends, or client projects, I run into the exact same frustration: 200MB+ node_modules folders Heavy client-side framework lock-in Complex bundlers (Vite, Webpack, Turbopack) requiring constant dependency maintenance Fragile build chains that break when packages upgrade I wanted to challenge this pattern and explore how far modern web fundamentals can go. So I built the Maxic Fintech & SaaS Admin Kit using 100% sema

Most buttons just sit there and wait to be clicked. This one doesn't. Wrium Evasive Button is a small plugin for Wrium that makes a button (or any interactive element) smoothly dodge the cursor when you get close. It's silly on purpose, but it turns out to be surprisingly useful. Smart form validation: the submit button stays out of reach until the required fields are valid Gamified forms and playful login screens Interactive confirmations where the "wrong" choice is hard to click Smooth, physic


Introduction: Reviving Doom in the Browser Recreating Doom entirely in JavaScript without relying on WebAssembly (WASM) is a bold technical endeavor. This project, built with a custom 3D engine, pushes the boundaries of what’s possible in browser-based gaming. By avoiding WASM, the developer sacrifices potential performance gains but maintains a pure JavaScript codebase, which simplifies debugging and cross-platform compatibility. However, this decision introduces a critical trade-off: JavaScr

An XML sitemap is a list of public URLs that you want search engines to discover. It can help with discovery, but it does not guarantee crawling, indexing or rankings. If your site uses a CMS, check whether it already generates a sitemap. WordPress, Wix and other platforms can maintain one as pages are added or removed. Use that sitemap rather than creating a second file that will go stale. A manual sitemap makes sense when you have a small site, a curated URL list, or a build process that produ

If you’ve ever looked at how taxes and social contributions work in Switzerland, you know it’s notoriously decentralized. There are 26 cantons, each with its own municipal tax multipliers (Steuerfuss), varying church taxes, multiple withholding tax tariffs (Quellensteuer), and statutory pension rules that change based on your exact age bracket. When building LivingSwiss, an expat analytics and financial tool suite, our initial instinct was to treat this like a standard backend system: send the

A proposal can look perfectly reasonable until you change one option. The price updates, but the delivery time still belongs to the old plan. Now the page is giving two different answers. That is the small problem this example tackles: two packages, two revisions, and one consistent summary. It uses ordinary HTML and JavaScript. The company details and estimates are fictional. The useful part is the shape of the state. You can reuse it for a quote calculator, a package comparison, or a project s

async Is Built on an Idea You Can See in yield yield and await aren't the same thing. A generator isn't an async function, and an async function isn't a generator. But there is an idea hiding underneath both of them that is easy to miss: execution can stop here and continue later. Once you see that, async/await starts looking a lot less magical. Consider a generator: function* work() { console.log("A"); yield; console.log("B"); } Create it: const task = work(); Nothing has run yet. N
Free for your first hundred saves. No card needed.