Austin Hunter

Edukona

Start Date: August 19, 2024

End Date: Ongoing

Roles: Contributor, Software Developer

Edukona is an open source project focused on enabling rapid generation of course content in classroom settings. The project started at UNC Charlotte and is headed by Dr. Ayman Hajja.

API

The backend API is built with Python and Django. The Django Rest Framework is used to develop the API endpoints and DRF-Spectacular is used to automatically generate OpenAPI/Swagger documentation for the API.

The Django Channels package is used to handle WebSocket functionality for the real time components of the app, including quizzes and content generation status.

SimpleJWT is used to handle authentication and a custom endpoint is used to manage token revocation/blacklisting.

Frontend

The frontend is a React single page application. Currently, the application is largly written in JavaScript, but we are transitioning to TypeScript. We use MUI to streamline the development of components and reduce the need for large amounts of custom styling, as our primary goal is to focus on features and functionality.

We are currently working on implementing custom WebSocket management to make our real-time features (i.e., live quizzes) more robust.

CI/CD

Everything is hosted on AWS using Elastic Beanstalk. Preview environments for the frontend are provisioned via GitHub actions when frontend PRs are given a label. This allows us to preview UI changes while performing code reviews. Backend deployments are handled in the same way, with a new deployment being launched via GitHub actions each time a label is added to a backend PR.

We are currently planning to overhaul our CD pipeline to enable the creation of a pre-production environment.

AWS Lambda is used to complete a number of tasks, including transcript creation when new recordings are uploaded, generating quizzes, and creating transcript summaries.

LLM Integrations

We use OpenAI APIs for content generation, including transcripts, transcript summaries, and quizzes. All of our generation endpoints are serverless, this allows us to avoid doing expensive/time consuming tasks in our Django app.