Skip to main content
Being Idea Innovations
Blog

Engineering insights & strategy

Articles from our team on software engineering, product strategy, and building great teams.

44 articles9 topics
Axios Timeouts and Cancellation: What the Default Actually Does
Javascript

Axios Timeouts and Cancellation: What the Default Actually Does

How Axios timeouts really behave — why timeout does not cover connection time, cancelling with AbortController, retry with backoff, interceptors, and an honest comparison with fetch.

3 May 20235 min read
Regex Explained, and Why Email Validation Is Not a Regex Problem
Javascript

Regex Explained, and Why Email Validation Is Not a Regex Problem

A practical guide to regular expressions plus honest email validation — what a simple pattern catches, why RFC-compliant regexes are a trap, the ReDoS vulnerability lurking in clever patterns, and the only check that actually proves an address works.

26 April 20236 min read
What Is Lexical Scope in JavaScript? A Clear Explanation with Examples
Javascript

What Is Lexical Scope in JavaScript? A Clear Explanation with Examples

Lexical scope decides which variables your code can see, based on where you wrote it. Understand the scope chain, closures, the temporal dead zone, and why `this` is the one thing that does not follow these rules.

25 April 20236 min read
map, filter and reduce in JavaScript: A Practical Guide
Javascript

map, filter and reduce in JavaScript: A Practical Guide

How map, filter and reduce actually work, with real-world examples beyond doubling numbers — chaining, grouping with reduce, the empty-array crash, and when a plain for...of loop is the better choice.

24 April 20236 min read
var vs let vs const in JavaScript: Every Difference That Matters
Javascript

var vs let vs const in JavaScript: Every Difference That Matters

A complete comparison of var, let and const — scope, hoisting, the temporal dead zone, redeclaration, the global object, and why const does not mean immutable.

24 April 20236 min read
Modify the WooCommerce Product Query and Set Visibility on Import
WordPress

Modify the WooCommerce Product Query and Set Visibility on Import

Filter WooCommerce shop archives with pre_get_posts using the right conditional tags, and set product visibility the modern way — the product_visibility taxonomy replaced _visibility postmeta in WooCommerce 3.0.

5 December 20185 min read
Custom Checkbox and Radio Styling in Pure CSS (No Library Needed)
HTML

Custom Checkbox and Radio Styling in Pure CSS (No Library Needed)

Style checkboxes and radio buttons with modern CSS — accent-color for one-line theming, full custom control with appearance:none, indeterminate and focus states, and the accessibility mistakes that break keyboard users.

29 November 20185 min read
How to Check Which Checkboxes and Radio Buttons Are Selected in JavaScript
Javascript

How to Check Which Checkboxes and Radio Buttons Are Selected in JavaScript

Read the state of checkbox and radio groups without jQuery — counting selections, getting all values, select-all with indeterminate, mutually exclusive groups, and safely storing JSON in data attributes.

17 November 20185 min read
WooCommerce Product View Counter: A Version That Actually Scales
WordPress

WooCommerce Product View Counter: A Version That Actually Scales

Track and display product view counts in WooCommerce using hooks — with a counter that does not grow an unbounded string in postmeta, survives page caching, avoids storing IP addresses, and uses current WooCommerce APIs.

14 November 20186 min read
MySQL JOINs Explained: INNER, LEFT, RIGHT, CROSS and the Missing FULL OUTER
MySql

MySQL JOINs Explained: INNER, LEFT, RIGHT, CROSS and the Missing FULL OUTER

Every MySQL join type with worked examples — plus how to emulate FULL OUTER JOIN, which MySQL does not support, the WHERE clause that silently turns a LEFT JOIN into an INNER JOIN, and anti-joins for finding unmatched rows.

5 November 20187 min read
Install an SSL/TLS Certificate on Apache: Let's Encrypt and Manual .crt Files
Apache

Install an SSL/TLS Certificate on Apache: Let's Encrypt and Manual .crt Files

A practical guide to HTTPS on Apache in 2026 — free automated certificates with Let's Encrypt, installing a purchased .crt with its intermediate chain, the certificate order that causes most errors, and a self-signed cert for local development.

