A few months ago I sent a $2,000 invoice to an overseas client. By the time the payout finally cleared into my local bank account, almost $400 had quietly vanished. Upwork took their cut first. Then the wire routed…
The Magic Behind the Scenes: Unveiling the Background Sync API Ever find yourself frantically refreshing a webpage, hoping for new updates, only for it to stay stubbornly the same? Or perhaps you've been on a spotty…
A chat export is thousands of lines of text. What I find more interesting in a conversation between two people is its timing: who is up at midnight, who writes on the train, the week it went quiet. So I built ChitWeave,…
Brevo, formerly Sendinblue, is the newsletter, sign-up form and chat platform behind a large number of small business and non-profit websites. If your site loads Brevo's tracking code, its chat widget or one of its…
An SDK can own a mutable state object and still need to expose it to consumers. The difficult part is deciding what a consumer actually receives. A copy can become stale. Freezing the SDK's original state prevents the…
A product cutout looks perfect over a checkerboard preview. After conversion to JPEG, the surrounding area becomes a solid rectangle. On a dark website, that rectangle is suddenly obvious. The export may be technically…
A user in Riyadh types their mobile number with Arabic digits: ٠٥٠١٢٣٤٥٦٧. Your form rejects it, even though it's a perfectly valid number. Or worse, it accepts it and stores it as typed, so your database now holds two…
Two days ago I shipped 100 document parsers with one command. Yesterday I did 100 finance validators. Same playbook. The pattern Build a small API (Cloudflare Worker) Write a JSON list of 100 keywords Template +…
I built a small, free, browser-only tool that turns an image into a single-crochet color chart. This post covers the one idea that makes it more useful than a plain pixelator: gauge. Tool:…
When building utility web apps, developers often reach for a full-stack architecture (database, auth, API routes) by default. But for document generation tools—like invoices and receipts—a serverless, zero-backend…
Choosing the right React JS development company can determine whether your web product becomes a dependable business asset or a source of ongoing technical problems. A strong partner should understand more than React…
The shelf tag says “30% off,” so the bulk option must be cheaper—right? That shortcut ignores the units that expire, the cupboard space they occupy, and the cash that could have stayed in savings. I built this…
Module Federation started in Webpack, and for years that is where it stayed. It works on Vite now, through @module-federation/vite, and works well — but Vite's dev server and Vite's build are two different machines, and…
I used to think "encrypted PDF" and "password-protected PDF" meant the same thing. Then I made a handful of test PDFs for a side project and ended up with a file that opened instantly in my browser, no prompt at all,…
Picture a client sending the contract PDF for a small freelance job. It opens straight away, with no password prompt, but the text won't copy into your notes, print does nothing, and the one tool you try says the file…
A PDF that opens without asking for anything can still be encrypted. I ran into it with a file I had made myself: a tool called it "encrypted" while every viewer I had opened it instantly. The file only had a permission…
🔗 Live app: https://ahmedawe2026-svg.github.io/DBA-Research-Dissertation-Assistant/ 💻 Source code (MIT): https://github.com/ahmedawe2026-svg/DBA-Research-Dissertation-Assistant The problem: a dissertation is spread…
A PDF that opens without asking for anything can still be encrypted. I ran into this while thinking about upload validation for document tools, so I generated seven two-page test PDFs filled with placeholder contract…
A PDF can open with no password prompt and still be encrypted. I generated seven two-page placeholder PDFs to see where that contradiction lives, and it comes down to one signed integer in the encryption dictionary.…
Imagine a page with two generated messages. You edit one, switch the category selector to hide it, and then switch back. The edited message should still be there. This goes wrong when the category handler calls the same…