Oops, image cannot be found :<
Hello!
My name is
Ernest Ng
and I am a
Platform Engineer
Scroll more to learn more
Oops, image could not be found... :<

01

about me

A Short Introduction

Hi! I'm Ernest, a Singaporean software developer passionate about building the backbone of tech companies. My expertise lies in infrastructure and platform engineering, crafting internal tools that streamline workflows and empower teams.

I thrive on efficiency and optimization, tackling challenges with elegant solutions that make a lasting impact. My journey began with backend development, fueled by a love for architecture and object modeling, and evolved into the world of infrastructure, where I find endless possibilities to innovate.

Collaboration is key, and I believe in the power of open source. My projects and contributions reside on GitHub, where I actively engage in discussions and learn from the vibrant community. This spirit extends beyond code, as I constantly seek inspiration from books and tinker with new technologies in my free time.

Beyond code, I remain an avid reader, always on the lookout for knowledge and inspiration. When the weekend rolls around, you'll find me tinkering with new technologies, building personal projects, or simply enjoying the satisfaction of learning something new.

Oops, image could not be found... :<
Oops, image could not be found... :<

02

languages

Machines and Me: the Bridge

Over my years of working with different organisations on various projects, I have gained experience with many languages. Below languages are those in which I am most confident, as I have spent a large amount of time coding in them, both professionally and personally.
Production Experience Understand Landscape and Toolchain Over 10,000 LLOC Side-Projects Write without stack overflow
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops.. Image cannot be found :< Oops.. Image cannot be found :<
Oops...
Oops...
Oops...
Oops...
Oops...
Oops, image could not be found... :<

03

skill

Tools of the Trade

Although I specialise mainly in backend and infrastructure development, I have also spent much time exploring frontend tooling and frameworks. Given below are the skillsets I have used in production projects or personal side projects. The little bar shows the experience I have in using the tool relative to the rest of the list.
Oops, image could not be found... :< Oops, image could not be found... :<
DotNet
Oops, image could not be found... :< Oops, image could not be found... :<
Rails
Oops, image could not be found... :< Oops, image could not be found... :<
node
Oops, image could not be found... :< Oops, image could not be found... :<
Express
Oops, image could not be found... :< Oops, image could not be found... :<
Swagger
Oops, image could not be found... :< Oops, image could not be found... :<
Mongo DB
Oops, image could not be found... :< Oops, image could not be found... :<
MySQL
Oops, image could not be found... :< Oops, image could not be found... :<
PostgreSQL
Oops, image could not be found... :< Oops, image could not be found... :<
Redis
Oops, image could not be found... :< Oops, image could not be found... :<
nginx
Oops, image could not be found... :< Oops, image could not be found... :<
Apache
Oops, image could not be found... :< Oops, image could not be found... :<
Rabbit MQ
Oops, image could not be found... :<

04

timeline

Past Work Experience

