The Pronunciation Practice App is a web app that helps users practice their pronunciation of Arabic using the Tashkeel (diacritics) and the Arabic alphabet found in the Quran. This app was built for use by the IlmHub organization with the aim of helping young children (k-8) learn and practice their pronunciation of the Quran. The app is built using the Django framework and is hosted on Heroku. The app is currently in development.
Screencast
Live Link
Documentation
Installation
Usage
Testing
The screencast for the project can found here or https://drive.google.com/file/d/18GeyYQhB8t7xB7wuZLI0ynEAnfQtKaaV/view?usp=sharing
The live link to the app can be found here. Note that the app is currently in development and is not yet ready for use. This live link contains the latest release of the app.
The documentation for the app can be found here.
To view the API documentation:
- follow the installation instructions below
- while the backend Django app is running, click here to view the Swagger documentation for the API
- Clone the repository to your local machine.
- within the project directory, run
pip install -r requirements.txtto install the required packages for the backend of the app - navigate to the
\backend\IlmHubdirectory and create a file called.envand add the following environment variables:SECRET_KEY=YOUR_SECRET_KEY DB_NAME=ilmhub_db DB_USER=ilmhub DB_PASSWORD=PASSWORD DB_HOST=localhost DB_PORT=5432 DEBUG=TRUE- if you require a secret key, you can generate one using Djecrety
- using PostgreSQL, create a local server called
ilmhuband a database calledilmhub_dbwithin the server- for info on how to install PostgreSQL on your local machine, click here
- in your PostGreSQL server, create a user called
ilmhubwith the samePASSWORDas in the .env file and grant all privileges to theilmhub_dbdatabase- for info on how to create a local server and database in PostgreSQL, click here
- navigate to the
backenddirectory and runpython manage.py migrateto migrate the database to your PostgreSQL server - navigate to the
frontenddirectory and runnpm installto install the required packages for the frontend of the app - run
npm startto start the frontend of the app onlocalhost:3000 - navigate to the
backenddirectory and runpython manage.py runserverto start the backend of the app onlocalhost:8000 - click here or navigate to
localhost:3000in your browser to view the frontend of the application - click here or navigate to
localhost:8000/admin/in your browser to view the Django admin panel
- To login, or if you forget your user credentials, contact your teacher for your login username and password
- Once logged in, select any chapter box from the home page coloured yellow to view lessons that have been
assignedto you that are not yet complete- Listen to the audio for a lesson by pressing the 'play' button to the left of the lesson text, then repeat the pronunciation back to yourself
- Listening to a lesson once will decrease the
repetitionscounter by 1; once it reaches 0, the lesson will be marked ascompletedand your teacher will be notified that you are ready to be tested on the pronunciation at your next in-person meeting Completedlessons can still be practiced as much as required even if you've listened to the lesson for the set number of repetitions
- If your teacher is satisfied with your pronunciation of an assigned lesson after testing you on it, they will mark the lesson as
confirmed- If your teacher beleives you need more practice, they will re-assign the lesson to you, and it will appear as an
unfinishedlesson the next time you log in
- If your teacher beleives you need more practice, they will re-assign the lesson to you, and it will appear as an
- If there are no yellow
unfinishedchapters on your home page, you can still practice any lesson by navigating to its associated chapter- To view how many lessons are currently assigned to you and how many lessons you've completed, select the user icon in the top right of the screen
- When you are done with your session, select the user icon in the top right of the screen and click the
log outbutton to end your session
- To log in to your account for the first time, contact your site admin for login credentials
- Once logged in, select a student from the
studentsdropdown in the menubar, or view all your student's progress at once from the home page- From either of these pages, you can assign a student a new lesson and the number of repetitions they must listen to the lesson audio for before it is marked as
completedby navigating to the appropriate lesson tab and chapter for the lesson, then using theassignbutton on the right of the lesson text to assign the lesson to the current student - Selecting the
assign all lessonsbutton at the bottom of each chapter will assign all the lessons in a chapter to the specified student for the set number of repetitions - You can also unassign individual lessons from a student if they have been assigned incorrectly using the
unassignbutton to the right of the lesson text - The
studentsdropdown will also show the number of unfinished and finished lessons for each student, allowing you to see which student's require more work at a glance
- From either of these pages, you can assign a student a new lesson and the number of repetitions they must listen to the lesson audio for before it is marked as
- When assigning lessons, you can
assignboth new lessons that the student hasn't seen yet, orreassignlesson that the student has alreadycompletedbut has not practiced enough to pass the in-person test for that lesson - If a student's lesson is marked yellow, they have been assigned the lesson but are still practicing it
- If the lesson is marked red, the student hasn't been assigned the lesson yet and can't view it from their account until you assign it to them
- If the lesson is marked blue, the student has
completedthe lesson but has yet to be tested on it
- When a student's pronunciation of a
completedlesson is tested in-person, you can mark the lesson asconfirmedif their pronunciation is acceptable- This will mark the lesson green, indicating that the student has passed the test for that lesson
- If the pronunciation of the lesson is not acceptable, you can
re-assignthe lesson with a set number of repetitions to colour the lesson yellow and re-add it to the student's list ofunfinishedlessons
- To logout of your account, select the user icon in the top right of the screen and click the
log outbutton
- To create an account to track your child's progress, contact their teacher to recieve a login username and password
- Once logged in, you will be able to see what chapters your children have been
assigned(marked yellow) or havecompleted(marked green) on the home page- To view a detailed list of your child's progress for a given chapter, select the desired chapter box from the home page
- For a given chapter,
unfinishedlessons are marked in yellow, lessons your child hascompletedwill be marked in blue, and lessons your child has finished and been tested on will be marked in blue asconfirmedby their teacher - Clicking the
childrendropdown on the menubar will allow you to view an indiviual child's progress- This dropdown will also allow you to view how many lessons each child has not yet finished and how many they have successfully finished
- To logout of your account, select the user icon in the top right of the screen and click the
log outbutton
- If you are the admin user for the site, you can login as a content creator using your admin credentials on the deployed site
- If you are not the site admin, contact the admin to request a new content creator account and use the provided username and password to login
- To add a new lesson tab, first create a
.zipfolder containing named folders for each desired chapter in the lesson tab- Each chapter folder should contain all the text/image files you want to upload along with their associated audio files
- Each item within a chapter folder should have the name
[chapter_number]_[lesson_number]
- To create a new lesson tab using a
.zipfolder that matches the above format, press theUpload +button on the home page menu bar- Select the
choose filebutton and select your.zipfolder containing your chapters, then clickupload tab/chapterto upload the.zip
- Select the
- To add new chapters, first create a
.zipfolder containing the text for each lesson (either as an image or a.txtfile) and the associated audio file for the lesson- Make sure the naming conventions for each file is:
1_[lesson_number]
- Make sure the naming conventions for each file is:
- To create a new chapter in an already-existing lesson tab, select the desired lesson tab from the menu bar and click
Upload chapter +in the lesson tab dropdown- Select the
choose filebutton and select your.zipfolder containing your lessons, then clickupload tab/chapterto upload the.zip
- Select the
- To remove lessons, chapters, or lesson tabs, either login to the site admin page using your admin credentials (if you have admin access) or make a request to the site admin detailing which lesson tabs, chapters, and/or lessons you want to be deleted
- To logout of your account, select the user icon in the top right of the screen and click the
log outbutton
- If you are setting up your custom instance for the first time, follow the installation instructions in this README and the deployment instructions on the documentation site
- After setting up your instance, you can navigate to the
adminpage by following the step 11 in the installation instructions.
- After setting up your instance, you can navigate to the
- On the admin page, you can create new accounts for teachers, content creators, parents, or students using the menu on the left of the screen to select the desired role, then selecting the
add [role]button in the top right of the screen- This will open a new screen where you can fill out the required info for the user
- When creating a new user, be sure to record the username and password as the user will require both of these credentials to login to the app
- If you are creating a new parent account, you will need to associate it with a student account in order for the parent to be able to view their child's progress
- Using the same sidebar on the left of the
adminscreen, select theParent-Studentsbutton and create a new parent-student object - Select the
add parent-studentbutton in the top right of the screen, then select the parent user and student user you want to associate - After adding the new parent-student relationship, the parent user will be able to view their child's progress from their own account
- Using the same sidebar on the left of the
- To modify users or their relationships, select the desired object from the left sidebar of the main admin page (e.g. Teachers) and then select the instance of that object you wish to modify (e.g. Teacher1)
- To delete accounts or relationships between accounts, follow the above instructions, but select the
deletebutton at the bottom of the user's info screen
- To delete accounts or relationships between accounts, follow the above instructions, but select the
To run the tests for the Django backend, navigate to the backend directory and run python manage.py test. This will also return a code coverge report visible in the terminal.
To run the tests for the React frontend, navigate to the frontend directory and run npm test. To view the code coverage report, run npm run test -- --coverage --watchAll=false.