Self Introduction

About Me

As a Programmer

Having 6 years of experience in IT industry, I am currently a full-stack Software Engineer with 2 years of experience fully in charge of Cloud Infrastructure.

I am also an active Vibe Coder for frontend applications (half of the code in this personal page is vibed).

For Frontend I specialize in React and React-Native for web and mobile applications.

For Backend I specialize in Spring Boot and Nestjs, with intensive use of ORM and SQL when only necessary. I enjoy solving business problems with object-oriented domain model, especially with:

  • The tactical methodology advocated in DDD;
  • The strategic design using Event Storming; and
  • The context-first approach to schema design.

For Cloud, I am proficient in designing cloud solution and maintaining them with infrastructure as code using Terraform.

Education

Experience (IT Related: 6.36 Years)

  • 15 Dec 2025 -
    Present

    1.5 Months
    company logo
    System Analyst
    Bank of China (Hong Kong) Limited
    IT Department - Data Application Development Division
  • 15 May 2023 -
    12 Dec 2025

    2 yrs 6.8 mos
    company logonew company logo
    Software Engineer
    Wonderbricks LimitedBillie Onsite
    Job Summary.
    • DevOps.
      • Fully in charge of all tasks in devops and cloud infrastructure in AWS
      • AWS resources are fully controlled by Terraform for easy replication of the entire infrastructure, which include:
        AWS Resources
      • Designed Cleanup Flow to completely remove all resources in a VPC and resolve the related chanllenges involving dependencies among resources
      • Created and hosted web-based infra-dashboard to display every detail deployed in our infrastructure
    • Frontend Development.
      • Developed a real-time application in both React and React-Native, for both web and mobile applications
      • Apply Redux-Toolkit and Redux-RTK-Query to build clean and performant react component
      • Worked on app submission to App Store and Google Play using EXPO
      • Refactor messy code generated by LovableUI vibed by our product manager, reduced a single component from 4000 lines of code into 1000 lines for maintainability.
    • Backend Development.
      • Maintained multiple micro-services in different usecases using two frameworks:
        • Nodejs. Nestjs, TypeORM (file generation, pdf is craeted by React-PDF)
        • Java, Kotlin. Spring Boot, JOOQ, JPA (all serious business logic, split by domain context)
      • Designed database schema and performed schema migration for PostgreSQL using Prisma

        Schema Design strictly follows Context-First approach from Domain Driven Design.

        Due to skillsets among the team, we still follow elementary controller-service-repository achitecture to avoid any misalignment

      • Created complex SQL for specific requirement such as dashboard with filtering, or SQL that cannot be auto-generated from ORM
      • Make comprehensive documentation on Stripe-API using Kotlin such as how to create subscription and how to schedule subscription changes with proration rate
      • Used Redis to implement distributive lock for handler of Stripe events because Stripe may send the same webhook event multiple times to ensure it gets delivered successfully
    Skills Needed
    Typescript / Frontend
    |
    ───
    React
    |
    ───
    Redux-Toolkit
    |
    ───
    RTK-Query
    |
    ───
    Zustand with React-Query
    |
    ───
    Tailwind
    |
    ───
    |
    ───
    React Native Reanimated
    |
    ───
    Expo-Cli (Development Build, ad-hoc Internal Distribution, etc)
    |
    ───
    Algolia (Search Engine)
    |
    ───
    Socket.io-client
    |
    ───
    Push Notification for iOS, Android via EXPO
    Typescript / Backend
    |
    ───
    Nestjs
    |
    ───
    Express
    |
    ───
    Mongoose
    |
    ───
    Socket.io
    |
    ───
    Algolia (Search Engine)
    |
    ───
    Googleapis + Nodemailer (for Sending Emails)
    |
    ───
    Prisma (db migration only)
    |
    ───
    Stripe (For Reading stripe content, e.g., Products, Subscription-end-date, metadata, etc)
    |
    ───
    Prisma-Kysely (as type-safe query builder, a counterpart of JOOQ in java; and go-jet in golang)
    |
    ───
    Expo Push Notification
    Kotlin / Backend
    |
    ───
    Stripe (For Subscription and webhook events handling)
    |
    ───
    Spring Boot
    |
    ───
    JOOQ as Query Builder and DAO auto-generator
    |
    ───
    JUnit5 For Integration Test and Unit Test
    |
    ───
    Mockk For Mocking Services
    |
    ───
    Algolia (Search Engine)
    Python / Backend
    |
    ───
    Flask
    |
    ───
    Boto3
    |
    ───
    Openpyxl
    Database
    |
    ───
    |
    ───
    Infrastructure as Code
    |
    ───
    Terraform
    Cloud (AWS)
    |
    ───
    Lambda Functions
    For File Generation (Python Application) and Google Authentication (Nodejs Application)
    |
    ───
    Lambda Functions
    Via docker image when unzipped file size exceeds 250Mb
    |
    ───
    Lambda Functions
    As a snap-started lamda function for Spring Boot Application
    |
    ───
    S3, Cloudfront and Route53 for hosting React Application
    |
    ───
    ECS Fargate
    |
    ───
    Load-Balancer, listeners and target groups
    |
    ───
    Security Groups
    |
    ───
    VPC, VPC Endpoints and Lambda inside VPC for Elastic Network Interface
    |
    ───
    RDS and RDS-proxy
    |
    ───
    IAM role for access right among resources (e.g., create policy to let lambda function access RDS-Proxy)
    |
    ───
    Delayed Queue by means of Dead-letter Queue, e.g., pin a message to the top and restore its position 1 week later
    |
    ───
    Direct Exchange with prefetchCount for rate limit
    CICD / Github Actions
    |
    ───
    CICD Workflow for Frontend Deployment
    |
    ───
    CICD Workflow for Backend Deployment via pushing image to ECR, updating ECS Task and updating ECS Service
    |
    ───
    CICD Workflow for Serverless Functions Deployment in Python (Flask) and in Nodejs (Express) and in Kotlin (Spring Boot)
    Docker
    |
    ───
    Containerization of Python, Node.js, Java and Kotlin application into images for deployment via ECS
    Documentation (I wrote alot)
    |
    ───
    Reason. Every company should have a wiki explaining all projects and common terminologies used among projects, I initiated one as the company lacked of it
    |
    ───
    Implemented CICD to encourage contributions from staffs
    |
    ───
    Google Authenticated via backend served in Lambda
    |
    ───
    Comprehensive documentation on cloud infrastructure before leaving the company
    Redis
    |
    ───
    Mainly used to implement distributive lock
    iOS Deployment to AppStore with EXPO
    |
    ───
    Create production build for publishing to app store
    |
    ───
    Manage and version the builds for uat, prod, implement force update accordinly
    |
    ───
    Handle App Submissions and and understand Rejections
    |
    ───
    Manage everything above with 2 stages (UAT, PROD) and perform OTA update in UAT when there is no changes in native module.
  • 15 Aug 2022 -
    April 2023

    8.4 Months
    company logo
    AI Engineer
    Eye Catching Limited
    Job Summary.
    • Study eye-tracing related algorithm.
    • Study and deploy machine leanring algorihtm in web-app and desktop-app.
    • Completely translate a BlazeFace model in python into the same model in libtorch of C++ for GUI application.
    • Implement methods to ensure weights in pytorch model can be used in libtorch model.
    • Study CMake and develop software to combine libtorch model and imgui application.
    Skills Needed
    Python
    |
    ───
    PyTorch
    Typescript
    |
    ───
    Tensorflow
    |
    ───
    Onnx
    C++
    |
    ───
    Libtorch
    |
    ───
    Imgui
    |
    ───
    CMake Ecosystem
  • Sep 2021 -
    July 2022

    10.9 Months
    company logo
    Senior Software Developer
    RaSpect Intelligence Inspection Limited
    Job Summary.
    • Object Detection Related.
      • Text Detection. Implemented text detection (EAST) to facilitate signboard defect classification.
      • Crack Detection. Help implement detection model for crack and spalling.
      • Rust Detection. Implemented two solutions: (i) Text removal -> classifcation pipeline; and (ii) direct object detection model using faster rcnn.
    • Image Generation/Inpainting.
      • DefectGAN. Implemented image-generation model following this paper that generate synthetic data on cracks and spallings for training defect detection models on facades.
      • Text Removal. Experimented with existing algorithms like various GAN or image-inpainting method in pytorch. Finally I follow this paper to obtain a text eraser with satisfactory performance.
        For an example of failed model, we refer the results to here.
    • Web or Hardware Related.
      • Maintain React Next project.
      • Data scrapping for house transactions records.
      • Automation on tracking latest rtk-data from official geodetic website and data-processing pipeline.
      • Work with a local grpc based service in Python to interact with a compiled binary (.exe), messed with multi-threading stuff.
    Skills Needed
    Python
    |
    ───
    Selenium
    |
    ───
    Boto3 (AWS SDK)
    |
    ───
    Mongoengine
    |
    ───
    gRPC
    |
    ───
    PyTorch
    Data Annotation Tool
    |
    ───
    CVAT
    |
    ───
    COCO-Annotator
    AI-General
    |
    ───
    Data Annotation
    |
    ───
    DataLoader with Various Data Augmentations
    |
    ───
    Model Training for Rust Detection
    |
    ───
    Model Training for Crack Detection
    AI-Models
    |
    ───
    GAN for Producing Synthetic Data
    |
    ───
    Faster RCNN from Scratch and its Modification
    |
    ───
    Single Stage Headless Face Detector into Rust Detector
    Javascript (Legacy Project)
    |
    ───
    Next
  • Aug 2020 -
    Mid-Aug 2021

    1 yr 0.4 mos
    company logo
    Software Engineer
    EAB Systems (Hong Kong) Limited
    Job Summary.
    • Build video conferencing frontend and backend application in React, Twilio and express.
    • Build CMS system that lets users create their own single page application.
    • Machine Learning Related. Build CSV Importer (together with an express layer and a Flask layer) that can parse a csv/excel file and perform:
      • Data Classification.
        • Sample Code: Link
        • Classify column based on existing data using LSTM model with two dense layers and finally a softmax.
      • Auto Date-reformatting.
        • Sample Code: Link
        • Based on machine learning model (transformer in NLP) that can translate all common form of date into YYYY-MM-DD format.

      Data Classification and Auto Date-refomatting are separately two models placed inside tensorflow-serving for deployment.
    Skills Needed
    Typescript
    |
    ───
    React
    |
    ───
    Redux
    |
    ───
    React-Native
    |
    ───
    Express
    |
    ───
    Mongoose
    |
    ───
    Sendgrid
    |
    ───
    Twilio
    Networking
    |
    ───
    socket.io
    Python
    |
    ───
    Pandas
    |
    ───
    Tensorflow v2
  • Sep 2019 -
    Aug 2020

    11.9 Months
    company logo
    Front-end Developer
    eLearningPro
    Job Summary.
    • Create HTML5 Coursewares
    • Maintain web pages and construct React frontend application
    • Created a python GUI project for text extraction from an image (a work necessary to translate old fresh game into html5 game).

      Steps for the App:

      1. Press Screenshot button in our app (image of preselected monitor will be recorded)
      2. Select the area for text extraction
      3. Text will be captured by calling google vision API

      Detail can be found here.

    Skills Needed
    Javascript
    |
    ───
    React
    Python
    |
    ───
    tkinter
    |
    ───
    pyinstaller
    Art
    |
    ───
    Adobe Premiere
    |
    ───
    Adobe Photoshop
    |
    ───
    Saola Animate (CSS Animation)
  • Jan 2018 - Dec 2018

    11 Months
    company logo
    2D Game Artist
    深圳疯点子科技有限公司
    Job Summary.
    Responsible for constructing 3d accessories, creating environment art and character design.
    Skills Needed
    Software
    |
    ───
    Unity
    |
    ───
    Autodesk 3ds Max
    |
    ───
    Adobe Photoshop
    Artistic Skills
    |
    ───
    2D Character Design
    |
    ───
    UI Assets Design
    |
    ───
    Low-poly 3D Model Construction
  • Oct 2015 to Dec 2017

    company logo
    Unemployed
    Home Guardian
    Skills Needed
    Thick Skin
    Self-Discipline
    Parental Support

    I was striving to become an artist within two years. Of this time I was taking online courses and drawing on a daily basis. I aimed at being able to draw a variety of game assets (not just character).

    My outcome based on this period can be seen here.
  • Mar 2015 - Oct 2015

    6.9 Months
    company logo
    Senior Research Assistant
    Department of Mathematics, Hong Kong Baptist University
    Study HJB equations arised in specific financial games.
  • Sep 2014 - Feb 2015

    6 Months
    company logo
    Research Assistant
    Department of Mathematics, Hong Kong University of Science and Technology
    Study the property of viscosity solution of HJB equations.
  • Sep 2012 - June 2014

    1 yr 9.8 mos
    Teaching Assistant
    Department of Mathematics, Hong Kong University of Science and Technology
    Fulfill teaching duty as required in obtaining studentship in the course of M.Phil study. Subjects include:
    • Calculus II
    • Linear Algebra
    • Mathematical Analysis
    • Real Analysis

