/Renkbench

Javascript Amiga Workbench 1.3 look and feel clone

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

Renkbench

Renkbench CI codecov License: GPL v3

Screenshot

A JavaScript Amiga Workbench 1.3.3 look and feel clone with a Go and MongoDB backend. Live on renkbench.de.

Goal

For getting some JavaScript practice, in the year 2009 I created an Amiga Workbench clone and hosted it on Lachsfilet.de. Since not all look and feel features of the orginal Workbench were implemented, in December of 2018 I started to refactor the code and added some missing features.

In the meantime I put the whole page into a Docker container to simplify the deployment process.

Frontend features

Currently, the Workbench clone contains the following features:

  • Drag and drop functionality for icons and windows
  • Topaz style font
  • Original window behavior with resizing and scrolling
  • Window to the front and to the back buttons
  • Closing of windows
  • Directories displayed as drawers
  • Context menu in the main title bar triggered by mouse right click
  • Touch events for handheld usage
  • Customized keyboard input using Topaz font

To-do

  • Bugfixing
  • Content
  • Introduce applications
  • Further refactoring
  • Continue splitting frontend code into multiple files

Backend

In 2022, I switched the whole backend to Go and replaced the single JSON-file for the content with a MongoDB instance.

For content seeding (windows, menu, etc.) I wrote an own Go application called init.

Docker

The system is setup with Docker Compose, consisting of two containers:

  • The renkbench app (Go and JavaScript ES6)
  • The MongoDB instance

Putting the application into a Docker image enhanced the delivery process and brought the advantage to run it locally without setting up a MongoDB instance and the Node.js stuff for the JacaScript unit tests. For CI build and release I added the Azure DevOps pipelines as YAML code. I will replace them with GitHub Actions, which are also stored in the current repository.

JavaScript unit tests

I started with unit testing using Jasmine and jsdom, after I cut the createNode builder out of the monolith.