DevIdiot!
Normalize Parcel Dimensions Before They Reach a Shipping Adapter
A dimension of 21.5 is incomplete input for a shipping adapter until its unit is known. Sending centimeters to a field interpreted as millimeters changes the parcel description even though the numeric value passes a basic positive-number check.Carry the unit with the measurement at intake, then convert at a defined boundary. The example below uses millimeters as its internal representation. It deliberately accepts only dimensions that convert to positive whole millimeters; another system may nee
AI crawlers don't run your JavaScript
This note has an interactive demo. Try it in the originalIf your page builds its content with JavaScript in the browser, the crawlers behind ChatGPT, Claude and Perplexity see an empty shell. They download the HTML, they may even download your bundles, but they don't execute them. Googlebot does run JavaScript, which is why this goes unnoticed for so long: your page can rank fine in Google and still doesn't exist for a big part of AI search. The demo above puts both readers side by side, a real
One database query that fixed my race condition
Connuit is an app I recently built. Pronounced in a french way, kind of the same way the french say "bonne nuit". Connuit automates repetitive tasks as workflows, and lets AI make decisions inside them. Said AI runs on a free tier with a daily limit. This seems safe; however, the underlying issue here is that 20 requests could hit the limit at the same time.The AI used here is Gemini, and in order to implement an app-wide cap on the usage limit that won't exceed gemini's 500 hits per day limit,
Building a Free Javanese Script (Aksara Jawa) Converter in Vanilla JavaScript javascript, webdev, i18n, beginners
A few months ago I set out to build something small but surprisingly deep: a converter that turns Latin text into Aksara Jawa â the traditional script of the Javanese language, spoken by ~80 million people in Indonesia. What looked like a simple "map letters to symbols" task turned into a fun lesson in writing systems. Here's what I learned.You can try the finished tool here: aksarajava.id. It's not an alphabet â it's an abugidaMy first mistake was assuming Javanese script works like the La
Spot the bug: one character breaks this JSON
Quick puzzle đ§©The JSON in the image looks fine, but JSON.parse() rejects it, and so will most APIs.One character is the problem. Which line is it on?Hint: it's a habit JavaScript allows and JSON doesn't.Comment your line number. We'll post the answer this evening.When you hit "Unexpected token" for real, paste the JSON into a validator before you hunt through a 500-line file: https://seopeck.com/tool/json-validator
Retries and backoff FAQ: 11 questions about retrying failed jobs without making things worse
Retries look like the easy part of background jobs. Something failed? Try again. But badly designed retries turn a small outage into a big one, hide real bugs, and occasionally charge a customer twice.Here are the questions that come up most, with short answers and code. 1. Why not just retry immediately?Because whatever caused the failure is probably still happening. If an API is overloaded and returns errors, every client retrying instantly makes it more overloaded. You get a retry storm:
JavaScript Anti-Debugging and Tamper Detection
Reading code is only half of what attackers do. The other half is running it under a debugger and changing it: skipping a license check, freezing a timer, or hooking a function to steal its output. Anti-debugging and tamper detection try to make that harder. This guide covers the common techniques, why most of them fail on their own, and how to use them so they actually raise the cost. A realistic goalNo client-side check can stop a determined person who controls the browser. They can patch
I tilted a scanned page 1 , 3 and 5 : Tesseract shrugged, a browser OCR scrambled the lines
, a public domain scan on Wikimedia Commons, 1,002 characters of ground truth. I rotated it by 0°, 1°, 3° and 5°, gave it three noise levels (none, Gaussian Ï=25, salt-and-pepper 5%), and ran nine tr
Notes from a 2 AM On-Call: Next.js 15 Streaming Cut Silent Death in useChat
Notes from a 2 AM On-Call: Next.js 15 Streaming Cut Silent Death in useChat The Failure Symptom[02:14:33] ERROR: StreamingTextResponse hung at token 847/2048[02:14:34] Client WebSocket: readyState = 3 (CLOSED)[02:14:35] React UI: spinner still rotating, no error boundary triggered[02:14:36] User refresh count: 1,847 in 90 secondsProduction chat interface froze mid-sentence. No error toast. No retry button. Just a spinning loader and 2,000 confused users hammering F5. The Vercel AI SDK
React Hooks Explained: useState and useEffect with Simple Examples
Originally published on CodingCush.React Hooks are special functions that let function components remember values and do extra work, such as fetching data or updating the page title. Before Hooks, you often needed a class component for these jobs. Since React 16.8, two Hooks cover most everyday needs: useState gives a component memory, and useEffect lets it react after rendering. Learn these two well, and most beginner React code suddenly starts to make sense. What Are React Hooks?A Hook is
Lovable SEO: Why Your Lovable Site Isn't on Google (and the Fix)
Originally published at muhammadmoiz.dev.Lovable SEO problems usually come down to one thing: a Lovable project is a client-side rendered React app, so the HTML a search engine first receives is an almost empty shell, and all your text, titles and links only appear after JavaScript runs. Google can render JavaScript, but it does so in a slower, separate step, and other crawlers may not do it at all. The reliable fix is to serve real HTML for every page you want ranked, which for most growing pro
reset() Inside onSubmit Only Half-Resets a React Hook Form. Here's What Stays Behind
You save a form, call reset() in your submit handler, and the inputs go blank. Looks done. Then the user starts typing the next entry and a red "Title needs 3+ chars" shows up while they're still typing, on a form that's supposed to be fresh.The values were reset. The submission state wasn't. Why it happensThe React Hook Form reset docs spell this out in their rules: "Avoid calling reset inside onSubmit. handleSubmit updates isSubmitted, isSubmitSuccessful and submitCount after your handler
Why I Built Lioratools: 100% Client-Side Web Utilities and How to Embed Them on Your Site
As developers, we often need minor micro-utilities throughout the day: formatting mixed text casings, generating random placeholder content, minifying scripts, or setting up a secure, complex string. Yet, clicking onto random web utilities usually exposes you to massive cookie tracking, server logging risks, and intrusive ads that break your flow.That is exactly why I built Lioratoolsâa curated, lightning-fast suite of development and web utilities designed to run 100% locally in the user's brow
Composio 0.28 Stops Retrying Writes. I Counted the Requests to See What Actually Changed
The @composio/core 0.28.0 changelog has a line that sounds like it changes how every agent tool call behaves: "POST and PATCH requests, including tool execution and trigger creation, are now sent once instead of being retried on a lost response or a retryable status." The reason is fair. A write can finish on the server after its response gets lost, and a blind retry sends that email twice.But if you use composio.tools.execute(), it's not a new behavior for you. I pointed 0.27.0 and 0.28.0 at a
I built an open-source, self-hosted URL shortener with .NET 10 and React 19
When building modern web applications, URL shorteners are often treated as simple toy projects. But once you consider sub-5ms redirection speeds, high-concurrency traffic surges, dynamic geo/device routing, and strict GDPR privacy, link orchestration becomes a serious engineering challenge.I wanted to solve this by building LinkLift â an enterprise-grade, self-hosted URL shortener and link orchestration platform built on ASP.NET Core (.NET 10), React 19, and Docker.â GitHub Repository: github.co
Comparing Shopify Tracking Approaches: App Embeds vs Theme Hacks
When I first launched my Shopify store, I thought the hard part was getting the first sale. I was wrong. The real headache started the day after. My inbox was flooded with variations of the same question: "Where is my order?" I was struggling to keep up with support tickets while trying to manage inventory and marketing. I looked at existing tracking solutions, but many felt bloated, required deep theme modifications, or didn't quite match the post-purchase experience I wanted to create. So I de
How I Built a Custom Shopify Tracking Widget to Reduce WISMO
When I first started managing a Shopify store, I genuinely thought the hard part was getting the first sale. I was wrong. The real headache started right after checkout.My inbox was suddenly flooded with "Where is my order?" (WISMO) emails. I was spending hours every single day just copying and pasting tracking numbers into support replies, playing a glorified human tracking-number lookup service. It was draining my time, killing my productivity, and frankly, frustrating my customers who just wa
Comparing Approaches to Calculating True Etsy Margins
When I first started selling handcrafted leather goods on Etsy, I thought the hardest part would be the craftsmanship. I was wrong. The real struggle was figuring out if I was actually making money. I spent hours tweaking a massive spreadsheet, trying to account for listing fees, transaction fees, payment processing, and the dreaded offsite ads. Every time the marketplace updated their fee structure, my fragile formulas broke. So I decided to build something.The problem with pricing on marketpla