From the OpenReplay Blog
How to Replace Animated GIFs With MP4 Video
Replace animated GIFs with MP4 or WebM video using autoplay muted loop playsinline markup, plus ffmpeg conversion and LCP tips.
Handling Image Uploads on the Server
Node image upload security: validate file signatures in memory, enforce upload size limits, re-encode with sharp, and serve files safely.
OpenCode vs Claude Code: Which Should You Use
OpenCode vs Claude Code: compare pricing, model support, extensibility, and when Claude Code or OpenCode fits your coding workflow.
Shutting Down a Node Server Gracefully
Graceful Node shutdown for SIGTERM: handle readiness, drain requests with server.close, close resources in order, and avoid rollout 502s.
Is OpenTUI a Real Alternative to Ink?
OpenTUI vs Ink: compare terminal UI performance, runtime limits, built-in components, and migration tradeoffs for streaming apps and CLI tools.
Fixing Old Commits With git history
git history in Git 2.55 rewrites old commits with fixup, reword, or split, updates stacked branches, and shows safe dry-run previews.
Running SQLite in the Browser With OPFS
Use SQLite in the browser with OPFS: set up a Worker, choose opfs or opfs-sahpool, and avoid silent in-memory fallbacks.
Fixing Token Refresh Races With the Web Locks API
Fix token refresh races across tabs with the Web Locks API, navigator.locks.request, and a token re-check to prevent logout loops.
How to Fix Cannot GET Errors After Deploying an SPA
Fix Cannot GET and SPA 404 errors after deployment with server rewrites for Nginx, Apache, Netlify, Vercel, and S3 CloudFront.
Controlling Web Components Without JavaScript
Use custom invoker commands to control web components with HTML only. See how command and commandfor wire buttons to a custom element without JavaScript.
Stop Headlines Breaking in the Wrong Place
Fix broken headlines and long URLs with the right CSS and HTML: nbsp, wbr, overflow-wrap:anywhere, word-break:break-all, hyphens:auto, text-wrap.
Dropping Jest for Node's Built-In Test Runner
Node test runner vs Jest: stable features, watch mode, snapshots, fake timers, coverage, TypeScript support, and what you lose on migration.
Idempotency Explained and What It Means for Your API
Idempotency keys explained: prevent duplicate API requests, fix race conditions, and safely retry POSTs with atomic claims and transactions.
Build a Quiz App With a State Machine
Build a quiz app with XState v5 in React. Model four screens as a state machine, replace boolean flags, and guard the final result state.
Fixing 'window is not defined' in Server-Rendered Apps
Fix window is not defined errors in server-rendered apps with on-mount hooks, typeof window guards, and client-only imports for dependencies.
Prompt Injection Explained for Web Developers
Prompt injection for web developers: why there is no prompt-layer fix, and how to contain indirect attacks, untrusted output, and tool risk.
Writing a WordPress Plugin From Scratch
Build a WordPress plugin from scratch with hooks, activation and deactivation hooks, a settings page, sanitization, escaping, and secure options saving.
A First Look at Gea, a Compiler-First UI Framework
Gea is a compiler-first JavaScript UI framework using JSX, class stores, and direct DOM patches. The article examines its props model, size claims, and maturity.
Using Git Worktrees with AI Coding Agents
Use git worktrees with AI coding agents to isolate branches, avoid file conflicts, and manage ports, databases, and merges safely.
How to Fix the Invalid Hook Call Error in React
Fix React invalid hook call errors by checking the stack trace, Rules of Hooks, duplicate React copies, and react-dom version mismatches.
Git Worktrees Explained: When and Why to Use Them
Git worktrees explained: how they differ from stashes and second clones, when to use them, and the commands that manage them.
3 SSH Alternatives for Unstable Connections
Compare Mosh, Eternal Terminal, and autossh for unstable SSH connections, including UDP, TCP reconnection, server needs, and tmux pairing.
What's New in ECMAScript 2026
ES2026 adds seven JavaScript features: Array.fromAsync, Math.sumPrecise, Uint8Array base64 and hex methods, JSON.parse source access, and getOrInsert.
How to Count Tokens and Estimate LLM API Costs
Count LLM tokens accurately and estimate API costs with OpenAI, Claude, Gemini, and Llama tokenizers, plus context-window and billing tips.