Portfolio 4 project as part of the Diploma in Full Stack Software Development by Code Institute.
TutorSight is an innovative online platform designed to seamlessly connect students with experienced teachers. The platform serves as a bridge between learners seeking personalized educational support and skilled educators offering their expertise. TutorSight facilitates the exploration of diverse subjects, providing a space where students can find the right teacher based on their specific needs. Whether it's academic assistance, skill development, or specialized knowledge, TutorSight empowers users to engage in one-on-one sessions with qualified teachers, fostering a collaborative and tailored learning experience. With user-friendly features and a commitment to educational excellence, TutorSight aims to enhance the accessibility and effectiveness of remote learning, creating a dynamic environment for knowledge-sharing and academic growth.
TutorSight is a comprehensive full-stack website that enables users to explore detailed tutor profiles, share reviews, and engage in discussions on various subject topics. Through its user-friendly interface, TutorSight offers a seamless experience for individuals to discover expert tutors, provide valuable feedback through reviews, and actively participate in conversations related to specific subjects.
Link to live site - https://tutorsight-django-project-fa74b7b42ae2.herokuapp.com/
The primary objective of the TutorSight project is to create an intuitive and user-friendly platform that connects teachers and students, fostering a dynamic learning community. Through detailed tutor profiles, reviews, and discussion forums, TutorSight aims to facilitate effective communication and collaboration between educators and learners. This project strives to provide a centralized hub where users can seamlessly explore tutor profiles, share and access reviews, and actively engage in discussions on diverse subject matters. The overarching goal is to enhance the educational experience by promoting transparency, accessibility, and a sense of community within the tutoring landscape.
My three main objectives were:
Enable users to easily discover and explore detailed profiles of teachers, showcasing their expertise, bio, and availability.
Allow users to schedule an hour tutoring session at a specific date and time.
Facilitate a transparent and reliable system for users to leave reviews, rate tutors, and provide valuable feedback on their learning experiences.
Students Seeking Tutors:
This includes students of all levels looking for qualified and experienced tutors to enhance their learning. They seek personalized assistance and a platform that allows them to find the right teacher based on expertise and user reviews.
Teachers Offering Tutoring Services:
Qualified educators, professionals, and subject matter experts interested in providing tutoring services. They look for a platform to showcase their expertise, connect with students, and receive feedback to enhance their teaching skills.
Parents/Guardians:
Parents or guardians actively involved in their children's education. They use the platform to find suitable tutors for their children, ensuring personalized and quality education outside the traditional classroom setting.
New visitors to Tutorsight are individuals exploring the platform for the first time. They are looking for an intuitive and user-friendly interface that allows them to quickly understand the website's purpose and functionality. Their primary goals include
Returning users are individuals who have already used Tutorsight before. They expect
Students looking for tutors want a seamless experience in
Teachers providing tutoring services aim to
Parents or guardians seeking tutors for their children want
The color palette chosen includes shades of blue and green for a calming and professional feel. White backgrounds and dark blue-gray elements maintain readability and a modern appearance. Puce is used as an accent color for attention-grabbing elements. The color scheme aims to convey trust, growth, and a positive learning environment, which aligns with the tutoring site's purpose.
The font family has been updated to "Montserrat" for a modern and clean look. The font size and weight for the brand have been adjusted for better visibility. The overall changes aim to enhance readability and maintain a professional appearance suitable for a tutoring website.
Here is a diagram showing the possible flow through the site. There are 2 sections shown here. On the left it shows the Admin and the right shows a site user.
The database plan is fairly simple, but it shows the information that is stored within the database, the type of data and if it is logged as a Primary or Foreign key where applicable.
The user can create an account
The user can logout of an account
The user can book a session with any tutor
The tutor can accept or deny a booked session with a student.
The user can edit previously booked session with tutor.
The user can delete a previously booked session with tutor
Comments and reviews have been removed due to lack of time.
Advanced Search and Matchmaking:
Interactive Learning Resources:
Virtual Classroom Integration:
Calendar Integration and Scheduling:
Gamification for Learning:
Mobile Application:
Community Forums and Networking:
Progress Tracking and Reporting:
Language Support and Localization:
Enhanced Review and Rating System:
Here are the technologies used to build this project:
This project was designed using Agile methodology, utilising the Project Board and Issues sections in GitHub
As each section or Function/Model was built during this project, I was testing for functionality and styling issues that may have arisen (see table below), which were corrected or fixed before continuing. I also had friends test the site by signing up, adding and deleting comments using various devices on varying platforms (IOS, Android, Mobile, Tablet etc) and reporting back any issues they encountered with functionality or styling.
For any Fails, there is a more detailed description below the table
ADMIN | TEST | OUTCOME | PASS/FAIL |
---|---|---|---|
Create a Booking | Book a session successfully | PASS | |
Edit a previous booking | Only able to implement edit directly after its creation | PASS | |
Confirm a booking | Did not have enough time to implement this | FAIL | |
Delete Booking | Booking deletes successfully | PASS | |
Write a comment | Could manually enter comments using admin | PASS | |
Delete User Comments | Could manually delete comments using admin | PASS | |
Delete Review | Could manually delete reviews using admin | PASS | |
Create 7 Test Posts to check Pagination | Next/Previous Page Appears at bottom of screen | PASS |
(*) - Due to securing a new position in November my time that I could allocate to this project diminished significantly and I got stuck at many points along the way, It was only in the last few weeks that I was starting to understand python and had very little if any experience with bootstrap. Implementing models connecting views and urls properly was very difficult when creating a new type of model from what was shown in the walkthrough, I made things very difficult for myself unintentionally. If i could go back I would certainly prepare better and with the knowledge I have now I could create a much better project. I know myself this is a substandard attempt I only wish you see the effort I made and I hope it merits a pass.
TEST | OUTCOME | PASS/FAIL |
---|---|---|
Create Account | Created successfully | Pass |
Login | Login Successful | PASS |
Logout | Logout Successful | PASS |
Create a Booking | Book a session successfully | PASS |
Edit a previous booking | Only directly after creation | PASS |
Confirm a booking | Did not have enough time to implement this | FAIL |
Delete Booking | Booking deletes successfully | Pass |
Write a comment | Ran out of time to implement this feature | FAIL |
Delete User Comments | Ran out of time to implement this feature | FAIL |
Delete Review | Ran out of time to implement this feature | FAIL |
Filter Posts by category | Ran out of time to implement this feature | FAIL |
(*) See Bugs below
PostgreSQL Version Mismatch Error:
Issue: Django was expecting PostgreSQL version 12 or later, but PostgreSQL 11.18 was found. Fix: Ensure that you are using PostgreSQL version 12 or later. Check your database configuration. TemplateSyntaxError in Django:
Issue: TemplateSyntaxError at /booking/AC_1001/new/: Invalid block tag 'endif', expected 'endblock'. Fix: Check the template file at line 51 for correct block tags. Ensure proper usage of {% endif %} and {% endblock %}. TemplateDoesNotExist Error - tempus_dominus/widget.html:
Issue: Django couldn't find the template file tempus_dominus/widget.html. Fix: Ensure that the required template file tempus_dominus/widget.html is available in the specified location or install the required package if it's part of a third-party library. Prepopulating Form Data in Django View:
Issue: Form data was not prepopulating in the Django edit view. Fix: Ensure that you pass the instance of the object to the form in the view. Example: form = BookingForm(instance=booking). KeyError in Django:
Issue: KeyError at /booking/AC_1001/new/: 'booking_time'. Fix: Check if the form is correctly defining the field 'booking_time' and ensure it's present in the submitted data. OperationalError - PostgreSQL Connection Issue:
Issue: OperationalError at /: Connection to PostgreSQL server failed due to password authentication failure. Fix: Double-check the database credentials, especially the password, in your Django settings. Ensure they match the credentials provided by your PostgreSQL service. TemplateDoesNotExist Error - accept_booking.html:
Issue: Django couldn't find the template file accept_booking.html. Fix: Create the template file accept_booking.html in the specified location or adjust the template reference. Reverse for 'edit_booking' Error:
Issue: Reverse for 'edit_booking' with arguments '('',)' not found. Fix: Ensure that the edit_booking URL pattern in urls.py expects an integer parameter and check the value being passed in the template.
Issue: In the accept_booking.html page, there was an issue with the "Edit Booking" functionality. Initially, a form tag was used for the button, causing unexpected behavior and preventing the display of stored content when editing a booking. Fix: The issue was resolved by changing the implementation to use a hyperlink ( tag) with the appropriate URL pointing to the edit_booking view. This adjustment ensures a smoother user experience, allowing users to navigate directly to the edit page without the need for a form submission.
The performance scores appear to be low, and I believe this is due to the images uploaded for each blog post being hosted on a third-party cloud-based platform.
Desktop
HTML & CSS testing was completed using W3 Validator
Python pep8 validation was done via Code Institute's Python Linter
The only errors recieved here were where some lines of text exceeded the limit of 79 characters, but these have now been rectified.
Python Files Tested:
The website was stored using GitHub for storage of data and version control. To do this I did the following;
After each addition, change or removal of code, in the terminal within your IDE (I used codeanywhere for this project) type:
The files are now available to view within your github repository.
This project was based on the Code Institute's - I think therefore I blog walkthrough module which provided a standard blog 'base'. From this base I customised a lot of the layout and styling with Bootstrap and custom CSS. I also added a custom model for booking a session. This allowed me to create a functionality within the site for users to filter through teachers and their reviews and comments selecting a suitable tutor if needed.
I also added several custom Views and Forms to the site, as well as ensuring that all links and desired functionality was working as intended.
For inspiration and fine-tuning of my code, I referred to John Elder's youtube channel Codemy where I was able to get a better understanding of how to correctly create this type of product using Django and Bootstrap.
The wireframe mockups were created using Figma
Once complete, the readme file was passed through a spelling and grammar check via Grammarly
For placeholder images, I have used picsum which provides a library of stock images that display as a placeholder.
All other content and images are my own.
For inpiration in general, for code, design help and advice, I'd like to give thanks to;
Patricia Young my mother who has been encouraging and patient with me throughout the project.
Jubril my mentor at Code Institute who was very patient and generous with his time.
Kyle Clow and Stephen Dawson new friends and recent hackathon partners who have helped me throughout my project with encouragement and patience. I can not thank them enough.
Other Slack members and the code institute tutoring service were also helpful throughout the project.