25 September 20186 min read
Facebook Social Plugins in 2026: What Still Works and What Needs an App
HTML

Facebook Social Plugins in 2026: What Still Works and What Needs an App

Add Facebook Share, Page and Comments plugins to a website today — which ones no longer need the SDK, why the Like button was retired, the App ID and domain setup that is now mandatory, and the privacy cost of embedding Facebook.

22 September 20185 min read
Submitting a Form to PHP with JavaScript (AngularJS Is End-of-Life)
PHP

Submitting a Form to PHP with JavaScript (AngularJS Is End-of-Life)

AngularJS reached end of life in December 2021 and no longer receives security patches. Here is the same comments-form pattern built with fetch and a JSON PHP API — plus what to do if you are maintaining an existing AngularJS app.

16 September 20185 min read
How to Create a Custom WordPress Widget (Classic and Block Editor)
WordPress

How to Create a Custom WordPress Widget (Classic and Block Editor)

Build a custom WordPress widget by extending WP_Widget — registering sidebars, escaping form fields correctly, caching output, and dealing with the block-based widget editor introduced in WordPress 5.8.

8 September 20186 min read
Google reCAPTCHA with PHP: v2, v3 and the Verification Step Everyone Skips
PHP

Google reCAPTCHA with PHP: v2, v3 and the Verification Step Everyone Skips

Implement reCAPTCHA properly in PHP — server-side token verification, handling v3 scores, why the checkbox alone protects nothing, plus privacy-friendly alternatives like Cloudflare Turnstile and hCaptcha.

5 September 20186 min read
Auto-Refresh a Div Every 10 Seconds in JavaScript (Without setInterval)
Javascript

Auto-Refresh a Div Every 10 Seconds in JavaScript (Without setInterval)

Poll a server and update part of a page using fetch and recursive setTimeout — avoiding the overlapping requests setInterval causes, pausing on hidden tabs, backing off on errors, and knowing when to use SSE instead.

2 September 20185 min read
Add a Live WooCommerce Cart Icon to Your Header (No Plugin)
WordPress

Add a Live WooCommerce Cart Icon to Your Header (No Plugin)

Put a cart icon with item count and total in your WordPress header using current WooCommerce APIs — including the AJAX fragment refresh that makes the count update without a page reload, and why the old global $woocommerce code is broken.

28 August 20185 min read
Install WAMP Server on Windows: Setup, Common Errors and Alternatives
Apache

Install WAMP Server on Windows: Setup, Common Errors and Alternatives

A complete WAMP installation guide for Windows — the Visual C++ redistributables almost everyone misses, fixing the orange icon and port 80 conflicts, creating your first project and database, plus when XAMPP, Laragon or WSL2 is the better choice.

3 August 20186 min read
Facebook Login with PHP and MySQL: A Secure 2026 Implementation
PHP

Facebook Login with PHP and MySQL: A Secure 2026 Implementation

Implement Login with Facebook the current way — the Authorization Code flow with a state parameter, server-side token exchange, storing users safely, and the account-linking rule that stops Facebook login becoming account takeover.

1 August 20186 min read
PHP Cookies: setcookie(), SameSite, and What Changed in 2026
PHP

PHP Cookies: setcookie(), SameSite, and What Changed in 2026

Set, read, update and delete cookies in PHP using the modern array syntax — with SameSite, Secure and HttpOnly explained, the __Host- prefix, signing values against tampering, and where third-party cookie deprecation leaves you.

16 July 20186 min read
Geolocation and Google Maps Directions: A Working 2026 Guide
Javascript

Geolocation and Google Maps Directions: A Working 2026 Guide

Get a user's location and draw a route with the Google Maps JavaScript API — using the modern importLibrary loader, the API key and billing Google now requires, HTTPS-only geolocation, and honest handling of permission denial.

15 July 20187 min read
CodeIgniter 4 Tutorial for Beginners (and Why CodeIgniter 3 Is Done)
CodeIgniter

CodeIgniter 4 Tutorial for Beginners (and Why CodeIgniter 3 Is Done)

