Alex Ng - ProjectEduTecX

7/2023 - 2/2024

/images/dark.svg/images/dark.svg/images/light.svg/images/dark.svg/images/dark.svg/images/light.svg/images/dark.svg/images/dark.svg/images/dark.svg/images/dark.svg/images/dark.svg

Paving the way to sustainable education

Project Image

Disclaimer

This project was a project assignment at Nanyang Polytechnic Singapore. Any and all monetary aspects of this project are demo-only, in other words, please do not use a real bank card.

About

This project aims to provide more environmental-friendly education materials. By bridging the gap between vendors, educators and students, we aim to make the learning process more sustainable and accessible.

What I did

I worked mainly on the back-end and JavaScript portions of this project, and was not heavily involved in the UI portions.

1. RESTful API

I built the infrastructure for handling API requests. This allows EduTecX to handle JSON and FormData payloads with the same code, and ensure that payloads conform to each endpoint-specific data structure.

See the API Parser source code here and it in action here.

2. Cloudinary CDN w/ Proxying

I built the infrastructure for uploading and serving media. This allows users to upload and retrieve textbooks and user profile images. In development, media is uploaded to a folder locally. See the CDN provider implementation here.

Served media is proxied our the edutecx.ngjx.org domain. See the proxy implementation here.

3. Email service

I integrated resend.com API into EduTecX which allows us to send 2FA verification links and receive feedback from our customers. See the source code here.

4. PostgreSQL/SQLite Database

Using flask_sqlalchemy ORM, I built all the SQL database schemas. We use PostgreSQL hosted on Supabase in production and SQLite locally in development. See the schemas here.

5. CI/CD Pipeline

I built the CI/CD pipeline.

Testing

Testing is done with pytest on python versions 3.11 and 3.x (currently 3.12). See the workflow here.

Deploying

We build a docker image and publish it to GitHub Packages here, then trigger a redeploy which uses the published docker image. See the workflow here.

License

This project is published under the GNU General Public License.