Deliverable 3 - svasquezs1/StudyBank-web GitHub Wiki

Deliverable 3: MVP

Sprint 3 · 05/09/2026 – 14/10/2026

Index


1. Architecture & Data

Deployment Diagram

Deployment Diagram

Diagram description:

The diagram illustrates the physical deployment architecture and execution environments of the StudyBank project:

  • Client Devices: Users access the application from PC devices (Windows, MacOS) or mobile devices (Android, iOS) connecting via the HTTPS protocol.
  • Local Server (Execution Environment): The system is hosted in a Linux environment.
  • Base Software: At the operating system level, the programming language (Python), the package manager (Pip), and the version control system (Git) are installed.
  • Project Dependencies: Through requirements.txt, the Django framework (version 6.0.7) and necessary libraries such as Pillow 12.3.0, django-storages 1.14.6, boto3 1.43.56, whitenoise 6.12.0, and python-dotenv 1.2.2 are installed in the environment.
  • Django Application: The project is modularized into four main applications: accounts, materials, tutoring, and notifications.
  • Database: SQLite3 is used as a relational database to persist information for all system models (University, Program, User, Course, Material, Subject, TutorProfile, TutoringRequest, MaterialDownload, MaterialRating, TutoringRating, Notification, TutorAvailability).
  • External Storage: The system connects via HTTPS to the Cloudflare R2 service for static and media file management.

Changes from Deliverable 2:

  • Added the exact versions of each technology and library in the corresponding nodes of the diagram, taken directly from the project's requirements.txt file (e.g., Django 6.0.7, Pillow 12.3.0, django-storages 1.14.6, etc.) to address the instructor's feedback.
  • Added the new notifications application to the components (Apps) block of the StudyBank project.
  • Incorporated the new entities/tables into the SQLite3 database resulting from the Sprint 3 functionalities:
    • MaterialDownload and MaterialRating (pertaining to material management and reviews).
    • TutorAvailability and TutoringRating (pertaining to tutor schedule management and session ratings).
    • Notification (pertaining to the new alerts and notifications functionality).

1.2 Component Diagram

General architecture

StudyBank is a self-contained web application composed of four main functional modules:

User and account management. Study material management. Tutoring management. Notifications.

Users access the system through a web browser. Requests are processed by Django, which communicates with the application models and database before returning an HTML response. Tutoring request state changes emit Django Signals that create notifications for the affected users.

The current application does not expose or consume an external public API.


flowchart LR

U[University Student] --> B[Web Browser]



B -->|HTTP / HTTPS| D[Django Application]



subgraph Django Application

URL[URL Router]

V[Views]

T[Templates]

M[Models]

A[Authentication and Authorization]

S[Static and Media Configuration]

Sig[Django Signals]

end



D --> URL

URL --> V

V --> M

V --> T

V --> A

V --> Sig

Sig -->|Create Notifications| M

T --> B



M --> DB[(SQLite Database)]

S --> W[WhiteNoise Static Files]

S --> L[Local Media Storage]

S -. Production configuration .-> R[Cloudflare R2 Storage]





Loading

Component Diagram

Component Diagram

Module descriptions:

  • accounts: manages registration, authentication integration and profile editing. Its main views are register and edit_profile, and its user model is referenced by the other applications.
  • materials: manages material upload, detail, search/filter, download tracking, material rating and catalog sorting. Sprint 3 added MaterialDownload and MaterialRating, plus the rate_material flow and rating/download-based sorting.
  • tutoring: manages tutor registration and search, tutoring requests, tutor decisions, recurring tutor availability, session completion, tutoring ratings and tutor sorting. Sprint 3 added TutorAvailability, TutoringRating, completed-session handling and rating/popularity ordering.
  • notifications: manages the user's notification list and unread count. Django signals observe TutoringRequest creation and status changes to create notifications for tutors and students for RF-19 and RF-20.

Note on dependencies: The dashed lines in the component diagram indicate that specific workflows and complete modules require a valid user session. Specifically, the entire tutoring and notifications modules depend on the login function of accounts. Additionally, within the materials module, specific interfaces such as upload, material_detail, and download_material have explicit dependencies mapped to the login function, indicating that these specific actions are restricted to authenticated users, while other interfaces in the module remain public or are handled differently. Finally, there is an explicit dependency mapped from notifications to tutoring, illustrating that the notifications module relies on tutoring events (via Django Signals) to generate alerts.