Programming Skills

Source Control
  • Git
Deployment
  • Docker
  • Basic CI/CD Pipeline in Gitlab
  • Github Actions
Infra as Code
  • Terraform
Cloud (AWS)
  • Security Group
  • Target Group
  • Load Balancer
  • ECS Fargate
  • Route53
  • S3
  • CloudFront
  • Lambda Functions
  • API-Gateway
  • API-Gateway with Websocket API
  • RDS
  • RDS-Proxy
  • IAM Policies
  • SQS
Typescript
  • React
  • React-Native
  • Redux
  • Redux-Saga
  • Next.js
  • Electron.js
  • Electron with Next.js
  • Node.js
  • Express.js
  • Socket.io
  • Twilio.js
  • Knex.js
  • Mongoose.js
  • Prisma.js
  • Prisma-Kysely.js
Kotlin
  • Spring Boot
  • Coroutines
  • SSE
  • Domain Driven Design
  • JOOQ
Java
  • Spring Boot
  • Hibernate
  • iBatis
C#
  • Windows Presentation Foundation
C++
  • CMake Ecosystem
  • Libtorch
  • OpenCV
  • ImGui for Desktop App
Golang
  • Gin
  • Goose
  • Sqlc
  • Azure-sdk for Voice
  • Go-Jet
Python
  • Tensorflow v2
  • PyTorch
  • Pandas
  • Flask
  • ONNX
  • Openpyxl
  • Boto3
Rust
Data Streaming
  • Debezium (Kafka)
Message Broker
  • RabbitMQ
Database Query & Management
  • PostgreSQL
  • MongoDB
Deep-Learning
  • Embed custom trained pytorch model in ONNX format into frontend
  • Implementation from scratch and training experience with CNN such as
    • Object Detection
    • Text Detection with Rotation
    • Image Classification
    • Image Generation and Image In-painting
  • Implementation and training experience with LSTM Model and Transformer to do:
    • Summarization on a column of data
    • Translation of random date format into standard YYYY-MM-DD one

Art Skills

Tools
  • Photoshop CC
  • 3DS Max
Thingies I Draw
  • 2D Character
  • 2D Environment