Gavriil1 / CI_PP4_TD

0 stars 1 forks source link

ABCDE Todo List

Am I Responsive

Developer: Arron Beale

💻 Visit live website
(Ctrl + click to open in new tab)

Table of Contents

About

"ABCDE Todo List" is an application that helps a user organize their time according to Brian Tracy's method, as described in his book "Eat That Frog." Additionally, the website has additional features:

User Goals

Site Owner Goals

User Experience

Target Audience

User Requirements and Expectations

User Stories

  1. As a user, I would like to log in to my account. (Must Have) (Epic-1: Authentication)
  2. As a user, I would like to create a new account. (Must Have) (Epic-1: Authentication)
  3. As a user, I would like to be able to move from the Register page to the Log In page. (Must Have) (Epic-1: Authentication)
  4. As a user, I would like to create a new task. While creating the task, I may modify the following fields: 'title,' 'description,' 'importance,' 'frequency,' 'deadline.' (Must Have) (Epic-2: List-Create-Add-Delete-Tasks)
  5. As a user, I would like to update a task. While updating the task, I may modify the following fields: 'title,' 'description,' 'importance,' 'frequency,' 'deadline.' (Should Have) (Epic-2: List-Create-Add-Delete-Tasks)
  6. As a user, while on the "Create/Update Task" page, I need to go back without modifying or creating a task. (Could Have) (Epic-2: List-Create-Add-Delete-Tasks)
  7. As a user, I would like to delete a task. (Could Have) (Epic-2: List-Create-Add-Delete-Tasks)
  8. As a user, while on the "Delete" page, I would like to return to the homepage without deleting the task. (Could Have) (Epic-2:List-Create-Add-Delete-Tasks)
  9. As a user, I would like to read the manual to understand how to use the application. (Should Have) (Epic-3: Contact Form)
  10. As a user, I would like to be able to send an email to the admin to contact him or share feedback. (Could Have) (Epic-3: Contact Form)
  11. As a user, I would like to see the list of books the admin proposes for self-development and visit the Amazon website where I can buy them. (Should Have) (Epic4-Product List)
  12. As a user, I would like to log out from my account. (Must Have) (Epic-1: Authentication)
  13. As a user, I would like to see the list of all tasks.(Must) (Epic-2:List-Create-Add-Delete-Tasks)

Admin / Authorised User

  1. In my role as an Admin or Authorized User, I have the capability to log in to the admin console for backend access. (Must Have) (Epic5: Back-End-Administration)
  2. As an Admin, I can create users, delete users. (Must Have) (Epic5: Bakl-End-Administration)
  3. As an Admin, I want to modify user's settings: First Name, Permissions. (Should Have) (Epic5: Bakl-End-Administration)
  4. As an Admin, I want to filter users by staff, superuser, or active status. (Should Have) (Epic5: Bak-End-Administration)
  5. As an Admin, I am able to manually include, remove, or update books in the list of favorite books. (Should Have) (Epic5: Bak-End-Administration)
  6. As an Admin, I can view messages that have been sent by users through the contact form. (Should Have) (Epic5: Bak-End-Administration)
  7. As an Admin, I can view, update, delete users' tasks. (Could Have) (Epic5: Bak-End-Administration)
  8. As an Admin, I can filter tasks by: importance, frequency, user. (Should Have) (Epic5: Bal-End-Administration)
  9. As an Admin, I would like a user to find all company's social links and navigate to them by clicking footer's icons. (Should Have) (Epic6: Other)
  10. As an Admin, I would like user to see hamburger menue on smaller screen sizes (Should Have) (Epic6: Other)
  11. As an Admin, I would like a user to see pagination on product page of books (Should Have) (Epic4-Product List)
  12. I would like a user to see 404 when he enters wrong URL. (Should Have) (Epic6: Other)

Kanban, Epics & User Stories

Epics ![Epics](docs/epic-kanban/epics.png) ![Epic 1](docs/epic-kanban/epic-1.png) ![Epic 2](docs/epic-kanban/epic-2.png) ![Epic 3](docs/epic-kanban/epic-3.png) ![Epic 4](docs/epic-kanban/epic-4.png) ![Epic 5](docs/epic-kanban/epic-5.png) ![Epic 66](docs/epic-kanban/epic-6.png)
User Stories ![User stories](docs/epic-kanban/user-story.png)
Kanban ![Kanban](docs/epic-kanban/kan-ban.png)

