Welcome to my Personal Projects

Multiplayer Poker

February 2022

"Wanna play some game tonight?" my friend said. "How about Poker?" I replied, "Sounds good, let's use your poker web app!". One day, I decided to code the Poker game, and I did. Now my friends and I can play together over the network.

  • Support in-game chat
  • Support bots that can also chat and use "advance" Poker strategies (check-raise/bluff)
  • Dark mode + 3 additional themes (Christmas, Halloween, Tet)
  • Include how-to-play tutorial, UI aid for hand ranking probablity based on current cards
  • Sound effects when player wins like applause, when fold, bet and check, etc
  • When a player is out of cash, they need to "work" by clicking on a red button
  • Support CLI for client side that don't use GUI
NodeJS
NodeJS,
Socket.IO
Socket.IO,
ReactJS
ReactJS,
TailwindCSS
TailwindCSS

Effort: > 2 Months

(5.0)
Screenshot during the game, 1 player and 8 bots, current turn belongs to the player and player is selecting the bet size
Screenshot during the game, 1 player and 8 bots, current turn belongs to the player and player is selecting the bet size

Portfolio Website

November - December 2024

This is my personal portfolio website to show case my skills and projects that I did. Most probably, you're scrolling on it right now.

  • The 1st Profile page with my skills and experience like a CV
  • The 2nd Projects page with all my projects with representative pictures
  • The 3rd Others page just to symmectrically complete the navigation bar
NextJS
NextJS,
ReactJS
ReactJS,
TailwindCSS
TailwindCSS

Effort: ~1 Month

(4.0)
The Portfolio Website on home page showing my skills and experience
The Portfolio Website on home page showing my skills and experience

AI Note Taker

November 2024

This is a chat bot that knows about you, the links, commands, file paths you use, just like a developer's assistant. I made it using OpenAI API, it takes notes as you chat and later you can ask it back.

  • Multiple users with shared database
  • It writes notes about links, commands, tickets, knowledge, things that humans don't have to remember
  • It can create, delete, rename notes, etc, as you chat in real time
  • It can do whatever ChatGPT can do plus the note taking feature
OpenAI API
OpenAI API,
NodeJS
NodeJS,
Socket.IO
Socket.IO,
ReactJS
ReactJS,
MongoDB
MongoDB

Effort: ~1 Month

(4.0)
Questions about retrospective link, internal command posed to the AI Note Taker and its response
Questions about retrospective link, internal command posed to the AI Note Taker and its response

Maze Escaper

January 2019

Have you ever played a computer maze game where you can't see the whole map? This is it, you can only see the paths from where you're standing. Get the key and escape the maze, but be careful, there will be ghosts.

  • Random maze generation that is different everytime
  • Players can only see part of the maze from where they are standing
  • Two types of ghosts, normal and crazy-fast ghost
  • Sound effects when players die (screaming, crying) and others
  • Players can trap ghosts, revive other dead players
  • Support map viewer standing place to x-ray the entire map walls
  • Support object viewer standing place to x-ray ghosts and exit key
  • Support portals that players and ghosts can teleport to different location
JavaScript
JavaScript,
P5JS
P5JS

Effort: ~2 weeks

(4.0)
Screenshot of 4 players, after killing all ghosts, trying to escape the maze
Screenshot of 4 players, after killing all ghosts, trying to escape the maze

Uni Course Arrangement App

April - July 2021

Back when I study in university, it was a real challenge to find a way to fit all the courses I need for the coming semester. So I made this, Scheduler, a Java GUI application that helps students find a good combination of classes to register.

  • Classes can be created with day and time, categorized by subjects
  • A list of possible timetables is shown after clicking "Arrange" and any of them can be saved
  • A "Required" check box will force/unforce a subject to be included when arranging
  • An SQL tab to perform SQL queries from SQLite database for debug/troubleshoot purpose
Java
Java,
Java Swing
Java Swing,
SQLite
SQLite

Effort: ~ 1 Month

(4.0)
Screenshot of the Scheduler, above shows the main GUI for managing subjects, classes, time tables, and below shows the generated timetables
Screenshot of the Scheduler, above shows the main GUI for managing subjects, classes, time tables, and below shows the generated timetables

Student Progress System

January - July 2022

This is my university thesis, it is an event-driven architecture applying the "Mediator" design pattern aims to manage student learning progress (in stages) in universities, including multiple microservices and website for management

  • User interface for managing student progresses
  • User interface for managing microservices
  • A design for error handling mechanism
Kafka
Kafka,
Java
Java,
NodeJS
NodeJS,
ReactJS
ReactJS

Effort: > 2 months

(3.5)
A diagram that shows how all the Student System microservices working together with Kafka queues
A diagram that shows how all the Student System microservices working together with Kafka queues

JavaScript Compiler

April - July 2021

This is a Python program to compile and execute a raw JavaScript file, using Abstract Syntax Tree (ATS)

  • Extracts tokens or "keywords" from the provided JavaScript file
  • Builds an abstract syntax tree from the list of tokens
  • Keeps a symbol table in memory to store the variables
  • Provides a detail log of tokens, AST, symbol table and step-by-step code execution process
Python
Python

Effort: > 2 Months

(3.5)
Demo example of a JavaScript factorial function being parsed, with detail log of tokens, syntax tree, and execution
Demo example of a JavaScript factorial function being parsed, with detail log of tokens, syntax tree, and execution

Railway Management System

October - December 2021

This is the project from my university, I collaborated with my 2 other friends, it is used to manage the railway system, including the schedule and ticket booking. I did the front-end, map, trains, stations, schedules generation, implement route finding algorithm. My friends did the back-end, database, music, and admin page.

  • A page for users to search for the trains’ schedules, stations with a live map
  • A page for users to find train routes between two stations, and book them
  • A database to store the train schedule and passenger information
  • An admin page for passenger management or related database management
PHP
PHP,
MySQL
MySQL,
HTML
HTML,
CSS
CSS

Effort: ~3 Months

(3.5)
Screenshot of Railway Management System GUI where user are searching for the train schedule with the live map on the right
Screenshot of Railway Management System GUI where user are searching for the train schedule with the live map on the right

Command Runner (Slave)

November 2024

This is the command runner, I call it "Slave" as it will generate and run the commands to do the task that I request it to do. This is my first project that uses generative AI.

  • Generate and run commands on Linux machine
  • Ask users for clarification before generating and executing command
  • Can read command output and suggest alternative solution if the command failed
OpenAI API
OpenAI API,
NodeJS
NodeJS

Effort: < 1 day

(3.0)
Screenshot of "Slave", generating and executing command to clean docker volume on multiple remote hosts
Screenshot of "Slave", generating and executing command to clean docker volume on multiple remote hosts

Rubik's Cube OLL Probability

July 2022

I can solve a Rubiks cube less than 20 seconds, but one thing I still wonder is that, "How often will the case with checker board pattern appear?". So I made this program to calculate how likely we see OLL cases when solving a Rubik's cube using the CFOP method.

  • Simulate all 57 OLL cases by random turnings
  • Output image and probability of each case, group by orientations
Python
Python

Effort: < 1 day

(2.5)
The collection of OLL cases with their corresponding likelihood in percentage (%)
The collection of OLL cases with their corresponding likelihood in percentage (%)
I did more than this, but haven't had time to add them all. I can tell you if you want to know more.