Pardon the barebones look for now, this is mainly a server I have to host various hobbyist projects of mine. It's more for personal use than it is for public use.
I've recently been working on a game engine using C++ as the language and emscripten to compile it to a WebAssembly target, so it can be run in a browser.
I additionally put a focus on separating the core logic from API-specific logic -- for example, I use the very emscripten and html5-specific APIs for various kinds of input. If I ever choose to compile this to the much more common target of a Windows executable file, I will need to utilize some other input API, like XInput. In order to keep concerns separate, I have a generic Input interface that core game logic interacts with, and class implementations that use a specific API (e.g. EmscriptenKeyboard or XInputKeyboard) that adhere to the common Keyboard interface. The core game logic should have no conception of which input API it's using. Likewise, it should have no concept if the Graphics class is OpenGL or DirectX or Vulkan, for instance. The pattern is discussed in more detail here.