Bordered avatar

Bryan Kok

Software engineer passionate about modern microservice-oriented backend technologies with a thorough understanding of the nuances of frontend and mobile.

Seeking opportunities to implement distributed, scalable, and maintainable systems.

Professional Work

eRecruitment

Digitalization of the entire recruitment process for various insurance distribution channels

Java
 
Kotlin
 
Spring Boot
 
Spring Security
 
Hibernate
 
QueryDSL
 
MSSQL
 
MapStruct
 
Python
 
Swagger
 
OpenAPI
 
Wildfly
 
React Native
 
Redux
 
Angular
 
OAuth2
 
CI/CD
 
Docker
 
200+ MAU
 

Won the RFP process against 4 other shortlisted vendors by developing and demonstrating a functional, installable, proof of concept app to key stakeholders.

Architected and implemented the RESTful backend with Spring Boot, MSSQL, Flyway, MapStruct and Hibernate for the mobile app, web dashboard, and sessionless signup form.

Added 300+ intranet users and granted access to other teams by extending eRecruitment to act as an OAuth2 resource server with Keycloak; wrote extensions exposing endpoints to query for users by custom attributes.

Refactored SQL queries using QueryDSL instead of JPQL or native queries to improve maintainability and reduced load by caching intensive queries in Redis via Spring's CacheManager interface.

Singlehandedly developed the entire mobile app for recruiters in the field; used d3-shape and react-native-svg for the interactive calculator and charts, Redux and Realm for offline-capable forms with complex, cross-section validation requirements.

Set up a GitLab CI/CD pipeline that built and deployed Docker images into production using docker-compose and Traefik.

Achieved complete paperless recruiting in 80%+ of new cases, with 200+ MAU across 9 distribution channels.

PPUKM Drug Formulary

A comprehensive drug reference app developed with the needs of The Pharmacy Department of the National University Hospital of Malaysia's practicing staff in mind

Python
 
React Native
 
Redux
 
Laravel
 
MySQL
 
Angular
 
5.5K MAU
 

Parsed and cleaned data of 1000s of drugs from assorted Word and Excel documents into MySQL with Python.

Reduced the average response time from seconds to sub 500ms by hashing each Drug entity upon modification and implementing and optimizing a delta-sync endpoint for the mobile app.

Singlehandedly developed the entire mobile app for practicing staff with Redux and Realm with offline capabilities; integrated Sentry for exception tracing and performance monitoring. Increased ratings to 4.7 on the App Store and a perfect 5 on the Play Store after implementing and optimizing a phonebook-style alphabetical scroll view with a SectionList.

40% retention rate since launch (5.5K MAU / 14K first-time downloads).

KKPGEN

Maintaining a legacy bancassurance portal

Java
 
Spring MVC
 
Spring Security
 
MapStruct
 
OpenAPI
 
AWS S3
 
JSP
 
Jasper Reports
 

Added 10 new insurance products, 7 of which were targeted at high net worth individuals, to an insurance CRM portal. Refactored legacy code extensively, extracting crucial functionality such as premium calculation into a microservice where possible while avoiding regressions, and modifying JSP and JasperReports templates for sales illustrations (SIs).

Demonstrated the effiacy of documentation-driven API design by writing OpenAPI specifications, and then using swagger-codegen to generate native language-specific clients seamlessly, such as during the maven build process, and server stubs for other teams. This greatly reduced the maintenance effort of CRM-to-bank API calls made during quotation creation or update which had complex (100+ fields), albeit reusable subschemas.

Migrated several steps in the sales process of newer products to an external platform; the external platform would be issued a JWT upon POSTing the results back to the CRM portal with the transaction ID as a claim for future queries. Generated SIs, among other assets, were stored in S3 and served directly to the end user with presigned links.

OneTokio

Mobile app for insurance policyholders

React Native
 
Redux
 
ASP.NET 4
 
MSSQL
 
20K+ Downloads
 

Rewrote OneTokio, originally written in Cordova, from scratch in React Native with Redux. This allowed the design language to be easily kept consistent throughout and state to be managed more effectively across components, resulting in a 3x increase in development velocity.

Increased user retention by more than 2x by implementing push notifications with Firebase, an in-app inbox, geolocation of surrounding panel hospitals, and the beginnings of a loyalty program amongst other features, culminating in a press release in late 2019.

TokioAcademy

Mobile app for insurance agents' continuing professional development

React Native
 
Redux
 
ASP.NET 4
 
Entity Framework
 
MSSQL
 

