<aside>
In support of its goal to positively impact the broader computer science / tech community at ASU, SoDA offers tooling, Discord bots, and automations for other organizations to use, free of charge, as part of the SoDA Platform.
</aside>
The SoDA Platform is free and open-source software and can be found on GitHub at https://github.com/asusoda/soda-platform
Features not listed under Public Capabilities in the repository are not supported for public use. These include, but are not limited to:
Maintaining software is hard, things break and we would need every bit of mental effort we can save. The fewer components there are in the system, the fewer issues there will be. Debugging will also be less mentally taxing. [source, emphasis ours]
We chose to implement the SoDA Platform as a simple monolith instead of a set of microservices, because we want to keep things stupid simple for development, maintenance, and deployment.
Capabilities for the platform are separated into modules [what is modularity?] to encapsulate logic & functionality. Modules are a first-class feature of Flask, so components and services can easily be swapped in/out without affecting each other. Read up on
Again, stupid simple. We have a static UI that hits the REST server with state persisted in a single MySQL
file.
architecture-beta
group api(cloud)[TANAY API]
service db(database)[MySQL DB] in api
service vps(server)[REST server] in api
service ui(internet)[Admin UI] in api
vps:R --> L:db
ui:R --> L:vps
We use Discord OAuth [docs] to verify that the user has the server role granting Platform Admin access. If you’re new and don’t know how OAuth works, here’s a fantastic explainer with illustrations: https://www.ducktyped.org/p/an-illustrated-guide-to-oauth
React
, React Router
, Tailwind
, shadcn
Next.js
because of potential vendor lock-in to vercelPython
, Flask
, uv
package managerHostinger
for VPS hosting & backupsPorkbun
for domain nameCloudflare
for DNS management, global CDN, barebones analyticsPodman
for containerization & making deployment stupid simple<aside> 👁️🗨️
Here’s a recording of a deep dive if you like that kinda stuff
https://www.youtube.com/watch?v=e4Zplg-geSo
</aside>