Get started with CodeIgniter 4 — Composer install, the public/ webroot that fixed CI3's biggest security weakness, controllers, routes, models and views, plus a migration table for anyone still on CodeIgniter 3.

13 July 20185 min read
Build a Custom Website Responsiveness Checker Tool (2026 Guide)
HTML

Build a Custom Website Responsiveness Checker Tool (2026 Guide)

How to build your own responsive design testing tool with iframes and device presets — including the X-Frame-Options limitation nobody warns you about, and when browser DevTools is the better answer.

11 July 20187 min read
PHP Sessions Done Properly: Security, Locking and Correct Logout
PHP

PHP Sessions Done Properly: Security, Locking and Correct Logout

How PHP sessions really work — preventing session fixation and hijacking, the cookie settings that matter, why session_write_close() fixes slow concurrent requests, and the three-step logout most tutorials get wrong.

30 June 20186 min read
OAuth Social Login with Google, Facebook and X: A Secure Implementation Guide
PHP

OAuth Social Login with Google, Facebook and X: A Secure Implementation Guide

Implement social login correctly using the Authorization Code flow with PKCE — the state parameter that prevents CSRF, why the implicit flow is deprecated, popup vs redirect handling, and the account-linking mistake that lets attackers take over accounts.

27 June 20187 min read
.htaccess Rewrite and Redirect Rules: A Practical Reference
Apache

.htaccess Rewrite and Redirect Rules: A Practical Reference

The .htaccess rules you actually need — clean URLs, 301 redirects, HTTPS and www canonicalisation, custom error pages, caching and security headers — with the flag meanings and ordering gotchas that make rewrites work.

2 June 20186 min read
Multi-Language Sites in CodeIgniter 4: URL Locales, Not Session Switching
CodeIgniter

Multi-Language Sites in CodeIgniter 4: URL Locales, Not Session Switching

Build a multilingual CodeIgniter 4 site the way search engines can index — locale in the URL rather than the session, safe language switching without open redirects, hreflang tags, and translation files with placeholders and plurals.

2 June 20186 min read
Custom Social Share Buttons Without Third-Party Scripts (2026)
HTML

Custom Social Share Buttons Without Third-Party Scripts (2026)

Build fast, private social sharing buttons using plain links and the Web Share API — no Facebook SDK, no tracking, no jQuery. Includes current share URLs for every major platform and the Open Graph tags that control the preview.

30 May 20186 min read
Stripe Payment Integration in PHP: Payment Intents, SCA and Webhooks
PHP

Stripe Payment Integration in PHP: Payment Intents, SCA and Webhooks

Integrate Stripe with PHP the way it works today — Checkout Sessions and Payment Intents, why raw card fields put you in PCI SAQ D scope, handling Strong Customer Authentication, and confirming payments with webhooks rather than the redirect.

19 May 20185 min read
Export MySQL Data to CSV or Excel in PHP (The Correct Way)
MySql

Export MySQL Data to CSV or Excel in PHP (The Correct Way)

Stream MySQL query results to CSV or a real Excel file in PHP using fputcsv — with the UTF-8 BOM Excel needs, protection against CSV formula injection, and memory-safe exports for large tables.

12 May 20185 min read
Load More / Infinite Scroll with PHP and MySQL: Why OFFSET Is the Wrong Tool
MySql

Load More / Infinite Scroll with PHP and MySQL: Why OFFSET Is the Wrong Tool

Build a Load More button with the Fetch API and PHP — plus keyset pagination, which stays fast at page 5,000 where LIMIT/OFFSET collapses, and the duplicate-row bug OFFSET causes on live data.

