DevIdiot!
If You Think React Is Free to Use, You Are Wrong.
React Is Not Free. Let’s Clarify This. When you use an abstraction over a complex task, it gives you convenience by moving complexity into a framework, which you learn through another mental model present in your mind. This adds more concepts, like React mental model complexity, component/state complexity, and reconciliation/runtime complexity. That’s why I say it: you move complexity into the mental model that is present in the mind. Another trade-off is control. You get maximum control wh
A college notice board in React: a first project for web design students
If you're a student learning web design and you've just finished HTML, CSS and some JavaScript, React can feel like a big jump. The best way across is a small project that you'd actually use. Here's one we give students: a college notice board. What it doesShows a list of notices (title, department, date).Lets you filter by department.Lets you add a notice through a form.Saves notices in localStorage so they survive a refresh.That's enough to touch components, props, state, events, forms, l
React: useEffect()
1. What is useEffect?useEffect() is used to perform side effects in a React component.A side effect is an operation that happens outside the normal rendering process.Examples:Fetching API dataSetting a timerAdding an event listenerUpdating the browser tab titleSubscribing to an eventBasic syntaxuseEffect(() => { // Your code}, [dependencies]);There are two important parts:() => {} -Effect function[] -Dependency arrayLet's learn what the dependency array does.2. Three types o
Introducing Still — A Commitment System, Not Another Productivity App
Most productivity tools help you manage your time.But what happens when you have enough time and still don't do what you said you would?That's the question behind Still, a commitment system I've been building to explore the gap between intention and action.Instead of simply tracking your tasks, Still helps you face your commitments.Here's what you can do with it:⏱️ Focused Sessions: Set a task, choose a duration, and enter full-screen focus mode.📊 Integrity Score: Track how consistently you comp
Does useActionState preserve input? Nine comparisons with manual form state
useActionState manages an Action's result and pending status. It does not automatically preserve input values. In this fixture, returning a validation-error result still cleared the uncontrolled input.The Action version was compared with ordinary onSubmit handling and useState, then a change to retain invalid input was tested. The state holding an Action result and the input that should remain after a failure each need a design decision. Call the same operation through an Action and onSubmi
Your PDF Converter Should Not Need Your Files
Here is a question most people never ask when they use an online file converter: where does my file actually go?With most big converter sites, the answer is: onto a stranger's server. You upload a bank statement, a signed contract, a passport scan. It is processed somewhere, stored for some amount of time (the privacy policies use words like "temporarily" and "up to 24 hours"), and you download the result and hope the deletion promise is true.We built our converters at MakeHumanAI the other way
Why I Chose App Blocks Over Custom Pages for Shopify Tracking
When I first started helping a friend manage their Shopify store, I assumed the hardest part was driving initial traffic and getting that first sale. I was completely wrong. The real headache started after the checkout was complete. My inbox was suddenly flooded with "Where is my order?" (WISMO) emails. We were spending hours manually checking tracking numbers across different carrier websites and replying to anxious customers. It was exhausting, unscalable, and felt incredibly unprofessional. I
Taming Shopify Post-Purchase: Building a Custom Tracking Widget
When I first started helping merchants optimize their Shopify stores, I noticed a glaring gap in the customer journey. The checkout experience was polished, the product pages were beautiful, but the moment a customer clicked "Pay," they were thrown into a post-purchase black hole. I was struggling with the exact same issue in my own projects: a relentless flood of "Where is my order?" (WISMO) emails. It felt like all the hard work of converting a customer was being undone by a clunky, anxiety-in
Finding your Saturn return in JavaScript (and why retrograde makes it messy)
Astrologers talk about the "Saturn return": the moment Saturn comes back to the same position it had in the sky when you were born. Whatever you think of astrology, the question underneath it is a clean astronomy problem: on which dates does Saturn return to a given ecliptic longitude?I built a small browser calculator for it, and this post covers the part that surprised me: the obvious shortcut is wrong, and the correct answer sometimes has three dates instead of one. The shortcut that doe
From Spreadsheets to Code: Calculating True Etsy Margins
When I first started selling handcrafted goods on Etsy, I did what almost every new seller does: I opened a spreadsheet. I built a massive, 14-column monstrosity to track my costs, pricing, and expected profits. For the first few months, it felt fine. But as my catalog grew from 10 items to over 150, the spreadsheet became a fragile house of cards. One accidental keystroke in a formula, or a simple copy-paste error when duplicating a row, and my projected margins were completely wrong. The break
How I Built a JavaScript Engine to Calculate Etsy Fees
When I first started selling my handmade goods on Etsy, I thought I understood the fee structure. I figured it was a simple percentage cut, like most payment gateways. But after my first month, I looked at my payout and realized my margins were significantly lower than I had projected. I was losing money on items I thought were profitable.I started digging into the receipts. It wasn't just one fee; it was a stack of them. Listing fees, transaction fees, payment processing fees, and the looming t
SynthID remove vs. metadata: what's actually inside an AI image file (EXIF, XMP, C2PA)
If you've ever downloaded an image from an AI generator and opened it in exiftool, you've probably noticed the file carries a lot more than pixels. Generators, editors and even some phones now write provenance data into the file: software names, prompts, creation tools and, increasingly, signed C2PA manifests. A lot of the "synthid remove" searches I see from photographers and indie devs are really about this layer, so it's worth separating the two things clearly. Two different things: embe
15 pages declared lang="en". 75-98% of their characters were Han.
Fifteen pages told the browser they were English. Between 75% and 98% of their characters were Han.I only found it because I stopped checking meta tags and started counting characters. The pages had titles, descriptions, canonicals, one h1 each, valid JSON-LD — everything the usual audit looks at. The lang attribute was the one field nobody had ever verified against the body text, and on four domains it was wrong on every page I sampled. What I sampledI started with 40 domains. Twelve of th
Duplicate CSV Headers in the Browser: Three Naming Rules and Where They Disagree
I work on OnePassApps, so this is a measurement of our own product in the live app, not a review of someone else's code.A CSV with two headers that mean the same thing is an ordinary file, not an edge case. What happens next - which name survives, which name gets a suffix, and whether the app tells you - is where the interesting behaviour lives. I measured it in the live Data Studio on 4 November 2026.There are three places in that studio where a column name is decided, and as of this build they
Make Leave Unchanged Different From Clear This Order Note
An order update can omit a packing note because that field has not changed. If an adapter turns every missing note into an empty value, a later status update can erase the instruction the warehouse still needs.Treat field presence as part of the data contract. For the small example below, an omitted packingNote leaves the current value alone, a nonblank string replaces it, and null explicitly clears it. This is an example contract to agree with both systems, not a claim about a particular store
I default to Next.js for a reason that has almost nothing to do with performance
Framework choice is usually developer preference dressed up as strategy, and I say that as someone whose default has been Next.js for years. The reasons I would give another developer are not the reasons that matter to the person paying for the project, and the gap between those two lists is worth writing down, because the second list is the one that survives contact with a budget. The problem it solves is a rendering problem, not a framework problemA plain React application renders in the
Core Web Vitals in Next.js: A Practical Checklist for Fast Small-Business Sites
Most performance guides are written for huge apps with dedicated platform teams. But a lot of us spend our days building sites for plumbers, dentists, salons and law firms. Those sites are small, yet speed matters even more for them, because a visitor on a phone usually wants one thing: call, book, or get directions. If the page stalls, they hit back and tap the next result.This post is the checklist we use at CodeHunterz when we build or rescue a Next.js site for a local business. It focuses on
Building a Cyberpunk Password Analyzer & Generator with Real-Time Crack Speed Estimations
Hey everyone! 👋I recently built a client-side Cybersecurity Suite that combines password strength evaluation with real-time brute-force crack time estimations, alongside a seed-based secure password generator. 🛡️ Why I Built ThisMost password checkers just give a basic "Weak" or "Strong" label. I wanted to build an interactive tool that actually breaks down how long it would take to crack a password across different hardware architectures:Standard CPU (Single Thread)High-end GPU Rigs (e.g.,
AI-written styles typecheck. Some still render nothing
Box Kite's MCP server runs your AI assistant's props through the real styling engine mid-task, and names each value that would render nothing. Below: the mistakes it catches, a worked session with every answer pasted from the server, and what it can't know about your project. It documents @box-kite/mcp 2.2.12.The examples here are screenshots; they run live in the original article. The problemThree props an assistant wrote for a settings row, handed to the server:check_styles { "props": { "
Your PDF never leaves your browser: how I built 16 PDF tools with no uploads
Most "free PDF" sites work the same way: you upload your contract, they process it on a server, you download the result. It works, but your payslip or passport scan just took a trip to a stranger's machine.I wanted to see how far a browser can go on its own. The result is PDFixed: 16 PDF tools where the file never leaves your device. Here is how the main ones work, in case you want to build something similar. The stackpdf-lib to create, merge, split and rewrite PDFspdf.js to render pages on