Gotrade
Lead Platform Engineer
My Gotrade tenure marked a transformative era of platform evolution. Through meticulous infrastructure optimization, I slashed monthly costs by 70%, translating to over USD 100,000 saved. To unlock unprecedented agility, I spearheaded the migration to Kubernetes on EKS, empowering the platform with cutting-edge capabilities. My focus then shifted to development efficiency, where I standardized workflows with nix-first environments, fostering a collaborative atmosphere with boosted productivity. These efforts yielded a 99.% uptime, thanks to the comprehensive Observability practices I implemented. Finally, I championed innovation by promoting IaC, containerization, and automated testing through engaging 'MasterClasses', igniting a culture of continuous improvement. My passion for platform excellence shone brightly throughout my Gotrade journey.
MAY 2022 - PRESENT
JAN 2021 - DEC 2021
ByteDance
Site Reliability Engineer
At ByteDance, my role was to ensure up-time in TikTok's live-streaming FCDN. I analyse, trace and debug alarms for FCDN failure when in the On-Call roster. During off-call seasons, I develop and optimize systems to help automate alarm handling and on-call efficiency.
Builderlytics
Project Lead - Solution Architect
Builderytics contracted me and my team to build a solution for managing construction sites. This is a large scale project that requires expertise from hardware to network with thousands of live-connections. I was hired to both find a team and lead the team from concept to production. At Builderlytics, I was in-charge of leading the team in all departments (front-end, back-end, operations, designs, testing and hardware), hiring and managing engineers, designing and architecture the infrastructure and stack for the solution.
AUG 2019 - DEC 2020
JUL 2018 - JUL 2019
Innosparks, ST Engineering
Software Developer
At Innosparks, I was hired as a backend engineer. My role was to design and implement an API server for the OneHealth project, a digital platform for post-acute care for Singapore’s Ministry of Health. The project aimed at solving the hospital overpopulation problem as a result of Singapore’s ageing population. I also worked temporarily on their other project, Airbitat, to help develop a mobile application and firmware for controlling an outdoor cooler.
ChatInfinite, Axle
Architect Consultant
ChatInfinite is a company that provides conversational AI chatbots for businesses in the finance, insurance, telecommunications and services sectors. I was hired as an architecture consultant to advise and mentor the development team on how to improve server and infrastructure design.Within six months, I pushed for a move from JavaScript to TypeScript for the main server application to better implement domain-driven design. I held internal workshops to educate the team on Agile SDLC, SOLID and TDD practices and thus raise the average skill level of the organisation. I worked with the tech lead to set up GitLab Kanban and GitLab CI for automating and formalising the workflow I taught in my internal workshops.
JAN 2018 - JUN 2019
APR 2016 - DEC 2017
DAB Technology
Full-Stack Developer
DAB Technology is an SME that provides solutions to industrial and factory challenges, such as vacuum and lifting devices. Hired to remodel its static information site into an e-commerce platform, I gathered a team to build the platform by using domain-driven design and an iterative approach to achieving what the DAB desired.
Sigma Value
Full-Stack Developer
Sigma Value is a professional trading technology solution that connects digital and emerging asset classes with the financial market. I joined as a web-based developer to help kick-start and prototype its product. As the sole developer of the company, I used a combination of Rails and Vue.js to build a platform for traders to discuss and share ideas.
APR 2015 - NOV 2015
FEB 2014 - MAR 2015
Singapore Beauty Fashion
Frontend Developer
As a freelancer, I worked for Singapore Beauty Fashion in creating two e-commerce platforms—Für 2 Für and AsiaBeau—as a frontend developer with React. Für 2 Für is a platform for pet lovers and pet caregivers to list and look for pet beauty services, whereas AsiaBeau is a platform for Singaporeans who seek to relax from their hectic, busy lives by looking for spa and massage services in nearby countries.
Oops, image could not be found... :<

05

portfolio

