Personal project 2023

Connect Four website

Vue
TypeScript
WebSocket
Minimalist take on the game with no ads, hot-seat and online multiplayer.

Features

Custom animations

I used a blend of physics based and timed animations. The system responds to every subtle cursor movement.

Custom animations

I used a blend of physics based and timed animations. The system responds to every subtle cursor movement.

Timed games

You can limit the turn timer in the settings.

Timed games

You can limit the turn timer in the settings.

Themes & localization

The game features three themes and is available in two languages.

Themes & localization

The game features three themes and is available in two languages.

Broad device support

The UI adapts to a wide variety of screen sizes. There is full support for mouse, touch and keyboard. No configuration, everything just works.

Broad device support

The UI adapts to a wide variety of screen sizes. There is full support for mouse, touch and keyboard. No configuration, everything just works.

Multiplayer

Start playing on one device and connect another at any time, without restarting the game.

Multiplayer

Start playing on one device and connect another at any time, without restarting the game.

Code highlights

Handling touch, mouse & keyboard

TypeScript
Animations use abstractions to respond to inputs from different sources.

Handling touch, mouse & keyboard

TypeScript
Animations use abstractions to respond to inputs from different sources.

Simple SVG builder

Vue
TypeScript
The hint next to the chip is cropped so they won't overlap. To do this, a CSS clip-path is updated each frame.

Simple SVG builder

Vue
TypeScript
The hint next to the chip is cropped so they won't overlap. To do this, a CSS clip-path is updated each frame.

Communication over WebSocket

TypeScript
WebSocket
Starting a multiplayer session creates a lobby. After the opponent joins the server takes over the game and processes each move.

Communication over WebSocket

TypeScript
WebSocket
Starting a multiplayer session creates a lobby. After the opponent joins the server takes over the game and processes each move.

Build-time SVG optimization

JavaScript
Custom SVG icons are optimized using svgo at build time and embedded into the stylesheet.

Build-time SVG optimization

JavaScript
Custom SVG icons are optimized using svgo at build time and embedded into the stylesheet.