This Django tutoring app was developed as a tutor/student portal for Iridium Tutoring, a nationwide 501(c)(3) nonprofit tutoring organization serving K-12 students with free, personalized educational support in all subjects. Our mission is to provide high-quality, accessible, and equitable tutoring to students in need, regardless of their background or financial status. We are committed to helping students reach their full potential and achieve academic success.
This dashboard is a B2C tutor + student web application that streamlines the tutoring session registration process and tutor sign-up process and replaces Excel/Google-Sheets/Forms platforms. Utilizes Model-View-Template (MVT) architecture for models Tutors
, Students
, Tutoring-Sessions
, and Recurring-Sessions
; views studentView
, tutorView
, index
, etc
; and Bootstrapped configurable templates for each view. Developed by the 2024 Iridium Tutoring's founder, Charles Tang.
- Frontend: HTML, CSS (Bootstrap 5.0), JavaScript, FullCalendar
- Backend: Django, MySQL, Web Mail (SMTP), Let's Encrypt
- Deployment: CPanel, Apache, Python 3.11.5, WSGI
Italicized features are prioritized for implementation. These are ordered in terms of priority.
- (MVP #1) Admin dashboard (manage tutor, student, and session registrations)
- (MVP #2) Student session registration (sign up for tutoring sessions, email confirmation, automatic account generation)
- (MVP #3) Student dashboard (custom auth login/logout, see past/upcoming sessions/recurrings, register session, see session details, see tutor details, cancel session)
- (MVP #4) Tutor session dashboard (custom auth login/logout, see available sessions, see historical sessions, sign up for sessions, past taken sessions, add/manage recurring sessions utility, calendar view, profile dashboard)
- (MVP #5) Office hours (landing page, meeting link, tutor availability)
- Deployed onto CPanel, configured DNS for a subdomain (portal.iridiumtutoring.org), 90-day SSL from Let's Encrypt Provider (HTTPS)
- CI/CD pipeline for semi-automatic deployment from GitHub to CPanel, pre-prod server for staging
Fork this repository and create a new branch for your feature. Once you are done, create a pull request to merge your branch into the main branch.
We assume you have the latest version of Python installed.
- Clone the repository
git clone https://github.com/charlestang06/iridisite.git
- Install the required packages
pip install django
- Make migrations
python manage.py makemigrations
python manage.py migrate
- Run the server.
python manage.py runserver
- Run the app on your local machine and ensure it works. (see previous steps)
- Connect to CPanel and create a new MySQL database. Create a new user and assign the user to the database. Ensure the user has all privileges.
- Under CPanel
Domains
tool, create a new subdomain (i.e. portal.iridiumtutoring.org) on your CPanel. Link it to the directory public_html/portal, or the directory of your choice. - Ensure
settings.py
is configured with MySQL database settings,DEBUG = False
, andALLOWED_HOSTS = ['*']
. - Run
python manage.py collectstatic
to collect all static files into the static directory. - Zip the entire project folder and upload it to the root directory of your CPanel. Extract the contents into the subdomain directory.
- Under
Create Python App
tool, create a new Python application. Select the subdomain you created in step 2. Make sure you select the highest Python version (3.11.5). - Add environment variables for all email settings, database settings, and Django secret key.
- With an FTP client, configure the
passenger_wsgi.py
file with the following contents.
# passenger_wsgi.py
import os
import sys
from iridisite.wsgi import application
- From the dashboard, install all dependencies through the
pip install
tool with therequirements.txt
file. If you have any issues, you can install the packages manually through thepython
tool. - In the
python
tool, runmanage.py makemigrations
andmanage.py migrate
to create the database tables. - Restart the Python application and visit the subdomain to see if it works.