Professional Projects

Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
OneHealth is a digital platform for post-acute care for Singapore’s Ministry of Health, in an attempt to deal with the issue of Singapore’s aging population. I led the development team to implement an API server and deployed it at Azure. I further provisioned a CI/CD pipeline with branching policy and tested strategies to formalise and automate the deployment workflow for testers, designers and engineers, boosting the overall efficiency of the team. To facilitate error detection and analytics, I configured centralised logging and monitoring service within Azure.
View Screenshots
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Airbitat is an outdoor cooler that aims to provide an environment-friendly deep cooling solution for the notoriously hot weather of tropical Singapore. I worked with engineers and technicians to develop firmware and embedded systems for the cooler in order to allow control from the website via WiFi module and from the mobile app via Bluetooth. I only joined the project midway, but my contributions were not insignificant. I improved the original firmware by optimising the transport layer and refactoring to take a more object-oriented approach, allowing for better maintenance. I further revamped the Bluetooth connectivity by changing between the mobile app and the firmware through the introduction of a new routing protocol, and reduced the communication time between the mobile app and the firmware from 7 seconds to 2 seconds by implementing a cache layer.
View Screenshots
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
DAB Technology Platform is an e-commerce platform for factory and industrial solutions, such as vacuum and lifting devices. I formed and led a team to redesign their static site, and provided an e-commerce platform for users to browse and buy items via the website. We carefully worked with an iterative and incremental approach with DAB Technology to improve user experience. I also implemented many optimisations from the original WordPress site, such as implementing a CDN layer, conducting image quantisation and serving image based on the user agent, thereby improving the load time by 60% (3 seconds to 1.2 seconds).
View Screenshots
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Hovmand is the world’s largest supplier of lifters, and its products range from pallet trucks to powerful mechanical lifters. It is committed to providing integrated factory and industrial solutions to meet the challenges of proper workplace design, ergonomics, efficiency and cost reduction. As the developer under DAB Technology, I designed an e-commerce platform for the custom-built lifter product range. The website provides a series of questions and narrows down product parts based on the answers, reducing the company spending on hiring customer support for only those parties who are already committing.
View Screenshots
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
When I was working for HydraX, I was the sole developer in the FinTech firm. To help the company kick-start its business, I quickly developed its prototype website’s API by using Ruby on Rails, together with an SPA frontend in Vue.js. The prototype focuses on allowing users to share and discuss ideas on the current trend by doodling on graphs and sharing them as a blog post.
View Screenshots
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Oops, image could not be found... :<
Under Singapore Beauty Fashion, I built the frontend of their e-commerce platform, AsiaBeau, which allows beauty service providers all over South East Asia to list their beauty services. This platform allows customers to locate and connect with their preferred beauty service providers with minimal hassle. I built the client-facing site with the modern toolchain of React, WebPack, Babel and other frontend tools on the basis of the wireframe that the designers provided.
View Screenshots
Oops, image could not be found... :<

06

projects

Personal Side Projects

These are some project I did the little free time I have with my friend with the same passion. I take pride in delivering enterprise-grade applications - even if they are hobby projects.
CyanPrint Oops, image could not be found... :<
Oops, image could not be found... :<

CyanPrint’s main product is a CLI listed in NPM to scaffold projects of any kind quickly. It is a robust templating engine with the ability to generate different types of files and projects based on user input.

CyanPrint is not just a CLI; it is a full ecosystem that allows users to publish and share their templates and scaffolds on CyanPrint.dev with simple yet powerful commands. Templates can be categorised into groups, enabling users to curate their own set of templates for their use case.

Ruby on Rails is CyanPrint’s application server; it uses an ELK stack for monitoring. The front end uses Vue.js with TypeScript and is deployed on Netlify. This project is fully open sourced on GitLab!

Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Project Sophie Oops, image could not be found... :<
Oops, image could not be found... :<

Project Sophie is a browser-based visual novel and idle game which aims to ease the eventual boredom of an idle game with the immersive story and stunning artwork of a visual novel.

This story follows Princess Sophie as she tries to save her parents from a coup of her kingdom. The tale uses meta-mechanics, such as disconnection from the Internet and the changing of system time to time travel, to explore and discuss themes of existence and reality.

The game’s engine is currently being revamped; once the roadmap is done and development has started, it will be fully open sourced on GitLab.

Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Anime Capital Oops, image could not be found... :<
Oops, image could not be found... :<

I am a fan of Japanese anime culture. However, procuring or buying disks or services to view the seasonal series that are currently airing, much less subbed series, is difficult. As a little side project for my fellow anime friends and myself, I developed Anime Capital, which is a website that streams the newest anime scrapped from various sites.

Anime Capital uses a Ruby-based program to scrape the web for English-subbed anime and encode the subtitle into an MP4 file with multiple bitrates. After this, it splits the file into three-second binaries containing a .mpd manifest that is pushed to a .NET core server whilst the binaries are pushed to a bucket. The frontend website, running on Vue.js, would then query the API server for the links to these binaries, automatically allowing streaming and continuous updating of anime. This project is fully open sourced at GitLab.

Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
TeleCharts Oops, image could not be found... :<
Oops, image could not be found... :<

TeleCharts is an online application to analyze conversation within a time frame from Telegram.

TeleChart provides a beautiful dashboard to show the conversation between two people, including the breakdown of different media within the conversation such as stickers, photo, videos, audios. Statistics such as messages, words, emojis per day, per month are also provided in both text and graph formats.