Changes from Deliverable 2 (Sprint 3):

  • Added the notifications application and its dependency on TutoringRequest events.
  • Added material download tracking and material ratings for RF-13 and RF-14.
  • Added tutor availability management for RF-15.
  • Added completed tutoring-session ratings for RF-17.
  • Added tutor sorting by rating/review count for RF-18.
  • Added notification flows for RF-19 and RF-20.
  • Confirmed the materials module includes the search_materials flow used by RF-05 and RF-06.
  • Updated the tutoring module to include request completion as a prerequisite for rating a session.

1.3 Data Model

Changes from Deliverable 2:

Diagrama detallado

Click the diagram to open it in full size.

Changes from the previous version: extended the relational model with the material feedback flow (materials_materialdownload for RF-14 and materials_materialrating for RF-13), the tutoring scheduling and feedback flow (tutoring_tutoravailability for RF-15 and tutoring_tutoringrating for RF-17/RF-18), and the notifications module (notifications_notification for RF-19/RF-20). The tutoring_tutoringrequest entity now carries the full session lifecycle (scheduled_at, mode, message, status, timestamps).

Entity Descriptions

accounts_university

accounts_university represents an institution available in StudyBank. A university may offer multiple academic programs, be associated with multiple users, and be associated with multiple study materials.

Column Type Key
id INT PK
name VARCHAR(150), UNIQUE —
accounts_program

accounts_program represents an academic program or major offered by a university. Each program belongs to one university, while one university may offer multiple programs.

Column Type Key
id INT PK
university_id INT FK → accounts_university
name VARCHAR(150) —
accounts_user

accounts_user represents a registered person on the platform. StudyBank uses the institutional email as the authentication identifier instead of a username. A user may belong to a university and a program, upload materials, have one tutor profile, submit tutoring requests as a student, rate and download materials, rate completed tutoring sessions, and receive notifications. university and program may remain empty when the account is created.

Column Type Key
id INT PK
program_id INT, NULL FK → accounts_program
university_id INT, NULL FK → accounts_university
password VARCHAR(128) —
last_login DATETIME, NULL —
is_superuser BOOL —
first_name VARCHAR(150) —
last_name VARCHAR(150) —
is_staff BOOL —
is_active BOOL —
date_joined DATETIME —
email VARCHAR(254), UNIQUE —
profile_picture VARCHAR(100), NULL —
materials_course

materials_course represents a course associated with study materials (e.g. Calculus I, Databases, Operating Systems). A course may be associated with multiple materials.

Column Type Key
id INT PK
name VARCHAR(150) —
materials_material

materials_material represents a study resource uploaded by a user (notes, exams, summaries, lab reports, documents or images). A material belongs to one uploader, one course, and one university. It may be downloaded and rated by multiple users.

Column Type Key
id INT PK
course_id INT FK → materials_course
university_id INT FK → accounts_university
uploaded_by_id INT FK → accounts_user
title VARCHAR(200) —
description TEXT, NULL —
file_type VARCHAR(20) —
file VARCHAR(100) —
uploaded_at DATETIME —
materials_materialdownload (RF-14)

materials_materialdownload records that a user downloaded a material. It enables the "Most Downloaded" ranking and gates the ability to rate a material. Each (material, user) pair is unique; repeated downloads update the counter and timestamp instead of creating new rows.

Column Type Key
id INT PK
material_id INT FK → materials_material (CASCADE)
user_id INT FK → accounts_user (CASCADE)
first_downloaded_at DATETIME —
last_downloaded_at DATETIME —
times_downloaded INT — (DEFAULT 1)
— — UNIQUE (material_id, user_id)
materials_materialrating (RF-13)

materials_materialrating stores a 1-to-5 star rating a user gives to a material. Each user may rate a given material only once; the rating can be updated afterwards.

Column Type Key
id INT PK
material_id INT FK → materials_material (CASCADE)
user_id INT FK → accounts_user (CASCADE)
score SMALLINT — (CHECK 1–5)
created_at DATETIME —
updated_at DATETIME —
— — UNIQUE (material_id, user_id)
tutoring_subject

