Articles
Long-form, practical writing on AI engineering, React and JavaScript — hosted right here.
Expiry Date Tracker App: What to Look For, What a Free Expiry Date Check App Can and Cannot Do, and Why No App Can 'Detect' the Date From a Barcode
A buyer's guide to expiry date tracker apps on Android: why a barcode scan fills in the product but never the date, what to look for (entry speed, reminders with lead times, locations, offline, no account, free vs ads), notes and calendar apps compared, and how Expiry Date Tracker: Scanner handles each point.
How to Read Resistor Color Codes (4-Band and 5-Band): The Chart, Two Worked Examples, Tolerance, and the Ohm's Law Check on iPhone
The resistor color code explained without the mnemonic: the digit chart, the multiplier band, tolerance (gold, silver, brown, red), 5-band resistors, which end to read from, two worked examples and common mistakes, plus how the resistor code and Ohm's law tools in Electrician Calculator Toolkit check the result on the bench.
Using a Teleprompter for Product Demos: How to Script and Record a Demo Video That Matches What's on Screen
A product demo mixes talking-head segments with screen recordings or product shots, and that is where scripts fall apart. A five-part demo structure, how to write lines that match the screen, which teleprompter mode to use for each segment, batching takes, and when a teleprompter gets in the way.
'URLPattern Is Not Defined': Why It Happens in Node, Jest, Safari and Firefox, and How to Fix It (Polyfill, Globals, TypeScript)
ReferenceError: URLPattern is not defined means the runtime has no URLPattern global: Node below 24 (node:url export in 23.8), Jest/jsdom, Safari before 26, Firefox before 142. The exact messages, where URLPattern exists in October 2026, the urlpattern-polyfill, feature detection, and the TypeScript 'Cannot find name' fix.
WhatsApp QR Code Generator on Android: Turn a Chat Link Into a QR Code You Can Print, Post and Share
What a WhatsApp QR code actually contains, how it differs from the QR inside WhatsApp Business, how to convert a wa.me link into a QR on Android with Chat Link & QR Code Maker, the print sizes and margins that keep it scannable, where to put it, and how to test it before it goes on a flyer.
wa.me Link Not Working? The wa.me Format Checked Line by Line (iPhone Troubleshooting)
A wa.me link that says the number is not on WhatsApp, opens a chat with no message, or lands in Safari instead of the app is almost always a format problem. The exact wa.me format, the number rules, each symptom with its cause and fix, why a QR code won't scan, and how Chat Link & QR Code Maker builds the link correctly on iPhone.
How to Edit a Script Down by 30% Without Losing the Point (With a Worked Example)
Most first-draft scripts are a third too long. A cutting method for creators: a 120-word draft edited to 85 words line by line, the seven rules that do the cutting, how to check length against your speaking rate, when not to cut, and how to record both versions back to back with a teleprompter.
'Fetch Is Aborted': What the Error Means, Every Place It Comes From, and How to Fix Each One
'Fetch is aborted', 'The user aborted a request', 'The operation was aborted' and Node's 'This operation was aborted' are the same thing: an AbortSignal passed to fetch fired. What each runtime calls it, the seven places the abort comes from (effect cleanup, AbortController timeout, AbortSignal.any, search-as-you-type, navigation, reused controllers, body reads), and the fix for each.
How to Transcribe a Long WhatsApp Voice Note on Android and Turn It Into Notes You Can Search (Offline)
A ten-minute WhatsApp voice note from a client, a doctor or a relative is a record you cannot search or skim. How to transcribe long voice notes on Android entirely offline with Voice Note to Text, clean the transcript into usable notes, file it in Google Keep, Docs or Obsidian, and what the limits are.
Black Friday and Holiday Gift Shopping: How to Keep the Receipts and Warranties for Everything You Buy (iPhone Warranty Tracker)
Gifts bought in November come with warranties that start at purchase, not at Christmas, and receipts that vanish by January. A practical system for logging holiday purchases on iPhone with Warranty Tracker & Receipt Log: what to photograph, how to record gift receipts, extended warranties and credit-card cover, and when a paper folder is enough.
Teleprompter for Wedding Speeches and Toasts: How to Rehearse, Record and Deliver a Speech Without Reading Off Your Phone
Using a teleprompter for a wedding speech or toast: why rehearsing on camera beats reading from notes, how to write a speech that survives nerves, the three ways to use a teleprompter app on the day (rehearsal only, recorded video message, and live with a discreet phone), and when not to use one at all.
React 19.3: What's New and What to Change — Stable ViewTransition, Fragment Refs, browser(), Trusted Types and Independent Transitions
React 19.3 shipped on 9 September 2026. A practical tour of the release: <ViewTransition> and Fragment refs now stable, addTransitionType, the new browser() opt-out from server rendering, Trusted Types support, rendering Context directly from Server Components, independent transitions, and an upgrade checklist.
How to Print a WhatsApp Chat on Android: Export It, Turn It Into a Paginated PDF With Dates and Times, and Print From Your Phone or a Computer
You cannot print a WhatsApp chat directly on Android. The clean route: Export chat (without media) to a .txt, open it in Chat Export Studio to get a paginated PDF with sender, date and time on every message, then print from the share sheet, a printer app or a computer. Limits, tips and what to check before you print.
How to Translate a WhatsApp Voice Message on iPhone: Transcribe It First, Then Translate (Works Offline, Any Language)
There is no WhatsApp voice message translator built into iPhone. The reliable route is two steps: get the voice note as text on the phone, then translate the text with Apple Translate. How to do it with WhatsApp's own transcripts, what to do when they are not available, and how to keep the audio private.
Repurposing One Script Across Platforms: How to Record Once for Reels, Shorts, TikTok, LinkedIn and YouTube Without It Looking Recycled
One script, five platforms: how to write a modular talking-head script, record the swappable parts as separate takes with a teleprompter, and cut platform-specific versions for Reels, Shorts, TikTok, LinkedIn and long-form YouTube without re-filming.
set.union is not a function: Why the New JavaScript Set Methods Fail in Node 20, Older Browsers and Some TypeScript Setups, and How to Fix It
TypeError: set.union is not a function (or intersection, difference, isSubsetOf) means the engine predates the ES2025 Set methods: Node 20 and below, Chrome before 122, Firefox before 127, Safari before 17. How to check, the one-line fallbacks, the core-js polyfill, and the TypeScript lib fix.
What Is a PTT .opus File? Where WhatsApp Hides Voice Notes on Android, Why They Will Not Play, and How to Open or Convert Them to MP3
PTT-20261021-WA0007.opus is a WhatsApp voice note: PTT stands for push-to-talk, the date is when it was recorded, and .opus is the codec most Android players and PCs refuse. Where the files live on Android, how to read the name, three ways to open them, and how to convert a PTT .opus file to MP3 on the phone without uploading it.
How to Convert Voice Memos, Voicemails, Telegram and Signal Voice Messages to MP3 on iPhone (Offline, No Upload)
Voice Memos, visual voicemail, Telegram and Signal all hand you .m4a or .ogg files that some players, car stereos and transcription tools refuse. How to get each one out, convert it to MP3 or lossless WAV on the iPhone itself with a free app, when you do not need to convert at all, and the limits.
Teleprompter Scripts for Compliance-Heavy Topics: How to Record Medical, Legal and Financial Videos Word-for-Word Without Sounding Like a Disclaimer
When the wording has been approved by legal, you cannot improvise. How to write and record compliance-heavy scripts on an iPhone teleprompter: separating approved sentences from your own, voice-follow for exact wording, keeping disclaimers readable, a reviewable take, and when a teleprompter is the wrong tool.
Object.groupBy is not a function: Why It Fails in Node 20, Safari 17.3, Older Chrome and Some TypeScript Setups, and Five Ways to Fix It
TypeError: Object.groupBy is not a function means the runtime predates ES2024 grouping: Node 20 and below, Safari before 17.4, Chrome before 117, Firefox before 119. How to tell which one you hit, the reduce fallback, core-js and es-shims polyfills, the TypeScript lib fix, and when Map.groupBy is the better call.
Pack It Perfect Tips: How to Solve Every Packing Puzzle Level With Three Stars, From the First Suitcase to the Road Trip Car Boot
A strategy guide to Pack It Perfect: Packing Game on Android: how the grid, rotation and blocked cells work, a corners-first method that solves most levels without hints, how stars are scored, what the four chapters change, and when a hint or a skip is the right call.
Who Talks the Most in Your WhatsApp Chat? How to Get Chat Statistics on iPhone Without Uploading the Conversation
How to see who sends the most messages in a WhatsApp chat, the busiest hour, the most-used emoji and the total word count on iPhone, using the export file and Chat Export Studio: PDF, which parses everything on the phone and uploads nothing.
Teleprompter Font Size, Contrast and Readability: The Settings That Decide Whether You Look Like You Are Reading
How to set teleprompter text size, line length, contrast and scroll position on an iPhone so you can read at a glance without your eyes visibly tracking. A settings walkthrough for Teleprompter: Camera Overlay, with the trade-offs for distance, lighting and long scripts.
toSorted is not a function: Why It Fails in Node 18, Older Safari, Jest and Some Build Targets, and Five Ways to Fix It
TypeError: arr.toSorted is not a function means the runtime predates the ES2023 copying array methods: Node 18 and below, Safari before 16, Chrome before 110, Firefox before 115, or a jsdom-based Jest. How to tell which one you hit, the one-line fallback, core-js and TypeScript lib fixes, and when to just use slice().sort().
Idle Blacksmith: Forge Tycoon Beginner's Guide: How Offline Earnings Work, What Every Upgrade Does, and When to Pass the Forge
A beginner's guide to Idle Blacksmith: Forge Tycoon on Android: the forge-sell-reinvest loop, how apprentices and their x2 milestones work, what Hammer Weight, Bellows, Merchant Guild, Quench Barrel and Fame actually do, how offline earnings are calculated, and a simple rule for when to Pass the Forge for Legacy Embers.
My Toddler Won't Brush Their Teeth: Six Things That Actually Work, Including a Pretend Call From a Friendly Officer
When a two- or four-year-old refuses to brush, the fix is rarely more insistence. Six approaches parents use, from letting them brush you to a two-minute song, plus how the Brushing teeth call in Good Behavior Police Call (free iPhone app) turns the job into a request from someone new, what the officer says, and when not to use it.
How to Read a Long Script on a Teleprompter Without Losing Your Place: Formatting, Pacing and Recovery
Long scripts fail on teleprompters for predictable reasons: walls of text, a scroll speed that drifts, and no way back when you stumble. How to format a 10-minute script so your eye never hunts for the line, when voice-follow beats auto-scroll for length, and a recovery routine for the moment you lose your place on camera.
Promise.withResolvers is not a function: Why It Happens in Node 20, Older Safari and Jest, and Four Ways to Fix It
TypeError: Promise.withResolvers is not a function means the runtime predates ES2024: Node 20 and below, Safari before 17.4, Chrome before 119, Firefox before 121, or a Jest/jsdom environment. The exact versions that support it, a two-line fallback, the core-js and es-shims polyfills, and how to make TypeScript stop complaining.
How to Play Mancala (Kalah Rules) and Five Beginner Strategies That Beat the Computer, With a Free Offline Android Game to Practise On
Mancala rules in plain English: the 6-pit, 4-stone Kalah setup, sowing, the extra turn, captures and how the game ends. Then five strategies that work against the computer, and how Mancala Offline on Android lets you practise with four difficulty levels, a daily puzzle and pass-and-play.
How to Photograph Fireworks on iPhone This Diwali and Bonfire Night: Night Cam's New Fireworks Mode, Step by Step
Diwali falls on 8 November 2026 and Bonfire Night three days earlier. Why fireworks come out as white blobs on a phone, how Night Cam's new Fireworks mode gathers three seconds of light trails and keeps video from blowing out, where to stand, and the settings to leave alone.
Teleprompter for Webinars and Live Streams: Script the Parts That Should Be Scripted, Wing the Rest
A webinar is three scripted minutes wrapped around forty unscripted ones. How to use an iPhone teleprompter for the open, the transitions and the close without reading the whole hour, where to put the phone next to a webcam, and why a live stream needs a different setup from a recording.
scheduler.yield(): How to Break Up Long Tasks Without Losing Your Place, and What to Do in Safari
scheduler.yield() lets a long JavaScript task hand control back to the browser and resume ahead of other queued work. How it differs from setTimeout(0), how priority and abort signals are inherited from postTask, a chunking pattern for loops, the feature-detect fallback for Safari, and where it helps INP.
Does Sunscreen Expire? Period-After-Opening Dates for Sunscreen, Skincare and Makeup, and How to Track Them on Android
Sunscreen, mascara and moisturiser all have two clocks: the printed expiry and the period after opening (the little open-jar symbol). What the dates mean, how long common products last once opened, and a free Android app that reminds you before they go off.
Box Fill Calculator on iPhone: How NEC 314.16 Counting Works, a Worked Example, and the Mistakes That Fail Inspection
How to calculate box fill under NEC 314.16(B): which conductors count, the allowances for clamps, fittings, devices and grounds, a full worked example for a two-gang switch box, and how an offline iPhone calculator does the counting for you.
The 11 Most Common Teleprompter Mistakes (and the Fix for Each)
Reading eyes, robot voice, a script that runs away from you, text so small you squint: the teleprompter mistakes that make a video look read, ranked by how often creators make them, with the fix for each one on an iPhone.
Node.js 26 Becomes LTS on 28 October 2026: Which Node Version to Use Now, and How the New Yearly Release Schedule Works
Node.js 26 enters Active LTS on 28 October 2026, Node 24 moves to maintenance, Node 22 is on its way out, and Node 27 starts a new one-release-a-year cycle with alpha builds. What to run in production, what to upgrade, and when.
Website to MCP: Weft vs Playwright MCP vs Scraping — Which Should You Use?
Three ways to give Claude or Cursor access to a website: call the site's own API with Weft, drive a browser with Playwright MCP, or scrape HTML. How each works, what it costs in tokens and reliability, and when to pick which.
MCP Server Without an API Key: How Logged-In Sessions, Cookies and Bearer Tokens Work (Safely)
How an MCP server can use a website without an API key: cookie sessions vs bearer tokens vs CSRF headers, why requests should run inside your browser, and the safety rules Weft follows so credentials never reach your AI.
Medium MCP Server: Get Your Medium Stats in Claude Without an API
Medium has no public stats API. Here's how I turned medium.com into an MCP server with Weft so Claude Code can answer "which of my stories got the most views?" from my real account — in about two minutes.
How to Add an MCP Server to Claude Code, Claude Desktop, Cursor and Codex (Config Files Explained)
Where each AI client keeps its MCP config — claude_desktop_config.json, ~/.claude.json, ~/.cursor/mcp.json and Codex's config.toml — with copy-paste examples, the claude mcp add command, and fixes for servers that won't load.
How to Turn Any Website Into an MCP Server (No API Key Needed)
Convert any website you're logged into into an MCP server that Claude Code, Claude Desktop, Codex or Cursor can use — no API key, no OAuth app, no scraping. A step-by-step guide with Weft.
WhatsApp Profile Picture Keeps Getting Cropped on Android? How to Set a Full-Size DP Without Cutting Anything Off
WhatsApp forces every profile photo into a square and shows it as a circle, so wide photos and logos lose their edges. Why it happens, the manual workaround, and a free Android app that pads any photo to a square so the whole picture fits, offline.
A Home Inventory for Insurance Claims on iPhone: Receipts, Serial Numbers and a CSV in One App (Warranty Tracker)
After a burglary, fire or flood, an insurer asks for proof you owned what you are claiming. How to build a home inventory on your iPhone with Warranty Tracker & Receipt Log: receipt photos, serial numbers, prices and a CSV export, all offline.
Overcoming Camera Anxiety: Why Talking to a Lens Feels Awful and 9 Things That Actually Help
Freezing, rambling and twenty deleted takes are normal when you record yourself. Why camera anxiety happens, what does not help, and nine practical changes to your setup, script and process that make recording feel like talking to a person.
crypto.randomUUID is not a function: Why It Happens (HTTP, Old Node, Safari) and How to Fix It
crypto.randomUUID() only exists in secure contexts and newer runtimes. The four causes of 'crypto.randomUUID is not a function', how to tell which one you have, and a safe fallback that does not silently produce weak IDs.
WhatsApp Voice Transcripts Not Available in Your Language on Android? How to Read Any Voice Note as Text, Offline
WhatsApp's built-in voice message transcripts only cover a handful of languages on Android. What the feature can and cannot do, why your language is missing, and how to transcribe any voice note in around 100 languages on your phone without uploading it.
WhatsApp Voice Note to WAV on iPhone: When You Need Lossless Audio for Editing, Transcription or Evidence
MP3 is fine for listening; WAV is what editors, transcription services and formal records usually want. How to convert a WhatsApp .opus voice note to WAV on an iPhone, offline, and when MP3 is actually the better choice.
Teleprompter for Sales and Outreach Videos: How to Read a Script That Still Sounds Personal
How to record personalised sales, prospecting and outreach videos on an iPhone with a teleprompter: the one-paragraph script structure, the parts you must say unscripted, eye contact, length, and the mistakes that make a video feel mass-produced.
Run TypeScript in Node.js Without a Build Step: Type Stripping Explained (Node 22, 24 and 26)
Node.js now runs .ts files directly by stripping types. Which versions support it, what syntax is not allowed, the tsconfig to pair with it, the gotchas with imports and enums, and when you still need tsx or a bundler.
What Does "Export Chat" Mean in WhatsApp on Android? What It Includes, What It Leaves Out, and How to Turn It Into a PDF
"Export chat" in WhatsApp on Android saves a copy of a conversation as a text file. What is in the file, what is not, whether the other person is told, the message limits, and how to turn the export into a readable PDF.
Is a Pretend Police Call Bad for Kids? Fear vs Encouragement, and How to Use One Without Scaring Your Child
Pretend police call apps for kids range from threatening to gentle. The difference between fear-based and encouragement-based nudges, what Good Behavior Police Call does differently on iPhone, and the house rules that keep it kind.
Batch-Recording a Week of Videos in One Sitting: A Teleprompter Workflow That Doesn't Burn You Out
How to batch-record five to seven talking-head videos in one session on an iPhone: script prep, a fixed setup, a running order that protects your energy, and a teleprompter that keeps every take on pace.
"AbortError: signal is aborted without reason" — What It Means and How to Fix It (fetch, React, Next.js)
The AbortError 'signal is aborted without reason' comes from calling abort() with no reason. Where it shows up (fetch cleanup, React Strict Mode, Next.js, axios), how to silence it correctly, and how to pass a real reason.
WhatsApp Voice Note Won't Play in the Car, on a PC or in an Email? Where .opus Files Fail and How to Fix It on Android
Why a forwarded WhatsApp voice note refuses to play on a car stereo, Windows PC, email attachment or transcription tool, and the Android fix: share it to Opus to MP3 Converter, pick MP3 or WAV, and send a file that opens everywhere. Includes the batch and WAV cases.
How to Photograph the Orionid Meteor Shower With an iPhone (21–22 October 2026): Timing, Moon, Settings and Realistic Odds
The Orionids peak on the morning of 21 October 2026 with a bright gibbous moon. When to go out, where to look, why the Moon's setting time decides your odds, which iPhone settings catch a meteor, and what Night Cam's Stars, Trails and Time-lapse presets can and cannot do.
Recording Proper 4K Video on an iPhone: Settings, Storage, the Front Camera Question, and When 4K Is the Wrong Choice
How to record genuinely good 4K talking-head video on an iPhone: the resolution and frame-rate settings, HEVC vs Most Compatible, storage per minute, locking exposure and white balance, why the front camera is fine, and the cases where 1080p is smarter.
URLPattern: The Built-In Way to Match and Parse URLs in JavaScript (Browsers and Node)
A practical guide to the URLPattern API: pattern syntax (:id, wildcards, regex groups, modifiers), test() vs exec(), baseURL rules, ignoreCase, a client-side router in 30 lines, service-worker routing, Node 24 global support, Baseline status and the gotchas.
Expired Medicine in the Cabinet? A 20-Minute Android Routine for Tracking Medicine and First-Aid Expiry Dates
How to audit a medicine cabinet or first-aid kit once and never let it lapse again on Android: reading the date on the pack, logging each item with the Medicine tag, choosing a 7-day warning, the Android 12+ alarm permission that makes reminders arrive, and what the app does not do.
How to Transcribe Voice Memos, Voicemails and Interview Recordings on iPhone, Offline (No Subscription)
Beyond chat apps: how to turn an iPhone Voice Memo, a saved voicemail or a long interview recording into text on the phone itself, with nothing uploaded. Which formats work, what to expect from long files, how to get a cleaner transcript, and what the one-time unlock covers.
A Teleprompter for Teachers and Educators: Flipped-Classroom Videos, Lecture Capture and Parent Updates Without the Stumbles
How teachers use an iPhone teleprompter for flipped-classroom explainers, revision videos, lecture intros and parent messages: scripting for students, recording with pupils in the room, voice-following at classroom pace, and when a prompter is the wrong tool.
toSorted, toReversed, toSpliced and with(): JavaScript's Non-Mutating Array Methods, When to Use Them, and the Traps
A practical guide to ES2023's change-array-by-copy methods: toSorted vs sort, toReversed, toSpliced vs splice, Array.prototype.with, browser and Node support, the TypeScript lib setting, typed arrays, and when a copy is the wrong tool.
How to Send a WhatsApp Message Without Saving the Number on Android: Four Ways Compared
Four ways to message someone on WhatsApp without adding them to your contacts on Android: the wa.me trick in Chrome, WhatsApp's own new-chat search, a free offline link and QR app, and a home-screen shortcut. Which to use when, and the privacy angle for your own number.
A WhatsApp QR Code for Your Menu, Shop Counter or Market Stall: The Print-Ready Setup on iPhone
How to make a WhatsApp QR code customers can scan from a menu, counter card, shop window or flyer: the pre-filled message that gets you better enquiries, print sizes that scan reliably, where to place it, and how to do it offline on an iPhone in a few minutes.
Why On-Device Speech Recognition Matters for a Teleprompter (and for Your Privacy)
Voice-following teleprompters listen to every word you say. Where that audio goes depends on one design choice: on-device or cloud speech recognition. What the difference means for privacy, airplane mode, scripts over a minute long, and when cloud recognition is still the better tool.
ReferenceError: structuredClone is not defined — The Fix for Node, Jest (jsdom), TypeScript and Old Browsers
Why structuredClone is not defined in your environment, which Node and browser versions ship it, the Jest + jsdom trap and three ways out of it, the TypeScript lib setting, and a safe feature-detected fallback.
Read WhatsApp Voice Notes as Text on Android, Offline: The Questions People Actually Ask
An Android FAQ for turning WhatsApp, Telegram and Signal voice notes into text without uploading them: the share-sheet route, what to do when WhatsApp's own transcript is missing for your language, long recordings, accuracy, and what the one-time purchase covers.
Sizing a Circuit on Your iPhone: Wire Size, Voltage Drop and Conduit Fill in One Pass With Electrician Calculator Toolkit
A worked example of sizing a branch circuit on an iPhone with Electrician Calculator Toolkit: load and breaker, wire size with derating, voltage drop and conduit fill, with the NEC 2023 table behind each number and the cases where you still open the book.
The Complete Talking-Head Filming Setup: Phone, Light, Sound, Script and Eye Line, With No Studio
A step-by-step talking-head video setup for creators filming on an iPhone: where to put the phone and the light, how to get clean audio, framing that survives every platform, and where the script goes so you can read it without looking like you are reading.
React useEffectEvent: The Practical Guide to Effects That Read Fresh Props Without Re-Running
How useEffectEvent (stable since React 19.2) separates event-like logic from Effect dependencies: the stale-closure problem it solves, the three linter rules, real patterns for sockets, timers and listeners, and when useCallback or a ref is still the better tool.
How to Save a WhatsApp Chat as a PDF on Android When HR, a Landlord or an Insurer Asks for It
Someone official has asked for a copy of a WhatsApp conversation. How to export the chat on Android, turn the .txt or .zip into a readable, paginated PDF with Chat Export Studio, and what to check before you send it.
How to Keep Track of Warranties on iPhone: Receipts, Expiry Reminders and the One-Hour Setup for Everything You Own
A practical system for tracking warranties on iPhone with Warranty Tracker & Receipt Log: what to log, how to photograph receipts, reminder lead times that work, extended warranties, and when a photo album is enough.
Using a Teleprompter for Voiceovers and Podcasts: When the Camera Is Off, the Rules Change
How to use a teleprompter app for voiceovers, podcast intros and audio-only recordings: voice-follow vs auto-scroll, formatting a script for the ear, recording in takes, and when reading is the wrong choice.
React useEffect Cleanup: When It Runs, Why It Runs Twice, and the Patterns That Actually Need It
A practical guide to the React useEffect cleanup function: when cleanup runs, why StrictMode runs effects twice, cancelling fetches with AbortController, timers, subscriptions, and React 19 ref cleanup.
Expiry Date Tracker for Android: A 10-Minute Setup So Food, Medicine and Cosmetics Stop Expiring Unnoticed
Set up Expiry Date Tracker: Scanner on Android in ten minutes: barcode scanning, date chips, reminder timing, the permissions that make reminders arrive, and what to track beyond food.
Good Behavior Police Call: How the Gentle Pretend Police Call for Bedtime, Teeth and Tidy-Up Works on iPhone
Good Behavior Police Call is a free iPhone app where a gentle, made-up officer rings your child about bedtime, teeth or tidying up. First-call setup, the 13 calls, and when not to use it.
The Ideal Script Length for a 60-Second Video: How Many Words Really Fit (With a Worksheet)
How many words fit in a 60-second video, why most scripts run long, a two-minute way to measure your own pace, and word budgets for 15, 30, 60 and 90-second clips.
Aurora Forecast for Your Area: The Kp Index Explained (What Kp Do You Need?)
How to read an aurora forecast: what the Kp index means, which Kp you need to see the northern lights where you live, the OVATION map, the 3-day outlook and why cloud cover matters more than Kp.
iPhone Camera Settings for the Northern Lights (and the Mistakes That Blur Aurora Photos)
The best iPhone camera settings for photographing the northern lights: Night mode, exposure time, focus, lens choice and white balance, plus how to know if the aurora is worth going out for tonight.
How to Convert .opus to MP3 on iPhone (and Android): Free Methods First
An .opus file will not open in most players, editors or car stereos. Here are the free ways to convert it to MP3 on iPhone, Android and a computer, which one to pick, and the mistakes that waste time.
React ViewTransition Is Stable in 19.3: Dropping unstable_, the Final API, and the Rules That Trip People Up
React 19.3 makes ViewTransition a stable export. How to drop unstable_, the final props, addTransitionType, Suspense integration and the rules that silently disable animations.
How to Sound Natural While Reading From a Teleprompter: 9 Drills That Work
Reading from a prompter does not have to sound like reading. Nine drills for pauses, emphasis, pace and eye position — and when to stop reading verbatim.
Fixing "AbortSignal.timeout is not a function" (and AbortSignal.any): Causes, Checks and Fallbacks
Why AbortSignal.timeout and AbortSignal.any throw "is not a function" in old runtimes, Jest/jsdom and TypeScript - and how to diagnose and fix each case.
Scripting Hooks That Hold Watch Time (Not Just Stop the Scroll)
Most hook advice teaches you to win the first second and lose the next ten. How to write an opening that earns the rest of the video — and how to read it without sounding like an ad.
CSS @scope Is Baseline: A Practical Guide for React Developers
@scope became Baseline in March 2026. What it actually solves, how scoping roots and limits work, the donut problem, and whether it replaces CSS Modules in a React app.
Using a Teleprompter for Online Courses and Tutorials
Course modules are long, technical, and unforgiving of rambling. How to use a teleprompter for tutorial video without sounding like you are reading a manual aloud.
Import Text: Loading Text Files as Modules in JavaScript
The TC39 import-text proposal reached Stage 3. What it does, how it differs from JSON modules and bundler loaders, and why it is a smaller feature than it looks.
What to Look For in a Free Teleprompter App (and What “Free” Usually Costs)
A buyer's checklist for free teleprompter apps: the five features that actually change your footage, the three traps hidden in the word free, and when to skip the app entirely.
Promise.withResolvers(): The Escape Hatch for Promises You Resolve Later
Promise.withResolvers() is now widely available. A practical guide to what it replaces, where it genuinely helps, and the two places it will quietly hurt you.
Mirror Mode and DIY Teleprompter Rigs: What You Actually Need to Build One
How teleprompter mirror mode works, how to build a beam-splitter rig at home, and the honest test for whether you need a rig at all or just a better phone position.
Recording Video Confidently in a Second Language
Filming in a language you did not grow up speaking is a memory problem, not a fluency problem. How to script, pace and record so you sound like yourself on camera.
Comparing Two Sets in JavaScript: Equality, Subset, Superset and Disjoint
JavaScript has isSubsetOf, isSupersetOf and isDisjointFrom but no equals. How to test set equality correctly, what set-like means, and the gotchas that bite.
AbortSignal.timeout() and AbortSignal.any(): Request Timeouts Without the setTimeout Dance
Stop hand-rolling AbortController timeouts. How AbortSignal.timeout() and AbortSignal.any() work, how to tell a timeout from a user cancel, and what to watch for in Node.
How to Keep Eye Contact With the Camera (And Why It Is Harder Than It Looks)
Looking at the lens and looking near the lens produce completely different results on video. The mechanics of camera eye contact, and how to fix it if you keep drifting.
JavaScript Decorators in 2026: The Stage 3 API, and Why Your Old Ones Still Work
Standard decorators shipped in TypeScript 5.0 with a completely different API from experimentalDecorators. What changed, what you lose, and whether to migrate.
Using a Teleprompter for TikTok: Where Scripted Videos Actually Lose People
TikTok punishes polish differently from Reels or Shorts. How to script for it, which teleprompter mode fits, and the videos where you should not use one at all.
Object.groupBy and Map.groupBy: Grouping Arrays Without reduce()
ES2024 gave JavaScript native array grouping. How Object.groupBy and Map.groupBy work, the null-prototype and key-coercion details, and when reduce is still the right call.
Using a Teleprompter for YouTube Shorts: What Actually Changes from Reels
Shorts and Reels look identical and reward different scripts. How to write, set up and record a Shorts script with a teleprompter — including when not to use one.
Five Small ES2026 APIs That Delete Utility Code You Have Been Writing for Years
Error.isError, Map.getOrInsert, Uint8Array base64 and hex, Math.sumPrecise and Iterator.concat — the unglamorous half of ES2026, and the helper functions each one retires.
Using a Teleprompter for Instagram Reels (Without Looking Like You Are Reading One)
How to script, position and record Instagram Reels with a teleprompter app — the vertical crop problem, the nine-second hook, and when a prompter makes Reels worse.
Deep Copying in JavaScript: structuredClone, JSON Round-Tripping, and What Each One Quietly Breaks
structuredClone is in every modern browser and Node 17+. Here is exactly what it copies, what it throws on, and why JSON.parse(JSON.stringify(x)) silently corrupts data.
Voice-Follow vs Auto-Scroll: Which Teleprompter Mode to Use When
Voice-driven scrolling and classic auto-scroll solve different problems. A practical comparison of when each one wins, when each one fails, and how to choose per video.
TC39 Type Annotations: What 'Types as Comments' Actually Proposes, and Where It Stands
The proposal to put type syntax in JavaScript is still Stage 1 — while Node quietly shipped type stripping anyway. What is in scope, what is not, and what to do today.
How to Write a Video Script That Doesn't Sound Written
The reason scripted videos sound stiff is not the teleprompter — it's the sentences. Eight rewriting habits that make a written script sound like you talking.
Importing JSON in Node.js: require, Import Attributes, and TypeScript
How to import JSON in Node.js in 2026 - require vs import attributes vs fs.readFile, why `with { type: 'json' }` is mandatory, and how to make TypeScript agree with you.
9 Benefits of Using a Teleprompter App (And When You Should Not Use One)
What actually changes when you read from a teleprompter: fewer takes, real eye contact, tighter scripts and less on-camera anxiety — plus the situations where a teleprompter makes your video worse.
WhatsApp Link Generator: Create a wa.me Click-to-Chat Link, QR Code and a Profile Picture That Does Not Crop
How wa.me links work, how to add a pre-filled message, common number-format mistakes, how to print a WhatsApp QR code for a menu or business card, and how to set a full-size profile picture without cropping.
How to Export a WhatsApp Chat to PDF on iPhone (Printable, With Statistics)
WhatsApp only exports a chat as a .txt inside a .zip. This guide shows where the Export Chat option is, what you get, and how to turn it into a clean, paginated PDF with message bubbles and statistics, without uploading the conversation.
How to Transcribe WhatsApp Voice Messages to Text on iPhone (Any Language, Offline)
WhatsApp’s own voice-to-text is missing for many countries and languages and never covers saved files. Here is a two-tap way to transcribe any voice note on the iPhone itself, with nothing uploaded.
How to Convert a WhatsApp Voice Note to MP3 on iPhone (Offline, No Upload)
WhatsApp voice messages are .opus files that most players cannot open. Here is how to get the file out of WhatsApp and convert it to MP3 or WAV on the iPhone itself, without uploading it to a website.
Work With Me: AI Engineering, MCP Architecture, AI Enablement and Training
I build MCP architectures, ship agentic AI in production, and train teams to actually use it. Here is exactly what I do, how engagements run, and how to hire me or book training.
import defer: Lazy Module Evaluation in JavaScript and TypeScript 5.9
How the TC39 import defer proposal delays module evaluation until first use — the semantics, what TypeScript 5.9 does with it, runtime support in Deno and Bun, and where it actually helps startup time.
Array.fromAsync: The Complete Guide to Collecting Async Iterables
A practical Array.fromAsync guide: how it works, how it differs from Promise.all and for await, mapping with async functions, pagination, and the gotchas.
JSON Modules and Import Attributes: Import JSON Without fetch or a Bundler
JSON modules are Baseline: import JSON directly with the ES2025 with { type: 'json' } syntax in every modern browser, Node 22+ and Deno — and when fetch still wins.
Array.fromAsync, Promise.try and RegExp.escape: Three ES2026 Features Worth Using Today
A practical guide to the most useful ES2026 additions — Array.fromAsync for collecting async iterables, Promise.try for unifying sync/async calls, and RegExp.escape for safe dynamic regexes.
React's use() Hook: Reading Promises and Context the New Way
React 19's use() reads promises and context right in render — even conditionally. How it works with Suspense and Server Components, plus the caching gotcha.
The Navigation API Is Baseline: A Practical Guide to Replacing History Hacks
The Navigation API now works in Chrome, Edge, Firefox and Safari. How navigation.navigate, intercept() and entries() replace History API hacks in real SPAs — with code.
AbortController in Practice: Cancel Fetch, Add Timeouts, and Auto-Clean Event Listeners
A practical guide to AbortController and AbortSignal — cancelling fetch requests, AbortSignal.timeout and AbortSignal.any, React useEffect cleanup, and one-line event listener removal.
React Server Components in 2026: A Practical Mental Model (Finally)
React Server Components are now the default for new projects — but the mental model still trips people up. What actually runs where, what 'use client' really marks, and where to draw the boundary.
JavaScript's using Keyword: Explicit Resource Management, Explained with Real Code
ES2026's using and await using declarations auto-dispose resources when a scope exits. How Symbol.dispose, DisposableStack and async disposal work in practice.
JavaScript Set Methods: union, intersection, difference and Friends, Explained
JavaScript finally has real set operations: union, intersection, difference, symmetricDifference and the subset checks. How each works, the set-like rules, and where they beat array tricks.
JavaScript Signals: A Practical Guide to the TC39 Proposal
What the TC39 Signals proposal actually gives you: Signal.State, Signal.Computed, and Watchers explained with runnable code, framework context, and honest caveats.
React ViewTransition and Activity: Smooth UI Transitions the React Way
A practical guide to React's ViewTransition component and the Activity API: animated navigation, shared element transitions, and state-preserving hidden UI — with code.
MCP Architecture Explained: Hosts, Clients, Servers, and the 2026 Spec
How the Model Context Protocol actually works — hosts, clients, servers, transports, and primitives — plus what the 2026 spec changes for anyone building MCPs.
Building MCPs: A Practical Guide to Your First MCP Server in TypeScript
Building MCPs demystified: what an MCP server actually is, how to write one in TypeScript with the official SDK, wire it into Claude, test it, and avoid the classic stdio mistakes.
React's Activity Component: Hide UI Without Losing State
A practical guide to React 19.2's Activity component: hide tabs, modals and routes without losing state, and pre-render the screens users visit next.
JavaScript using Declarations: Deterministic Cleanup Without try/finally Pyramids
Explicit Resource Management brings using and await using to JavaScript. How Symbol.dispose, Symbol.asyncDispose and DisposableStack replace nested try/finally - with real code.
Migrating from Create React App to Vite: A Practical 2026 Guide
Create React App is dead and Vite is the default. A step-by-step migration guide: index.html, env vars, proxies, Jest to Vitest, and the gotchas nobody mentions.
Popover API + CSS Anchor Positioning: Tooltips and Dropdowns Without a Library
Build accessible tooltips and dropdown menus with the native Popover API and CSS anchor positioning - no Floating UI required - and wire them into React 19.
React Compiler in Practice: Adopting Automatic Memoization Without Surprises
React Compiler auto-memoizes your components so you can delete most useMemo/useCallback calls. How it works, how to adopt it incrementally, and where it will not save you.
The Temporal API Is Finally Here: A Practical Guide to JavaScript's New Dates
Temporal is now shipping in Chrome and Firefox. A hands-on tour of PlainDate, ZonedDateTime, Instant and Duration — with the recipes you actually need day to day.
JavaScript Iterator Helpers: Lazy .map, .filter and .take Pipelines Without Intermediate Arrays
Iterator helpers are now Baseline in every browser. A hands-on guide to .map, .filter, .take and .toArray — lazy pipelines with no intermediate arrays.
React 19 Form Actions: useActionState, useFormStatus and useOptimistic Explained
How React 19's Actions replace the useState/loading/error boilerplate in forms — a practical walkthrough of useActionState, useFormStatus and useOptimistic with real code.
Looking for my posts on Medium, dev.to and elsewhere? See external writing.