Built upon the success of OneTokio and created an app for the needs of the entire insurance agency force which included attendance tracking at training events, dissemination of learning material, and records of logged CPD hours.

Live Chat Platform

Proof of concept

Minimum viable prototype of a customer support live chat platform with an embeddable widget

Spring Boot
 
Spring Integration
 
AMQP
 
RabbitMQ
 
WebSocket
 
STOMP
 
React
 
Redux
 
i18n
 

The client requested a self-hosted, multitenant platform with automatic agent assignment, logging and replay of chat history, and i18n support.

Designed an architecture composed of a "gateway" service communicating with the frontend over WebSocket, a service binding incoming new conversations to a TopicExchange, a service assigning agents to said conversations, and a service logging and replaying conversation history, as part of a team.

Used Spring Cloud Config to externalize the configuration and RabbitMQ with the STOMP plugin enabled was used as the message broker in conjunction with spring-boot-starter-websocket. Used Spring Integration to implement event-driven messaging, including patterns such as request-reply with MessagingGateway and publish/subscribe.

spring-cloud-bus, also backed by AMQP / RabbitMQ, was used for inter-service communication, which allowed the abstractions provided by Spring Events to be used seamlessly.

Developed the frontend in React with Redux with FormatJS for i18n, using Direflow to package the embeddable widget as a WebComponent.

The client took over further development after the MVP was demonstrated.

AR Overlay

Proof of concept

A simple AR experience for a retail voucher platform

Swift 4
 

The client requested help with the iOS version of their app, which had iOS 9.0 as the deployment target. Due to this, the budget, timeframe, and limited roadmap of the project, a minimum viable solution was insisted upon, precluding true world tracking implementations with ARKit or ARCore.

Created a convincing experience by calculating the bounds of the camera's viewport and projecting animated sprites onto the camera viewport using the roll and yaw values returned by the device's gyroscope, using quaternions instead of Euler angles to avoid gimbal lock.

Personal Work

DeployApp

A beta app distribution platform allowing users to attach their own cloud storage

Spring Boot
 
JUnit 5
 
Kubernetes
 
Microservices
 
Docker
 
CI/CD
 
GraalVM
 
OAuth2
 
Redis
 
AMQP
 
RabbitMQ
 
PostgreSQL
 
AWS S3
 
React
 

Created this utility to solve real-world hurdles encountered during enterprise app development and beta testing, such as data handling requirements and faster, more reliable installs in a corporate network environment.

Wrote and unit tested Java wrappers for existing app binary parsing libraries in other languages such as Ruby, leveraging the GraalVM polyglot runtime.

Designed a horizontally scalable microservice architecture to parallelize CPU-intensive operations with worker microservices, using event-driven inter-service communication over AMQP / RabbitMQ.

Profiled JVM memory usage with VisualVM, jcmd, and native memory tracking to fix leaks especially in resource-constrained environments like 1 replica each on a single-node K3s cluster.

Implemented common authentication patterns such as social login with multiple OAuth2 providers, email/password login, account merging, and session data for anonymous users to be persisted upon signup using Spring Security.

Orchestrated unit and integration tests against external services using docker-compose, built images and deployed to Kubernetes in a GitHub Actions CI/CD pipeline.

Distributed 100+ app builds to testers in a couple different organizations so far.

Radically

A component-based Chinese character search engine

React
 
PWA
 
Jest
 
React Testing Library
 
Python
 
TypeScript
 
Node.js
 
CI/CD
 
Unicode
 

Created ETL pipelines that parsed, transformed, and cleaned Unicode Consortium data of all 93000+ encoded CJK characters in the basic multilingual plane and blocks A to G.

Devised and unit tested recursive algorithms that decompose characters into their components like a tree and group semantically or structurally-related characters together to aid learners and users looking for obscure characters alike.

Used Workbox to manage the lifecycle of the service worker caching the served JSON data, enabling offline installation as a Progressive Web App.

Used the Adobe AFDKO font creation toolkit to create an OpenType font with 100% CJK Unicode codepoint coverage as a bonus.

Publications

Online Community-based Design of Free and Open Source Software for Voice Training: Proceedings of the ACM on Human-Computer Interaction, Vol. 4, CSCW '20

Open Source

Firefox DevTools

Contributed various bugfixes and features to Mozilla Firefox's Developer Tools

React
 
Redux
 

Nitroless

Proof of concept

An input method for Android that allows you to add and search for custom emotes

Kotlin
 
Room
 
LiveData