TeleChart currently works on 16:9 to screens, and not on mobile phones due to the non-responsive design. This may or may not be worked on in the future.

TeleChart is mainly built with Vue.js in TypeScript using Chart.js, and is fully open-sourced at GitLab.

Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :< Oops, image could not be found... :<
Project Nephia Oops, image could not be found... :<
Oops, image could not be found... :<

Project Nephia is a Java modification to turn the popular sandbox game Minecraft into an MMORPG. It provides an interface both for programmers and non-programmers to create skill trees, skill effects, GUI, HUD, items and other MMORPG functions for the Minecraft game, with a client-agnostic design.

Oops, image could not be found... :< Oops, image could not be found... :<
Oops, image could not be found... :<

07

arsenal

Personal Helper Libraries

My friends and colleagues often ask me how I can create many side-projects and products in a short time despite working full-time. This speed is partly due to the use of CyanPrint, which allows me to template projects, create ready-to-deploy projects within minutes, but the primary source speed boost comes from my personal set of libraries.
KirinneeCore
This is a Node TypeScript library that provides typing and methods inspired by Ruby’s Enumerable and C#’s LINQ. This library aims to provide a robust collection of manipulation methods that can be chained by extending Array and Map prototypes. It leverages an IDE to provide correct suggestions and explanations, allowing for quick development, which also reduces common patterns into extensible functions, significantly reducing file size.
Source
Tune
This is a Node TypeScript sound library with easy and simple sound management. It uses Howler.js as a part of its core code.
Source
Animate
This is a cross-browser animation interface that includes filter animations with typing that can be leveraged by using IDEs. It enables simple animation to be used in a fluent API format, allowing for cleaner code and faster development time. It uses GSAP as a part of its core code.
Source
rImage
This is a browser-based solution for responsive images. By providing a configuration file, which can be used together with ImageDeployer, it can automatically load a different-sized image based on screen size and pixel density without the code being changed. It is written to improve the load time for image-heavy pages on smaller devices.
Source
ConsoleHelper
This is an object-oriented framework and helper method to build CLI using each command as an object within .NET Core. It is commonly used to create NuGet CLI.
Source
MinImage
This is a .NET Standard wrapper library around popular image compression methods. It is used in servers to compress images before storing them. It provides a fluent API and can leverage IDE to give information and usage.
Source
BucketClient
This is inspired by Rails’ Active Storage and provides a uniform interface to Blob SaaS in the .NET Core ecosystem. It supports Azure Blob Storage, Amazon S3 Bucket, Digital Ocean Spaces and GCP Cloud Storage with Blob CRUD, Bucket CRUD, CORS and permission functionality.
Source
ImageDeployer
This is a DevOps tool that deploys SPA or websites’ static assets to cloud Blob storage services. It allows resizing based on rImage’s resizing configuration, and optional image compression based on simple settings. It can be used to significantly reduce the payload of a static website as a part of an automated deployment pipeline.
Source
KirinHttp
This is a simple HTTP client that leverages Ruby 2.6.0’s http::net library for simple GET, POST, PUT, PATCH, HEAD and DELETE commands for endpoints.
Source
BinaryTransformer
This is a pipeline-based interface that allows multiple plugins to configure and transform binaries. Typical use cases are image resizing, compression and manipulation.
Source
bucket client
This is an alternative to the Rails’ ActiveStorage engine within both Bucket and Blob CRUD. On top of that, it allows for access policies and CORS policy with support for Azure Blob Storage, Amazon S3 Bucket, Digital Ocean Spaces and GCP Cloud Storage.
Source
narwhal
A Golang Library and CLI that allows saving and loading volumes as zip files.
Source
Oops, image could not be found... :<

08

books

Source of Knowledge

As an avid reader, I have read many programming and development books mainly about below four topics. Below is the list of books I have read. I highly recommend it to people who are as interested in the development world as I am!
Oops, image could not be found... :<

09

contact

Let's talk!

Interested in me or my tools? If you are looking for a backend engineer or want to know me more, please contact me, and I will be happy to talk with you.
You can grab a copy of my Résumé too!
Résumé
or add my portfolio to your Home Screen!
Install