My Works

These are the projects that I have been involved in, both in my work and in my spare time.

Professional Projects

Ministry Of Finance

Website for Ministry of Finance of Singapore

This project is a revamped website for Ministry of Finance of Singapore. The website is built on Sitefinity CMS with various customisations that extend the basic out-of-the-box functions.

Open Innovation Network

Website for Open Innovation Network

This project is a website for Open Innovation Network, the collaboration set up by Enterprise Singapore and the Infocomm Media Development Authority (IMDA) to provide a single gateway to the open innovation ecosystem in Singapore. Similar to the above MOF project above, this website is built on Sitefinity CMS with various customisations that extend the basic out-of-the-box functions.

Document Controller

A Windows desktop application that manages company documents
Microsoft Access

This project is a document control system designed for Curtin Singapore to ensure existence of controlled processes and practices for the creation, review, modification, issuance, distribution, and accessibility of documents. It is an improvement project to replace the existing manual process.

The following table shows the improvement this project can bring to the existing manual document control system processes.

Old SystemThe New Document Controller
Users submit request forms in hard-copy to managers. Upon approval, managers enter the document information into Excel spreadsheet and duplicate the documents in respective folders in shared drive. Users submit request forms in soft-copy to managers. Upon approval, managers enter the document information into the Document Controller. The Document Controller will then copy the document to proper location in shared drive automatically, saving time and resources while minimising human error.

The project consists of both front and back ends in a multi-layer architecture. Due to the restriction of company policy, both project front and back ends were combined into one WPF application. The MVVM (model-view-view model) pattern is adopted.

Presentation layer, front-end C#, XAML They are the views in the MVVM pattern. Data binding is used to bind the displayed data with view models.
Business logic layer, front-endC#, AutoMapper They are the view models in the MVVM pattern. AutoMapper is used to convert domain model objects to view model objects that are suitable for display to users.
Service layer, front-endC# They are the models in the MVVM pattern. The service classes are used to interact with data from back ends
Data access layer, back-endC#, .NET Framework Data Provider for OLE DB The NET Framework Data Provider for OLE DB for Microsoft Access is used to access data from .mdb file.
Database layer, back-endMicrosoft Access database (.mdb) There is no plan to have a dedicated server, therefore the viable option is to use the Microsoft Access which is placed and shared in company shared drive. Migration to use SQL Server or PostgreSQL can be easy done as the layers are dependent on abstraction.

Personal Projects

Coffee Shop Talk

A web real-time text-based chat application

This project is created as a simple real-time chat application that allows users to sign up and chat with each other. The intention is to build a chat application that does not require friends adding - chat is public, like in a coffee shop.

Vue is used as the front-end component of the application because single page application is fast and more suitable for web applications. The back-end component is build with ASP.NET Core Web API, which uses SignalR to achieve real-time data transfering.

Auth0 is used as identity service provider for user authentication and authorisation.

Docker, combined with Github Actions, is used to achieve continuous integration and continuous deployment (CICD). With the process set up, upon receiving new commits on certain branch, Github builds the code, prepares docker image, pushes the docker image to Docker Hub, accesses to server through SSH, pulls the Docker image, and finally runs it. This allows my changes are seen immediately.

The application is hosted on my server using NGINX as reverse proxy.

Design Patterns

Showcasing design patterns in C#

Design patterns are typical solutions to common problems in software design. Each of these used as a blueprint or base that can be further customised to suit unique requirement.

This project consists of examples of the most popular design patterns and is written in C#. It is usually used as my reference point or source of inspiration.