11 May 20186 min read
How to Increase the Maximum File Upload Size in PHP (and Why Your Change Isn't Working)
PHP

How to Increase the Maximum File Upload Size in PHP (and Why Your Change Isn't Working)

Raise PHP's upload limit properly — which method works for mod_php, PHP-FPM and CGI, the five directives that all have to agree, the nginx setting nobody mentions, and why ini_set() can never change upload_max_filesize.

4 May 20186 min read
WooCommerce Shortcodes: Complete Reference (and What Blocks Replaced)
WordPress

WooCommerce Shortcodes: Complete Reference (and What Blocks Replaced)

Every WooCommerce shortcode that still works, the ones that were removed, and how the block-based Cart and Checkout changed things — with the full attribute list for the [products] shortcode.

3 May 20184 min read
PayPal Webhooks in PHP: The Modern Replacement for IPN
PHP

PayPal Webhooks in PHP: The Modern Replacement for IPN

IPN is deprecated. Here is how to receive and verify PayPal payment notifications with Webhooks in PHP — signature verification, idempotency, sandbox testing, and why you must never trust the browser redirect to confirm a payment.

1 May 20186 min read
How to Select and Preview an Image in JavaScript (FileReader vs Object URLs)
Javascript

How to Select and Preview an Image in JavaScript (FileReader vs Object URLs)

Preview images before upload using FileReader or the faster URL.createObjectURL — with multi-file previews, drag and drop, client-side resizing, and the memory leak most tutorials leave in.

25 April 20186 min read
Import Excel or CSV Data into MySQL with PHP (Safely, at Scale)
MySql

Import Excel or CSV Data into MySQL with PHP (Safely, at Scale)

A production-ready CSV and XLSX import for PHP — prepared statements, batched inserts, streaming for large files, upload handling that is not a security hole, and per-row error reporting instead of silent failures.

15 April 20187 min read
Build a Like / Dislike Voting System with PHP and MySQL
MySql

Build a Like / Dislike Voting System with PHP and MySQL

A YouTube-style rating system done properly — one atomic upsert instead of six queries, a unique constraint that makes double-voting impossible, optimistic UI with fetch, and why identifying voters by IP address does not work.

14 March 20186 min read
Generate a Valid RSS Feed with PHP (Escaping, GUIDs and Caching)
PHP

Generate a Valid RSS Feed with PHP (Escaping, GUIDs and Caching)

Build an RSS 2.0 feed in PHP that actually validates — correct XML escaping so one ampersand cannot break the whole document, stable GUIDs, the self-referencing Atom link validators require, and conditional GET support.

26 February 20185 min read
Browser Notifications in JavaScript: The Complete Guide (2026)
Javascript

Browser Notifications in JavaScript: The Complete Guide (2026)

How to send browser notifications from a web application using the Notification API and Push API — permission handling that does not get you blocked, service worker notifications, and the iOS caveat most guides miss.

23 February 20186 min read
Dependent Country / State / City Dropdowns with PHP and Fetch
MySql

Dependent Country / State / City Dropdowns with PHP and Fetch

Build cascading select menus backed by MySQL — returning JSON instead of HTML, cancelling stale requests so slow responses cannot overwrite fresh ones, and a schema that will not break at 127 countries.

11 February 20186 min read
Find a Visitor's Location from Their IP Address in PHP (Safely)
PHP

Find a Visitor's Location from Their IP Address in PHP (Safely)

IP geolocation in PHP done properly — why unserialize() on a remote response is a remote code execution risk, how to get the real client IP behind a proxy or CDN, plus caching, accuracy limits and GDPR.

23 January 20186 min read
Alphabetical A–Z Listings from MySQL in PHP (Without 27 Queries)
MySql

Alphabetical A–Z Listings from MySQL in PHP (Without 27 Queries)

Build an A–Z index page from MySQL with a single query instead of one per letter — plus collation choices that decide how accents and case sort, natural ordering for names with numbers, and the index that keeps it fast.

16 January 20185 min read
A Secure Registration and Login Form with PHP (No jQuery)
PHP

A Secure Registration and Login Form with PHP (No jQuery)

Build a registration and login form using native HTML validation and the Constraint Validation API, with a PHP backend that hashes passwords correctly, prevents user enumeration, and defends against CSRF and session fixation.

3 January 20186 min read

Want to talk tech?

Join 500+ engineering leaders who get our monthly insights on building great software.

No long-term contracts
Senior engineers only
US · AU · NZ timezone coverage
14-day trial on retainers