tutoring_subject represents a subject that a tutor can offer (e.g. Calculus, Programming, Physics). Maintained as a fixed catalog through the Django administration panel.

Column Type Key
id INT PK
name VARCHAR(100), UNIQUE —
tutoring_tutorprofile

tutoring_tutorprofile extends a registered user with tutoring capabilities. Each tutor profile belongs to exactly one user (one-to-one), may offer one or more subjects, defines weekly availability slots, holds an approval status, and is hidden from tutor searches until approved.

Column Type Key
id INT PK
user_id INT, UNIQUE FK → accounts_user (one-to-one)
is_approved BOOL —
tutoring_tutorprofile_subjects (intermediate / junction table)

tutoring_tutorprofile_subjects is the junction table that implements the many-to-many relationship between tutoring_tutorprofile and tutoring_subject. Each row links one tutor profile to one subject, and the pair must be unique.

Column Type Key
id INT PK
tutorprofile_id INT FK → tutoring_tutorprofile
subject_id INT FK → tutoring_subject
— — UNIQUE (tutorprofile_id, subject_id)
tutoring_tutoravailability (RF-15)

tutoring_tutoravailability represents a recurring weekly time slot during which a tutor is available. Each slot belongs to one tutor profile. Slots must be unique per tutor, day and time range.

Column Type Key
id INT PK
tutor_id INT FK → tutoring_tutorprofile (CASCADE)
day_of_week SMALLINT — (0 = Monday … 6 = Sunday)
start_time TIME —
end_time TIME —
is_active BOOL — (DEFAULT true)
— — UNIQUE (tutor_id, day_of_week, start_time, end_time)
tutoring_tutoringrequest

tutoring_tutoringrequest represents a session request sent by a student to a tutor for a specific subject. It belongs to one student (accounts_user), one tutor (tutoring_tutorprofile), and one subject (tutoring_subject, on_delete=PROTECT, so a subject cannot be deleted while tutoring requests reference it).

Column Type Key
id INT PK
student_id INT FK → accounts_user
tutor_id INT FK → tutoring_tutorprofile
subject_id INT FK → tutoring_subject (PROTECT)
scheduled_at DATETIME —
mode VARCHAR(20) — (in_person or virtual)
message TEXT — (max 500)
status VARCHAR(20) — (pending default, accepted, rejected, completed)
created_at DATETIME —
updated_at DATETIME —
tutoring_tutoringrating (RF-17 / RF-18)

tutoring_tutoringrating stores the rating and feedback a student leaves after a completed tutoring session. It is tied one-to-one to a tutoring request, and references the student and the tutor profile involved.

Column Type Key
id INT PK
tutoring_request_id INT, UNIQUE FK → tutoring_tutoringrequest (one-to-one, CASCADE)
student_id INT FK → accounts_user (CASCADE)
tutor_id INT FK → tutoring_tutorprofile (CASCADE)
score SMALLINT — (CHECK 1–5)
feedback TEXT — (max 1000)
created_at DATETIME —
notifications_notification (RF-19 / RF-20)

notifications_notification represents an in-app notification delivered to a user (e.g. a new tutoring request, a status change, or a system message). It always targets one recipient and may optionally reference the tutoring request that triggered it.

Column Type Key
id INT PK
recipient_id INT FK → accounts_user (CASCADE)
tutoring_request_id INT, NULL FK → tutoring_tutoringrequest (CASCADE)
message VARCHAR(255) —
link VARCHAR(200) — (may be empty)
is_read BOOL — (DEFAULT false)
created_at DATETIME —

Relationships Summary