Design

Colours

I chose bright colors for the footer and navbar to make the application more positive. I added a picture with a starry sky to make the application relaxing.

Structure

Website pages

The site was designed for the user to be familiar with the layout, such as a navigation bar along the top of the pages and a hamburger menu button for smaller screens.

The footer contains all relevant social media links that the business has, so the user can visit any social media site and follow the business there to expand the business's followers, likes, and shares.

The site consists of the following pages:

Database

Show diagram
User Model

The User Model contains the following:

Contact Model

The Contact Model contains the following:

Books Model

The Books Model contains the following:

Tasks Model

The Tasks Model contains the following:

Wireframes

The wireframes were created using Balsamiq

Wireframes

Login
Register
Home
Manual
Books
ContactForm
DeleteTask
CreateUpdateTask
404 Page

Features

Home page

See feature images ![Home page](docs/features/feature-homepage.png)

Logo & Navigation

See feature images ![Footer](docs/features/feature-homepage.png) ![Footer](docs/features/navbar-overview-logout.png) ![Footer](docs/features/navbar-overview-hamburger.png)

Footer

Contains social media links and copyright, displayed across all pages. User stories: 22

See feature images ![Footer](docs/features/footer.png)

Sign up / Register

See feature images ![Register](docs/features/register.png)

Login

See feature images ![Login](docs/features/login.png)

Logout

See feature images ![Logout](docs/features/navbar-overview-logout.png)

Hyperlink connection link between register and Login page

See feature images ![Logout](docs/features/login-register.png)

Manual Page

See feature images ![ContactForm](docs/features/manual.png)

Contact Form

See feature images ![ContactForm](docs/features/contact-form.png)

Books

See feature images ![Book](docs/features/books.png)

Task List

See feature images ![Task List](docs/features/task-list.png)

View/Edit Task page

See feature images ![Edit/View Task](docs/features/update-view.png)

Delete Task page

See feature images ![Delete Task](docs/features/delete-task.png)

Social Media Links and CopyRight

See feature images ![Social Media Links](docs/features/media-links.png)

Pagination

See feature images ![Pagination](docs/features/pagination.png)

Admin console for backend access.

User Stories: 14

See feature images ![Admin console](docs/features/administration-panel.png)

Admin console: User Settings.

User Stories: 15, 16, 17

See feature images ![Admin User Settings](docs/features/admin-users.png)

Admin console: Books Settings.

See feature images ![Admin User Settings](docs/features/admin-product-books.png)

Admin console: Messages.

See feature images ![Admin Messages](docs/features/admin-contact-form.png)

Admin console: Tasks Settings.

User Stories: 20, 21

See feature images ![Admin Tasks](docs/features/admin-tasks.png)

404 page

See feature images ![Delete Task](docs/features/404.png)

Technologies Used

Languages & Frameworks

Libraries & Tools

Validation

The W3C Markup Validation Service

Login
Register
Home
Task Create Update
Task Delete
Manual
Contact Form
Books
404

### CSS Validation The W3C Jigsaw CSS Validation Service
Style.css

### PEP8 Validation [PEP8 Validation Service](https://pep8ci.herokuapp.com/) The code underwent verification for PEP8 compliance and successfully passed without any errors or warnings.
TODO(base) Aplication.
base/admin.py
base/apps.py
base/forms.py
base/models.py
base/url.py
base/views.py

Books
books/admin.py
books/apps.py
books/models.py
books/urls.py
books/views.py

