Codefarem aims to be an online platform that enables teachers to teach their students how to code in a hands-on environment.
Codefarem employs a microservices architecture. Here is a high level sequence diagram of how it works:
sequenceDiagram
actor Client;
participant Orchestrator;
participant Compiler;
participant Executor;
Client ->> Orchestrator: req. to execute code
note over Orchestrator: select compiler according to language
Orchestrator ->> Compiler: request compilation
note over Compiler: compile code
Compiler ->> Orchestrator: return compiled code (or error)
Orchestrator -->> Client: error if compilation failed
Orchestrator ->> Executor: request execution
note over Executor: execute compiled code
Executor ->> Orchestrator: return execution result (or error)
Orchestrator ->> Client: return execution result
Orchestrator -->> Client: return execution error
I started this project to teach myself the newest technologies of the web, and as such this project uses bleeding edge technologies to achieve its goals. Here is a non exhaustive list of the technologies used:
- Edgedb: Database for backend
- Hanko: Authentication provider
- Remix: Framework used for the main website
- Vite: Framework used for the admin website
- Mantine: Frontend framework in admin website
- Tinygo: Compiling
Go
towasm
- Rust Wasi: Compiling
Rust
towasm
- Zig: Compiling
Zig
,C
andCpp
towasm
- Python-Wasi: Executing
Python
in awasm
environment - Wasmtime: Executing the compiled
wasm
output - Docker: Containerization of the microservices