Source entity Cardinality Target entity Description
accounts_university 1 : N accounts_program A university may offer multiple programs.
accounts_university 1 : N accounts_user Multiple users may belong to one university.
accounts_program 1 : N accounts_user Multiple users may belong to one program.
accounts_user 1 : N materials_material A user may upload multiple materials.
accounts_university 1 : N materials_material Multiple materials may belong to one university.
materials_course 1 : N materials_material Multiple materials may belong to one course.
materials_material 1 : N materials_materialdownload A material may be downloaded by multiple users.
accounts_user 1 : N materials_materialdownload A user may download multiple materials.
materials_material 1 : N materials_materialrating A material may be rated by multiple users.
accounts_user 1 : N materials_materialrating A user may rate multiple materials.
accounts_user 1 : 1 tutoring_tutorprofile A user may have at most one tutor profile.
tutoring_tutorprofile 1 : N tutoring_tutorprofile_subjects A tutor profile links to many subject rows.
tutoring_subject 1 : N tutoring_tutorprofile_subjects A subject links to many tutor-profile rows.
tutoring_tutorprofile ↔ tutoring_subject N : M tutoring_tutorprofile_subjects Tutors may offer several subjects and subjects may have several tutors — resolved through the junction table.
tutoring_tutorprofile 1 : N tutoring_tutoravailability A tutor profile defines multiple weekly availability slots.
accounts_user 1 : N tutoring_tutoringrequest A user may submit multiple tutoring requests as a student.
tutoring_tutorprofile 1 : N tutoring_tutoringrequest A tutor may receive multiple tutoring requests.
tutoring_subject 1 : N tutoring_tutoringrequest A subject may be referenced by multiple tutoring requests.
tutoring_tutoringrequest 1 : 1 tutoring_tutoringrating A tutoring request may have at most one rating.
accounts_user 1 : N tutoring_tutoringrating A student may author multiple tutoring ratings.
tutoring_tutorprofile 1 : N tutoring_tutoringrating A tutor may receive multiple tutoring ratings.
accounts_user 1 : N notifications_notification A user may receive multiple notifications.
tutoring_tutoringrequest 1 : N notifications_notification A tutoring request may trigger multiple notifications (optional, nullable).

Course and Subject Separation

materials_course and tutoring_subject are maintained as separate catalogs:

  • materials_course is used by the study materials module.
  • tutoring_subject is used by the tutoring module.

This separation lets both modules be developed independently. A future refactor may unify both entities if the team determines that they represent the same academic concept.

Current Implementation Status

The following tables are currently implemented:

  • accounts_university
  • accounts_program
  • accounts_user
  • materials_course
  • materials_material
  • materials_materialdownload
  • materials_materialrating
  • tutoring_subject
  • tutoring_tutorprofile
  • tutoring_tutorprofile_subjects
  • tutoring_tutoravailability
  • tutoring_tutoringrequest
  • notifications_notification

The following table is implemented in a feature branch and not yet merged into main:

  • tutoring_tutoringrating (RF-17 / RF-18)

Implementation status is tracked through GitHub Issues, Pull Requests, and the project board.


2. Corporate Image

Website Logo preview

StudyBank

Official StudyBank Logo

StudyBank Logo


Slogan

"Less Searching. More Learning. Greater Success."


Color Palette

Colors currently defined in the project's stylesheet (static/css/styles.css, :root block):

Swatch Color CSS variable Hex Use
#1a1d24 Ink --ink #1a1d24 Main background
#242832 Ink soft --ink-soft #242832 Surfaces and cards
#f5f2e9 Paper --paper #f5f2e9 Main text
#a8a89c Paper dim --paper-dim #a8a89c Secondary text
#e0a458 Amber --amber #e0a458 Accent and highlights
#c47f2e Amber deep --amber-deep #c47f2e Accent hover state
#333744 Line --line #333744 Borders
#7fa88a OK --ok #7fa88a Success states
#c96b6b Danger --danger #c96b6b Error states

Typography: Fraunces for headings and the brand name; Inter for interface text. Both are loaded from Google Fonts in base.html (Fraunces 400/600/900, Inter 400/500/600).

Corporate Image Evidences

The following screenshots show how the StudyBank logo, slogan and color palette are applied consistently across the web application.

Corporate image evidence 1
Evidence 1: Logo, slogan and color palette in the application.

Corporate image evidence 2
Evidence 2: Logo, slogan and color palette in the application.

Corporate image evidence 3
Evidence 3: Logo, slogan and color palette in the application.

Corporate image evidence 4
Evidence 4: Logo, slogan and color palette in the application.


3. Repository

Commits by member — Sprint 3 (05/09/2026 – 14/10/2026), merged into main:

