Overview

<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

Table of Contents

Getting Started

  1. Go to https://admin.thesoda.io/login invite the bot to your server
  2. Once done - ping @Sri Ujjwal Reddy Beereddy or @srizz on discord with these details
  1. Sri will let you know once setup is done for your org
  2. You can start using our services
  3. If any issues contact technology officers on soda discord or submit a ticket at issues here: ‣
  4. Use this calendar template :https://www.notion.so/asusoda/Calendar-Template-26247e6424688021948fd74d84ce8175?source=copy_link

Public Capabilities

Private Capabilities

Features not listed under Public Capabilities in the repository are not supported for public use. These include, but are not limited to:

Design

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

Architecture

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
    

Module Info

Calendar module design

Authentication

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

Tech Stack

<aside> 👁️‍🗨️

Here’s a recording of a deep dive if you like that kinda stuff

https://www.youtube.com/watch?v=e4Zplg-geSo

</aside>