Project Structure¶
High-level overview about different client and server components.
At its core the project consists of two codebases:
- A Ruby-server that uses Rails (found under
server). - A single page browser application that uses Typescript and Angular (found under
client). This source code can be compiled in three different variants:browser,universalandide-service.
But looking into it with more detail, the participating systems are responsible for the following tasks:
- IDE Application (Browser)
- The “typical” browser application. This is the code that handles the actual user interaction like drag & drop events.
- IDE Application (Universal)
- This variant of the application is basically a
node.js-compatible version of the browser application which can be run on the server. This is used to speed up initial page loading and to be at least a little bit SEO-friendly. And apart from that it allows the non-IDE pages to be usable without JavaScript enabled. - IDE Service
- A commandline application that reads
JSON-messages fromstdinand outputs matchingJSON-responses. This service ensures that server and client can run the exact same validation and compile operations without the need for any network roundtrips. - Webserver
- Although it is possible to run a server instance without dedicated webserver, this is strongly discouraged. The webserver should serve static files (like the compiled client), and route requests to the “Universal” application and the API-Server.
- Rails API-Server
- This server acts as the storage backend: Clients store and retrieve the data of their projects via a
REST-endpoints. The actual data is stored in the database and the filesystem and separated into three different environments:production,developmentandtest, no data is shared between these environments. Additionally the server carries out operations that can’t be done on the client, mainly database operations. - PostgreSQL Server
- The database stores most of the project data, basically everything besides from file assets like images and
.sqlite-databases. - Project Data Folders
- Actual files, like images and
.sqlite-databases are stored in the filesystem.