Member Commit Date Message
Sebastián Vásquez fc19a30 07/10/2026 feat(notifications): notify tutor of new tutoring request (RF-19)
Sebastián Vásquez 51b2823 07/10/2026 feat(notifications): notify student when request is accepted or rejected (RF-20)
Sebastián Vásquez 58050fd 14/10/2026 feat(tutoring): tutor public profile with average rating (RF-16)
Sebastián Vásquez 1b599e1 14/10/2026 style(navbar): highlight current page and add mobile hamburger menu
Sebastián Vásquez 413228a 14/10/2026 style(ui): unify form controls, filter bars and spacing across pages
Gisel Jaramillo 55765e2 01/10/2026 fix: show course filter on materials list and require login
Gisel Jaramillo cd6a2c5 08/10/2026 feat(materials): add download-gated material rating (RF-13)
Gisel Jaramillo d58fd3e 08/10/2026 Fix: resuelve conflictos en styles.css integrando notificaciones
Gisel Jaramillo bb4f509 10/10/2026 feat(materials): add catalog sorting by highest rating (RF-14)
Gisel Jaramillo 452acb7 11/10/2026 Modifying the footer and adding the slogan
Samuel Serna a06c819 13/10/2026 feat: add tutor availability management
Samuel Serna 04cb8f4 13/10/2026 feat: add tutoring session ratings
Samuel Serna 5d66120 13/10/2026 feat: add tutor rating sorting
Samuel Serna 3fa5dbe 14/10/2026 merge main into RF-17 and resolve tutoring conflicts

Pull requests merged in Sprint 3: #62 (materials list fix), #63 (RF-19), #64 (RF-20), #65 (RF-13), #66 (RF-14), #67 (footer and slogan), #68 (RF-15), #69 (RF-17, includes #70 RF-18), #71 (RF-16), #72 (navbar) and #73 (UI consistency).

Automated tests: 73 tests pass in main (python manage.py test): 17 in notifications, 53 in tutoring (including test_rf16.py, test_rf17.py and test_rf18.py) and 3 in materials.


4. Video

The video (4–5 minutes) follows the structure requested in the template, and the three members appear on camera:

Part Time Presenter Content
Pitch 0:00 – 1:00 Sebastián (single presenter) Team, project name, problem, solution, where we are and where we want to go
Sprint 3 requirements 1:00 – 2:00 Gisel (RF-13, RF-14), Samuel (RF-15, RF-17, RF-18), Sebastián (RF-16, RF-19, RF-20) Brief explanation of each requirement, without reading it
Evidence 2:00 – 4:00 Each member narrates their own module Live demo: rate and sort materials → tutor availability and tutor sorting → tutor profile and notifications → complete and rate a session

Videos links: https://drive.google.com/file/d/1FedOQCn6UPHSz9tBCfbXw8_MWEvMzVf5/view?usp=sharing https://drive.google.com/file/d/10hFn7xa1VH2TYCUFj6UCL7Vd5IS6BN0O/view?usp=sharing https://drive.google.com/file/d/1qt_t_AZIU98ylJWAWaVkNNsvP6nIh0Fg/view?usp=sharing https://drive.google.com/file/d/1vYWSz3HFYFLwgUgqafCoG0W-fMRQWIQ7/view?usp=sharing

⚠️ como hemos tenido problemas para la edición del video debido a percances de varios miembros del equipo, se adjuntan los links de algunos videos individuales como prueba de que ya se hizo la grabación pero falta unificarlos. En bien esté listo el video final se adjuntará.


5. Project Management

5.1 Backlog

Requirements planned for Sprint 3 — 8 of 8 completed and merged into main:

Issue Requirement Priority Responsible Status
#14 RF-13 — Rate a downloaded material Should Gisel ✅ Done — PR #65
#15 RF-14 — Materials sorted by rating Should Gisel ✅ Done — PR #66
#16 RF-15 — Tutor availability Should Samuel ✅ Done — PR #68
#17 RF-16 — Tutor profile with average rating Should Sebastián ✅ Done — PR #71
#18 RF-17 — Rate a completed tutoring session Should Samuel ✅ Done — PR #69
#19 RF-18 — Tutors sorted by rating Should Samuel ✅ Done — PR #70 (merged through #69)
#20 RF-19 — Notify tutor of a new request Should Sebastián ✅ Done — PR #63
#21 RF-20 — Notify student of the decision Should Sebastián ✅ Done — PR #64

The acceptance criteria of each requirement are in its GitHub issue.

Tasks per requirement:

Requirement Tasks
RF-13 MaterialDownload and MaterialRating models + migrations · record each download in download_material · rate_material view and route · 1–5 star control in the material detail, enabled only after downloading
RF-14 Annotate average rating, rating count and downloads in search_materials · "Sort by" selector (Newest, Highest Rating, Most Downloaded) in the catalog
RF-15 TutorAvailability model + migration · form with start/end and overlap validation · create, edit and delete views and templates · tests
RF-16 tutor_profile view and route · profile template (personal data, subjects, modes, availability, average rating, recent reviews) · links from tutor search · tests (test_rf16.py)
RF-17 completed status in TutoringRequest · TutoringRating model + migration · "Mark as completed" and "Rate session" views and templates · tests (test_rf17.py)
RF-18 Annotate average rating and review count in tutor_search · sort options (alphabetical, rating, popularity) · tests (test_rf18.py)
RF-19 notifications app · Notification model + migration · post_save signal on TutoringRequest · notifications page · unread badge in the navbar · tests
RF-20 pre_save/post_save signals that detect the status change to accepted or rejected · link to the specific request · tests

5.2 Weekly Meetings

See Weekly Meetings — Sprint 3.

🔄 PARTIAL:

  • Samuel completed his individual answers for Sprint 3 (10/09, 17/09, 24/09, 01/10 and 08/10). Sebastián and Gisel still need to complete their individual answers using the questions required by the template.
  • Meetings with the Product Owner must be recorded (required by the template).
  • Follow-ups with the project managers, including the traffic-light status meeting, with its real date.

5.3 Retrospective

See Retrospectives — Sprint 3.

✅ DONE: Sprint 1, Sprint 2 and Sprint 3 retrospective answers are documented on Retrospectives, using the three required questions.


6. Sprint Review

The Sprint Review is presented in class:

  1. Pitch presented by a single member (Sebastián).
  2. Demo of the Sprint 3 requirements by each member, prioritising the ones with the highest value for the final product: tutor profile with average rating (RF-16), notifications (RF-19, RF-20), material and tutor ratings (RF-13, RF-17) and sorting (RF-14, RF-18).

7. Corrections to Previous Deliverables

7.1 Corrections to Deliverable 2

Corrections requested by the instructor on Deliverable 2, applied during Sprint 3.

