Migrating mLab to MongoDB Atlas

Well, well, well. It’s that time again when I revisit some random thing I built years ago and brace myself for the extent of …

Broadcast Video Chat with Javascript and Vonage

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Stream Video Chat With Texting Using Vonage Video API

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Share Your Screen with Vonage Video API

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Stream a Video Chat With the Vonage Video API

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Add Texting Functionality to a Video Chat With Vonage Video API

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Create a Basic Video Chat With the Vonage Video API

This series of tutorials will explore the Vonage Video API (formerly TokBox OpenTok) and what you can build with it. The Video API …

Can you make a countdown timer in pure CSS?

I must first apologise for the somewhat rhetorical question as the title. About 3 minutes after I wrote it, my brain exclaimed: …

Basics of State and Props in React (2020 edition)

So I’ve finally decided to sit my butt down and learn React properly. I’ll talk a little bit about my opinion on React …

Is your browser a polyglot?

Over the course of last year, I’ve gone over to Wei‘s workplace numerous times to disturb her and her colleagues …

How to Build an On-Page Live Chat

The Nexmo Conversation API allows developers to build conversation features where communication can take place across multiple …

Figuring out CSS animation properties with a magic kittencorn

A little known fact about SingaporeCSS is that we actually have an unofficial mascot. I haven’t named it yet, because naming …

Building a check-in app with Nexmo's Verify API

Let’s say you are running a game like The Amazing Race, where there are multiple checkpoints that players have to physically …

Add Two-Factor Authentication to Node.js Web Apps

Two-factor authentication (2FA) gets its name from the fact that you require two things to verify your identity. Something you …

CSS variables for fun and no profit

I run a little monthly CSS meet-up called Talk.CSS, and the man who founded this endeavour with me one fine October morning back …

An exercise in progressive enhancement

I’ve had more opportunities to work on the server-side of things these past couple of months, specifically in Node.js, and …

Getting started with Nexmo's Number Insight APIs on Koa.js

Nexmo’s Number Insight API delivers real-time intelligence about the validity, reachability and roaming status of a phone …

Table design patterns on the web

Tables are a design pattern for displaying large amounts of data in rows and columns, making them efficient for doing comparative …

SMS in the browser: an adventure in WebSockets (and Nexmo Messages API)

A lot of the heavy lifting done by the Nexmo Messages API happens on the server-side. Messages are sent, received, processed and …

A beginner's guide to server-side web development with Node.js

For the bulk of my web career, I’ve worked exclusively on the client-side of things. Designing responsive layouts, creating …

Build an SMS bot on Glitch with Hapi.js and the Nexmo Messages API

The Nexmo Messages API allows you to utilise a single API to send messages via multiple channels, like SMS, MMS and several …

Refactoring an inherited codebase

So for 2018, I got myself some gainful employment doing full-time frontend development work. You know, the kind where you go to an …

Learning Cordova while rewriting an app

This is a “refactoring legacy code” post, and I suspect you’ll see more of these in the months to come because I’ve …

The one about an app

It’s finally happened. I did a proper Javascript thing. Now before you start to judge me, let me clarify that although …