Contact Form
contactform/admin.py
contactform/apps.py
contactform/models.py
contactform/urls.py
contactform/views.py
### Lighthouse Performance, best practices, and SEO were tested using Lighthouse. #### Desktop
Login
Register
Homepage
Create/Update Task
Delete Task
Manual
Feedback
Books
#### Mobile
Login
Register
Homepage
Create Update Task
Delete Task
Manual
Feedback
Books
### Wave WAVE was used to test the website accessibility.
Login We have two false positive errors. The WAVE check indicates that labels are empty, but in reality, the labels have icons instead of text
Register We have 3 false positive errors, as before. The WAVE check says that labels are empty, but in reality, the labels have icons instead of text.
HomePage We observe 2-8 false positive errors, specifically, 'A link contains no text.' This occurs because I used icons instead of text to create links.
Create/Update Task
Delete Tasks
Manual
Feedback
Books We have a false positive contrast error. Pagination background and page numbers have very good contrast.
404 We have one alert: 'Suspicious link text,' which indicates that the purpose of the link is not described well. However, the link is part of the sentence 'Otherwise, click here to redirect to the homepage.' This sentence explains the purpose of the link. For this reason, the alert is a false positive.
## Testing 1. Manual testing ### Users ### Manual testing ## User Stories 1. As a User I would like to login to my account. (Must Have) (Epic-1: Authentication) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Open the application URL and navigate to the login page. Enter user credentials to log in. | User loged in. | Works as expected. |
2. As a User I would like to create a new account. (Must Have). (Epic-1: Authentication) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | On login page click "Sign Up". On register page register your username and password. | New account is created and user logged in. | Works as expected. |
3. As a User I would like to be able to move from Register page to Log In Page. (Must Have) (Epic-1: Authentication) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | On Register page, click on link "Login". | User is redirected to Log In Page. | Works as expected. |
4. As a user, I would like to create a new task. While creating the task, I may modify the following fields: 'title', 'description', 'importance','frequency', 'deadline'. (Must Have) (Epic-2: List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | On the homepage, click 'Add New.' On the Create/Update page, complete the fields: 'title,' 'task description,' select the 'deadline,' 'severity,' 'importance,' 'frequency,' and click Submit. | A new task is created with the required fields filled out. | Works as expected |
5. As a user, I would like to update a new task. While updating the task, I may modify the following fields: 'title', 'description', 'importance','frequency', 'deadline'. (Should Have) (Epic-2: List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Click on a pencil icon in the edit column. On the 'Create/Update Task' page, you may modify one or more of the following fields: 'title,' 'description,' 'importance,' 'frequency,' 'deadline.' | Task Modified | Works as expected |
6. As a user, while I am on "Create/Update Task" I need to go back, without modifying or creating task. (Could Have) (Epic-2: List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | While on "Create/Update" page click on an arrow on left top corner. | User is redirected to Homepage | Works as expected |
7. As a user I would like to delete the task. (Could Have) (Epic-2: List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Click on x in Edit colon. On Delete page click "Delete". | The task is deleted | Works as expected |
8. As a user, while on "Delete" page I would like to return to homepage without deleting the task. (Could Have) (Epic-2:List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | While on a "Delete" page, click on the arrow on the top left corner.| The user redirected back to homepage, task is not deleted. | Works as expected |
9. As a user, I would like to read manual, to understand how to use the application. (Should Have) (Epic-3: Contact Form) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | While on homepage, click "Manual" in navigation bar. | "The user is redirected to the manual page where they can read instructions. | Works as expected |
10. As a user I would like to be able to send an email to admin, to contact him or share feedback. (Could Have) (Epic-3: Contact Form) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | While on the homepage, click on 'Feedback,' complete all fields, and then click 'Send Feedback'. | UThe user is redirected to the homepage and sees the message that the email was received | Works as expected |
11. As a user I would like to see the list of book the admin propose for self development, and visit Amazon website where I can buy it. (Should Have) (Epic4-Product List) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | While on the homepage, click on 'Books.' View the book covers, descriptions, and ratings. Click the 'Buy on Amazon' button to navigate to the Amazon page, where you can make a purchase | The user is redirected to the 'Books' page and then to Amazon's website. | Works as expected |
12. As a user, I would like to log out from my account. (Must Have) (Epic-1: Authentication) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Navigate to the navbar, click on "User," in the dropdown menu, click "Log Out."| User Log Out from the account | Works as expected |
13. As a user, I would like to see the list of all tasks. (Must Have) (Epic-2: List-Create-Add-Delete-Tasks) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Login to the account. Click on the logo or homepage. | User sees the list of his tasks. | Works as expected |
## Admin/Site owner user stories. 14. In my role as an Admin or Authorized User, I have the capability to log in to the admin console for backend access. (Must Have) (Epic5: Back-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | navigate to https://ci-pp4-td-1.onrender.com/admin/ Complete username and Password and click next to login | User redirected to admin console. | Works as expected |
15. As an Admin, I can create users, delete users . (Must Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In the admin console, click on 'Users.' Then, click on 'Add User' in the top right corner to create a new user. Complete the username and password fields and click 'Save.' To delete a user, select the user, choose 'Delete selected user' from the 'Action' menu, and click 'Go. | One user is created, one user is deleted. | Works as expected |
16. As an Admin, I want to modify user's settings: Firs Name, Perissions. (Should Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In the admin console, click on 'Users,' select a user, modify the user's settings, and click 'Save | User's settings are updated. | Works as expected |
17. As an Admin, I want to filter user by staff , superuser or active status. (Should Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In the admin console, click on 'Users,' then click on 'Filter,' and select the required filter settings. | Users are filtered according to the specified filter settings. | Works as expected |
18. As an Admin I am able to manually include, remove, or update books in the list of favorite books. (Should Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In the admin console, click on 'Products.' In the top right corner, select 'Add Product,' complete all the fields, and click 'Save.' To update a product, click on the product's name, update all required fields, and click 'Save.' To delete a product, select the product, choose 'Delete selected products' from the 'Action' menu, and then click 'Go.'| Book added, updated, deleted successfully. | Works as expected |
Add a new book. Update a book. Delete a book.
19. As an Admin , I can view messages that have been sent by users through the contact form. (Should Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In admin console, click on Contacts, and click on the text of a message. | A new window opens, and I can see full message which was sent by user. | Works as expected |
20. As an Admin , I can view, update, delete user's tasks. (Could Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | In admin console, Navigate to "Tasks", Click on task. | A new window opens,where I can see, update or delete the task | Works as expected |
21. As an Admin , I can filter tasks by: importance, frequency, user. (Should Have) (Epic5: Bakl-End-Administration) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Navigate to "Tasks". Find Filter, set desired filters. | Tasks are filterd according to filter settings. | Works as expected |
22. As an Admin , I would like a user to find all company's social links, and navigate to them be clicking footer's icons. (Should Have) (Epic6: Other) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | On homepage find footer. Click on one of the icons. | User is redirected to social media | Works as expected |
23. As an Admin, I would like user to see hamburger menue on smaller screen sizes. (Should Have) (Epic6: Other) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Login to the account. Right-click on the page, select "Inspect," change the screen resolution for a smaller device.. | Hamburger menu shows up. | Works as expected |
24. As an Admin, I would like a user to see pagination on product page of books. (Should Have) (Epic4-Product List) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Navigate to the 'Books' page, scroll down, and select the pagination page." | I see two items on a new pagination page | Works as expected |
25. I would like a user to see 404 when he enters wrong URL. (Should Have) (Epic6: Other) **Step** | **Expected Result** | **Actual Result** ------------ | ------------ | ------------ | | Enter incorrect URL of website | User see 404 error | Works as expected |
### Device Testing & Browser compatibility ### Performing tests on various devices Testing of the website was conducted on the following devices: - Latitude 5520 - Redmi Note 10 - Samsung Tablet A10.1 Furthermore, the website underwent testing using the Device Toggling feature of Google Chrome Developer Tools, which includes all available device options. ### Browser compatability The following browsers were used to test the website: - Google Chrome - Mozilla Firefox - Microsoft Egde ## Bugs | **Bug** | **Fix** | | ------- | ------- | | css not loading| The static files configuration in settings.py was not correct. After fixing it, the issue was resolved | | User could see the tasks of other users| Defensive programming: Configured users to see only their tasks by adding 'mydata = Task.objects.filter(user=request.user)' to the equation.| | Users could update and delete other users' tasks | Adjusted code to check if the task belongs to the user; if not, it shows a 404 page. | | The footer was not at the bottom of the page when the content was big | "I changed the footer class to 'class="text-center text-white fixed-bottom"'. After that, the issue was fixed on all pages. | | The contact form was not saving subject of a message in admin. | Modified views.py script for feedback page to link correct subject to correct variable. | | The homepage was not displaying correctly when the user had no tasks. | I found that it was counting tasks for other users. I added an additional filter to make the application count tasks only for the logged-in user by including 'user=request.user'.| | Update page did not open, when I pressed on update button | The links were not set within urls.py, so they just needed to be wired up to load each relevant page." | | Admin panel has "section" which is not used | Opened ticket with support, they informed me to leave everything as it is https://res.cloudinary.com/dtdqranu0/image/upload/v1699719979/pictures/glxfztk7cqr8r4n9puc9.png | | In login, while testing register/login page on different resolutions, form form-control shrinks differently than input field. For this reason. For this reason"form-control" and input field have different sizes" https://res.cloudinary.com/dtdqranu0/image/upload/v1699790878/pictures/xcvu2nx2dfcq6gvxndrd.png | Created chat with support. Support informed me to leave everything as it is and just to add comment to bugs that bootstrap code does not work as expected https://res.cloudinary.com/dtdqranu0/image/upload/v1699790885/pictures/xd6fcamkuxomaizc2cee.png | ### Render Deployment [Official Page](https://render.com/) (Ctrl + click) ### Render Deployment Before deploying to render, environment variables must be defined in the Django project so that local development functions correctly. Once these environment variables are set up in the workspace, the project can be deployed, and the environment variables can be copied into HRender as config vars (to ensure the deployed app works correctly with 3rd party dependencies). 1. Create a file called env.py in the root directory of your workspace and ensure that the file is included in .gitignore. These variables should NOT be committed or pushed to GitHub. 2. import os to the file. 3. os.environ['DATABASE_URL'] = URL copied from neon.tech 4. os.environ['SECRET_KEY'] = A randomly generated key of your choosing. This keeps django from serving data to/from an unauthorised source. 5. os.environ['CLOUDINARY_URL'] = The URL from a cloudinary account. This can be found on the following page on the cloudinary website: www.cloudinary.com
Cloudinary
These environment variables can now be accessed and configured in the settings.py file of the django project. The website was deployed to Render using the following process: 1. Login to [Render](https://render.com/)
Render Login
2. Select "New" and then choose "Create new app" from the options in the top right corner of the screen.
Create New App
3. Select "Build and deploy from a git repository".
Select Github
4. On the subsequent page, select "Connect a repository"
Connect Repository
5. Write Name of the application, in Build Command write "./build.sh", in Start Command "gunicorn todo_list.wsgi"
Github Deploy
6. Choose the repository you wish to link to the Heroku app.
Select Repository
7. Navigate to the settings and click on "Reveal Config Vars" under "Config Vars."
Select Repository
8. Scroll down to the "Config Vars" section and input the configuration variables mentioned at the beginning of this README section. Additionally, include a variable with the key 'PORT' and the value '8000' to prevent build errors. The final configuration should resemble this example: KEY: DATABASE_URL VALUE: postgresurlexample123.com
Configure Vars
9. Click on "Create Web Service". 10. The site should be successfully built, and Render will furnish a URL for the constructed site
### Clone Repository Follow these steps to clone the repository: 1. Go to the GitHub repository 2. Find the "Code" button located above the file list and click on it. 3. Choose whether you prefer to clone via HTTPS, SSH, or Github CLI, and then click on the copy button to copy the URL to your clipboard. 4. Open Git Bash 5. Navigate to the directory where you would like to clone the directory and set it as the current working directory. 6. Type git clone and paste the URL from the clipboard ($ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY) 7. Hit the Enter key to create your local clone. Please check the following link for more information: https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository ## Credits ### Images Backgroun image was taken from https://getwallpapers.com/ ### Code 1. First version of the App was built from Django Tutorial of Dennis Ivy: https://www.youtube.com/watch?v=llbtoQTt4q 2. Footer was taken from this page https://getbootstrap.com/docs/4.6/getting-started/introduction/ 3. Navbar was taken from here https://getbootstrap.com/docs/4.6/components/navbar/. 4. Login, Register, Feedback pages are inspired from: https://bootsnipp.com/snippets/vl4R7 5. Product list : https://mdbootstrap.com/docs/standard/extended/product-cards/ 6. Pagination was taken from this video: https://www.youtube.com/watch?v=wY_BNsxCEi4&t=61s 7. Contact form design, was found on google. The form was taken from website similar to this one: https://colorlib.com/wp/bootstrap-contact-form/ 8. Django Contact Form: connecting form to backend : https://www.youtube.com/watch?v=lSgRWA4PMt4 9. "Main page todo app, I found it on the internet. It was taken from the page like https://bootdey.com/snippets/view/Task-Details 10. The form on create/update page were modified according to https://www.youtube.com/watch?v=CVEKe39VFu8 11. Delete page was created from this form: https://bootsnipp.com/snippets/vl4R7 ## Acknowledgements ### Special thanks to the following: - Code Institute - My Mentor Mo Shami