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.
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.txt
to install the required packages for the backend of the app - navigate to the
\backend\IlmHub
directory and create a file called.env
and 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
ilmhub
and a database calledilmhub_db
within the server- for info on how to install PostgreSQL on your local machine, click here
- in your PostGreSQL server, create a user called
ilmhub
with the samePASSWORD
as in the .env file and grant all privileges to theilmhub_db
database- for info on how to create a local server and database in PostgreSQL, click here
- navigate to the
backend
directory and runpython manage.py migrate
to migrate the database to your PostgreSQL server - navigate to the
frontend
directory and runnpm install
to install the required packages for the frontend of the app - run
npm start
to start the frontend of the app onlocalhost:3000
- navigate to the
backend
directory and runpython manage.py runserver
to start the backend of the app onlocalhost:8000
- click here or navigate to
localhost:3000
in 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
assigned
to 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
repetitions
counter by 1; once it reaches 0, the lesson will be marked ascompleted
and your teacher will be notified that you are ready to be tested on the pronunciation at your next in-person meeting Completed
lessons 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
unfinished
lesson 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
unfinished
chapters 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 out
button 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
students
dropdown 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
completed
by navigating to the appropriate lesson tab and chapter for the lesson, then using theassign
button on the right of the lesson text to assign the lesson to the current student - Selecting the
assign all lessons
button 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
unassign
button to the right of the lesson text - The
students
dropdown 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
assign
both new lessons that the student hasn't seen yet, orreassign
lesson that the student has alreadycompleted
but 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
completed
the lesson but has yet to be tested on it
- When a student's pronunciation of a
completed
lesson is tested in-person, you can mark the lesson asconfirmed
if 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-assign
the lesson with a set number of repetitions to colour the lesson yellow and re-add it to the student's list ofunfinished
lessons
- To logout of your account, select the user icon in the top right of the screen and click the
log out
button
- 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,
unfinished
lessons are marked in yellow, lessons your child hascompleted
will be marked in blue, and lessons your child has finished and been tested on will be marked in blue asconfirmed
by their teacher - Clicking the
children
dropdown 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 out
button
- 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
.zip
folder 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
.zip
folder that matches the above format, press theUpload +
button on the home page menu bar- Select the
choose file
button and select your.zip
folder containing your chapters, then clickupload tab/chapter
to upload the.zip
- Select the
- To add new chapters, first create a
.zip
folder containing the text for each lesson (either as an image or a.txt
file) 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 file
button and select your.zip
folder containing your lessons, then clickupload tab/chapter
to 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 out
button
- 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
admin
page 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
admin
screen, select theParent-Students
button and create a new parent-student object - Select the
add parent-student
button 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
delete
button 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
.