Correction Where it is applied Responsible Status
Relational data model with data types and the intermediate table between TutorProfile and Subject 1.3 Data Model Gisel ✅ Done
Technology versions in the deployment diagram 1.1 Deployment Diagram Sebastián ✅ Done
Mockups of the Sprint 2 views 7.2 Mockups Sebastián, Gisel, Samuel ✅ Done — RF-03, RF-05/RF-06, RF-11 and RF-12 mockups documented
Pitch by a single member and 4–5 minute length 4. Video Sebastián ✅ Done — applied in the Sprint 3 video structure
Requirements with status, sprint, and responsible person Requirements Samuel, Sebastián ✅ Done
Weekly meetings answered individually, including 03/09/2026 Weekly Meetings Sebastián, Gisel, Samuel 🔄 Samuel completed; Sebastián/Gisel still need their individual answers
Sprint 1 and Sprint 2 retrospectives Retrospectives Sebastián, Gisel, Samuel ✅ Done — retrospectives documented
Course filter missing on the materials list; materials list without login Repository (branch fix/materials-list-filter) Gisel ✅ Done — PR #62
Traceability: RF-06 merged without a pull request; unified Git identities Repository (.mailmap, branch protection, comment on issue #7) Sebastián, Gisel 🔄 Partial — every Sprint 3 requirement entered main through a pull request (#62–#73); .mailmap and branch protection still pending

7.2 Mockups

Wireframes of the views where the Sprint 2 requirements are reflected. Each mockup answers: What? (main content groups), Where? (structure of the information), and How? (user interaction).

Edit Profile (RF-03)

Materials Mockup

  • What?

    • Global navigation bar at the top.
    • View header with the "Materials" title and a brief description.
    • Main text search bar.
    • Filter section with four dropdown menus and an action button.
    • Result cards displaying the study materials.
  • Where?

    • The navigation menu is located at the top margin, with the logo on the left and links on the right.
    • The title and instructions are in the top-left area of the main content section.
    • The search bar extends horizontally right below the descriptive text.
    • The filter selectors (University, Program, Course, and Topic) are aligned in a horizontal row alongside the "Filter" button.
    • Search results appear at the bottom organized in card format, showing the document title, author, format (e.g., PDF), rating, and the download button.
  • How?

    • The student can type directly into the search bar to find a material by its name.
    • The user can use the dropdown menus to narrow the search hierarchically (for example, exclusively selecting Universidad EAFIT, followed by their academic program, course, and specific topic).
    • The user clicks the yellow "Filter" button to apply the criteria and update the results.
    • The user reviews the materials and clicks the "Download" button on the corresponding card to download the file to their device.

Search and Filter Materials (RF-05, RF-06)

Study Material Mockup

  • What?

    • Global navigation bar at the top.
    • View header with the title "Study material" and a descriptive subtitle.
    • Primary action button labeled "Upload material".
    • Search and filter area containing a text input field, a course dropdown menu, a "Search" button, and a "Clear" option.
    • Dynamic text indicator showing the number of search results found.
    • Result cards displaying the study materials with labels for document type, title, course, university (Universidad EAFIT), uploader email, and an action button.
    • Footer containing the platform name and academic project details.
  • Where?

    • The navigation menu is horizontally aligned at the top edge of the screen.
    • The section title and its description are located in the top-left area of the main content section.
    • The "Upload material" button is positioned directly below the descriptive text on the left.
    • The search bar, course dropdown, and search controls are aligned horizontally on the right side, opposite the main title.
    • The results count message is placed centrally, just above the material cards.
    • The material result cards are arranged in a grid layout in the lower central area.
    • The footer is placed at the very bottom margin of the page.
  • How?

    • The student clicks the "Upload material" button to navigate to the resource submission form.
    • The user types keywords into the search input and selects a specific course from the dropdown menu to filter the content.
    • The user clicks the "Search" button to execute the query, which updates the view and displays a confirmation message with the active search parameters.
    • The user clicks the "Clear" text link next to the search button to reset all active filters.
    • The user clicks the "View Details" button on a specific card to access the full information of that particular document or exam.

Tutoring Request (RF-11)

This flow is composed of two main views: finding a tutor and filling out the request form.

Part 1: Find a Tutor View

Find a Tutor Mockup

  • What?

    • Global navigation bar at the top.
    • Header with the section label "TUTOR SEARCH", the main title "Find a tutor", and a brief description.
    • Search controls featuring a "Subject" dropdown menu and a "Search" button.
    • A result card displaying an approved tutor.
    • The tutor result card contains the tutor's email address ([email protected]), the subject they teach ("Calculo 3"), and a "Request tutoring" action button.
  • Where?

    • The navigation menu is horizontally aligned at the top edge of the screen.
    • The search form and results are enclosed within a large, centered dark card.
    • Inside the main container, the title and subtitle are located at the top left.
    • The subject dropdown and the "Search" button are horizontally aligned directly below the subtitle.
    • The tutor result card is nested inside the main container, positioned below the search controls.
    • Inside the result card, the tutor's email is aligned to the left, the subjects to the right, and the action button spans the bottom.
  • How?

    • The user interacts with the "Subject" dropdown menu to filter the list of tutors.
    • The user clicks the "Search" button to execute the query and display matching tutors.
    • The user clicks the "Request tutoring" button on a specific tutor's card to proceed to the session request form.

Part 2: Request Tutoring Form View

Request Tutoring Mockup

  • What?

    • Global navigation bar at the top.
    • Main container card for the tutoring request form.
    • Header featuring the label "TUTORING REQUEST", the title "Request tutoring", and text specifying the target tutor's email address[cite: 3].
    • Form fields including a "Subject" dropdown, a "Preferred date and time" picker, a "Tutoring mode" dropdown, and a "Message for the tutor" text area.
    • Primary action button labeled "Send request".
  • Where?

    • The global navigation menu remains at the top margin.
    • The entire form is enclosed in a dark container centered on the screen.
    • The titles and target tutor information are located at the top of the container.
    • The input fields (Subject, Date/Time, Mode, Message) are arranged vertically below the header text.
    • The "Send request" button is located at the bottom left of the form area.
  • How?

    • The student uses the "Subject" dropdown to select the specific class they need help with.
    • The student interacts with the date and time picker inputs to set their preferred schedule for the session.
    • The student selects the "Tutoring mode" from the provided dropdown list.
    • The student types specific details or questions in the "Message for the tutor" text box.
    • The student clicks the yellow "Send request" button to submit the application to the selected tutor.

Part 3: My Requests View (Confirmation)

My Requests Mockup

  • What?

    • Global navigation bar at the top.
    • Header featuring the section label "MY TUTORING REQUESTS" and the main title "My requests".
    • System feedback message confirming the successful submission: "Tutoring request sent successfully. Your request is waiting for the tutor's response."
    • A list of request cards displaying the details of the student's tutoring requests.
    • Each card contains the subject ("Calculo 3"), the target tutor's email, date and time, tutoring mode, current status ("Pending"), and the attached message.
  • Where?

    • The global navigation menu remains at the top margin.
    • The title and success message are located at the top of the main central container.
    • The request cards are vertically stacked below the success message within the container.
    • Inside each card, the session details are organized into a two-column grid layout.
  • How?

    • Upon submitting a request, the student is automatically redirected to this view to see the confirmation message.
    • The student reviews the details of their submitted requests and verifies that the status is set to "Pending" while awaiting the tutor's response.

Incoming Requests — Accept or Reject (RF-12)

Incoming Requests Mockup

  • What?

    • Global navigation bar at the top.
    • Header with the section label "TUTORING REQUESTS", the main title "Incoming requests", and a brief descriptive subtitle.
    • A detailed request card displaying information about a pending tutoring session.
    • The card data includes the subject ("Calculo 3"), the requesting student's email, date and time, tutoring mode, current status ("Pending"), and a specific message from the student.
    • Action buttons to respond to the request, labeled "Accept" and "Reject".
  • Where?

    • The navigation menu is positioned horizontally at the top edge of the screen.
    • The main title and description are located in the top-left area of the main content container.
    • The pending request card is placed centrally below the header text.
    • Inside the card, the session details are organized into a two-column layout.
    • The "Accept" and "Reject" buttons are vertically stacked in the bottom-left corner of the request card.
  • How?

    • The tutor reviews the session details, schedule, and student message directly on the card.
    • The tutor clicks the primary yellow "Accept" button to approve the tutoring session.
    • Alternatively, the tutor clicks the secondary "Reject" button to decline the student's request.

7.3 Pending Corrections to Deliverable 1

Corrections from the instructor's feedback on Deliverable 1 that remained open.

✅ DONE (SAM-1 — Samuel): functional requirements were rewritten in the requested template structure on Requirements, each with a validation criterion and the correct MoSCoW keyword (SHALL / SHOULD / COULD / WON'T). RF-21 to RF-33 were converted from user-story wording and RF-26 now uses COULD.

✅ DONE (SAM-1 — Samuel): non-functional requirements were rewritten on Requirements using objective wording and explicit verification criteria. Subjective expressions and the negative password-storage statement were removed.

Frequency of use of the logical database requirements (item "b) Frequency of use" of the template, missing in Deliverable 1):

Requirement Write frequency Read frequency
DBR-01 — Unique institutional email Once per account, at registration On every login and on every authenticated request (session user lookup)
DBR-02 — University-Program hierarchy Rarely: catalogs maintained by the administrator Every time the registration or profile form is displayed
DBR-03 — Material classification domain Once per uploaded material Every time the catalog, a material card or a material detail is displayed
DBR-04 — Material-Course-University association Once per uploaded material On every catalog search, course filter and material detail view
DBR-05 — Tutor profile uniqueness Once per user who registers as a tutor On every page load for authenticated users (navbar options) and in tutoring views
DBR-06 — Tutor-Subject relationship When a tutor registers On every tutor search, tutor profile and tutoring request form
DBR-07 — Tutor approval status Once per tutor, when the administrator approves the profile On every tutor search (only approved tutors are listed)
DBR-08 — Uploaded file retention Once per uploaded material Every time a material is opened or downloaded

✅ DONE (SAM-2 — Samuel; shared with GIS-5): Requirements now includes Purpose, Scope, Definitions, References, External Interfaces, Performance Requirements and Design Constraints.

⚠️ **GitHub.com Fallback** ⚠️