Skip to content

MVP Report D6‐D7

Mehmet Bora Sarioglu edited this page Apr 11, 2026 · 20 revisions

CMPE354 MVP Milestone Deliverables — D6 & D7


D6. Milestone Review

D6.1 Project Status

Summary and decisions:

The MVP milestone covers the core mentorship platform features across three platforms: backend (Spring Boot), web frontend (React), and mobile application (React Native / Expo). The system is fully deployed on a production server with Docker, and the mobile app is distributed as an APK via GitHub Releases with automatic CI builds through GitHub Actions.

Key architectural decisions made during this milestone:

  • Role-based access control implemented for mentor and mentee roles across all platforms
  • JWT-based authentication shared between web and mobile clients
  • Real-time cross-platform notification system (mentor receives notification when mentee sends a request)
  • Client-side pagination on mobile mentor listing; server-side pagination on backend endpoints
  • Mentor capacity management (maxMenteeCapacity) enforced at backend level

Summary of customer feedback and reflections:

Customer feedback was received during the MVP demo presentation. The instructor observed the full web and mobile demo without interruption, asking targeted questions at transition points.

Positive feedback:

  • The Explore and matching features on the web were well-received; the instructor took notes during this section
  • The mobile application received strong overall praise ("Good design on app"), particularly the Mentor Profile & Availability and Mentorships & Messages sections

Constructive feedback and questions:

  • "How does the recommendation work, based on what?" — The current matching algorithm (field/interest-based filtering) was explained. The instructor acknowledged it is sufficient for MVP but noted improvement is expected for the final milestone
  • "Mentor track mentee improvement? Key events, milestones" — The instructor emphasized the importance of the mentor being able to track the mentee's progress through milestones and objectives, not just duration
  • "Duration of mentorship — addition to duration + meaningful milestones/objectives" — Mentorship should be defined by both time and goal-based milestones
  • "Mode switch on web: Integration of everything between web and app completed?" — Integration status was discussed; some mobile screens (messages, file upload) are currently static/not API-connected
  • The cover letter text in mentorship request submission could be improved from a UX perspective

Reflections:

  • The recommendation/matching algorithm is the highest priority improvement area for the final milestone
  • Mentor-mentee progress tracking (milestones, key events) needs to be designed and implemented
  • Mentor-mentor interaction is worth considering as a feature for the final milestone
  • Full API integration of messaging and file upload on mobile is pending

D6.2 Deliverables

Deliverable Status Notes
User registration & login (web + mobile) Completed JWT auth, role selection
Mentor profile setup & editing Completed Field, bio, expertise, capacity, availability
Mentee profile setup & editing Completed Goals, skills, career interest, visibility
Mentor explore page (web) Completed Filter by field, matching score
Mentee explore / find mentor (mobile) Completed Paginated list, availability badge
Send mentorship request Completed Cover letter, mentor receives notification
Accept / reject mentorship request Completed Cross-platform, real-time
Notifications system Completed Unread badge, mark-as-read, mark all read
Active mentorships view Completed Mentor and mentee dashboards
Availability scheduling (mobile) Completed Slot-based calendar
Recommendation / matching algorithm In Progress Basic for MVP; improvement planned for final milestone
Messaging & file upload (mobile) In Progress UI complete, API integration pending
Mentor-mentee milestone tracking Not Started Planned for final milestone
Mentor-mentor interaction Not Started Under consideration for final milestone

Reflection: The core mentorship lifecycle (register → find mentor → request → accept → active mentorship) is fully implemented and functional across web and mobile. Features highlighted as priorities by the instructor (matching algorithm, progress tracking) are identified for the next milestone.

UX Design notes: The mobile application received positive feedback for its design. Role-based UI (mentor vs mentee see different tabs, dashboards, and profile fields) was well-executed. The web platform's explore and matching UI was noted as a strong feature.

API Documentation: Backend API is documented via Swagger UI, accessible at http://167.71.44.71:8080/swagger-ui/index.html.


D6.3 Requirements

Requirements addressed in this milestone: 1.1.1 User Types

  • 1.1.1.1.1 Mentees can create and edit their profile (major, background, goals, career interest, skills, interests, meeting frequency preference, profile visibility)
  • 1.1.1.1.2 Mentees can specify their goals, interests, and background information
  • 1.1.1.1.3 Mentees can view matched mentor profiles on the Explore page
  • 1.1.1.1.4 Mentees can send mentorship requests to mentors with a cover letter message
  • 1.1.1.1.9 Mentees are limited to one active mentor at a time (enforced at backend level)
  • 1.1.1.1.10 Mentees can search for mentors using the explore page with field/interest-based filtering
  • 1.1.1.2.1 Mentors can create and edit their profile (field, bio, expertise, affiliation, mentoring goals, preferred mentee criteria, mentorship duration, max mentee capacity)
  • 1.1.1.2.2 Mentors can define mentoring goals and preferred mentee criteria
  • 1.1.1.2.3 Mentors can define their availability schedule (slot-based weekly calendar on mobile)
  • 1.1.1.2.4 Mentors are notified when a mentee sends a mentorship request
  • 1.1.1.2.5 Mentors can view candidate mentee profiles (background, goals, interests) before accepting
  • 1.1.1.2.6 Mentors can accept or reject mentorship requests
  • 1.1.1.2.11 Mentors can manage multiple mentees simultaneously (up to their defined max capacity)
  • 1.1.1.2.12 Mentors can set a mentorship duration

1.1.2 Matching System

  • 1.1.2.1 The system matches mentors and mentees based on interests, goals, availability overlap, and background
  • 1.1.2.2 Mentors are notified when a mentee sends a request
  • 1.1.2.3 Mentees are notified when a mentor accepts their request
  • 1.1.2.4 Mentors are not matched beyond their maximum mentee capacity
  • 1.1.2.5 The system notifies the user that the request was successfully submitted
  • 1.1.2.6 During the matching stage, the mentee's surname and profile photo are hidden from the mentor; only the first name is visible
  • 1.1.2.7 Mentees cannot search for or find other mentees

1.1.4 Scheduling

  • 1.1.4.1 Mentors can define weekly availability (slot-based calendar on mobile)

1.2.1 Notifications

  • 1.2.1.4 Notifications are only sent to relevant users

1.2.2 Profiles

  • 1.2.2.1 User profiles include background, goals, skills, and interests
  • 1.2.2.2 Profiles display mentoring preferences
  • 1.2.2.3 Users can control profile visibility (public/private toggle for mentees)

1.2.3 Sign-Up & Authentication

  • 1.2.3.1 Users register with real name, email, and password
  • 1.2.3.2 Email addresses are unique (enforced at backend)
  • 1.2.3.3 Passwords meet defined security criteria (validated by PasswordValidator)
  • 1.2.3.5 Users can log in using their registered email address and password
  • 1.2.3.6 The system verifies user credentials (email and password) during login
  • 1.2.3.7 The system displays an error message when invalid credentials are provided
  • 1.2.3.8 Users can log out of the system

2.1 Availability

  • 2.1.2 The system supports both web and mobile access

2.2 Security

  • 2.2.1 User passwords are stored as hashed in the database (BCrypt)

2.3 Performance

  • 2.3.1 Notifications are delivered within seconds of triggering events (event-driven architecture via NotificationEventPublisher)

Requirements not yet addressed (planned for final milestone):

  • 1.1.1.1.5–1.1.1.1.8, 1.1.1.1.11–1.1.1.1.13 — Messaging, task submission, feedback, meetings, rating, cancel, report
  • 1.1.1.2.7–1.1.1.2.10, 1.1.1.2.13–1.1.1.2.14 — Messaging, meetings, tasks, feedback, extend/end mentorship
  • 1.1.1.3 — Admin features
  • 1.1.3 — Messaging & Communication (UI exists on mobile, API not connected)
  • 1.1.4.2–1.1.4.6 — Recurring meetings, meeting notifications, rescheduling, auto-termination
  • 1.1.5 — Task & Progress Management
  • 1.2.1.1–1.2.1.3 — Push notifications (native)
  • 2.2.2–2.2.4 — Encryption, GDPR, temporary bans

D6.4 Testing

D6.4.1 Test Plan & Strategy

The general test plan and coverage can be read through this link

Here are the individual implementations for each development group.

Backend

Backend tests are organized with a three-layered strategy:

Technologies Used:

  • JUnit 5 (Jupiter), Mockito 5.17, Spring Boot Test, AssertJ, MockMvc

Test Layers:

Layer Purpose Annotation Test Count
Unit Tests (Service) Isolated business logic testing with mocked dependencies @ExtendWith(MockitoExtension.class) 122 tests / 9 classes
Controller Tests HTTP endpoint testing via MockMvc, including security filters @WebMvcTest 111 tests / 8 classes
Integration Tests End-to-end testing with a real database (PostgreSQL 16) @SpringBootTest + @ActiveProfiles("test") 120 tests / 9 classes
Validation Tests Input validation rule testing @ExtendWith(MockitoExtension.class) 8 tests / 1 class

Total: 27 test classes, 341 test methods

CI/CD Integration:

  • GitHub Actions workflow (backend-ci.yml) runs mvn --batch-mode verify on every push/PR
  • A PostgreSQL 16 service container (port 5433) is automatically spun up for integration tests
  • If tests fail, Docker build and deploy steps are blocked

Test Files:

Service (Unit) Tests:

Controller Tests:

Integration Tests:

Validation Tests:

Web Frontend

Technologies Used:

  • Vitest, React Testing Library (@testing-library/react), @testing-library/user-event, jsdom

Test Strategy:

Web frontend tests focus on two layers:

Layer Purpose Tools Test Count
Service / API Unit Tests Verify each api.js function calls the correct endpoint URL, HTTP method, headers, and request body; verify error handling and fallback behaviour Vitest + vi.fn() fetch mocks 24 tests / 2 files
Component Tests Render components with mocked API and auth context; assert correct UI states, user interactions, and conditional rendering Vitest + React Testing Library 26 tests / 3 files

Total: 5 test files, 50 test methods

CI/CD Integration:

  • GitHub Actions workflow (.github/workflows/web_ci.yml) runs npm ci, vitest run, and vite build on every push/PR to main and dev
  • Test failures block the build step

Test Files:

Service / API Unit Tests:

  • auth.test.js — 19 tests: registerUser, loginUser, forgotPassword, resetPassword, verifyEmail (including special-character token encoding), resendVerification, validateResetToken, and handleResponse error fallbacks (error field, non-JSON body)
  • api.test.js — 5 tests: getMatchingMentors (with and without keyword), getAllMentors, getSentMentorshipRequests, createMentorshipRequest — verifying correct endpoints (/api/matching/mentors/all, /api/users/mentors/all) and Authorization header

Component Tests:

  • RequestMentorshipModal.test.jsx — 10 tests: visibility toggle, mentor name display, submit/loading/character-limit disabled states, trimmed message submission, Escape key and overlay click to close, error prop display, character counter
  • HomePage.test.jsx — 8 tests: role-based rendering (MENTOR dashboard vs MENTEE find-mentor prompt), mentor stats row, pending request display, active mentee display, active mentor hero card, section exclusion per role
  • ExplorePage.test.jsx — 8 tests: MENTOR view (Find Mentees, no Send Request), loading state, at-capacity button, already-sent button, active-mentor banner with disabled buttons, full send-request flow (modal open → submit → toast + UI update), keyword search filter, chip filter.

Mobile

Mobile testing was performed manually on Android emulator and physical devices via Expo Go.

Technologies Used:

  • GitHub Actions (CI pipeline)
  • TypeScript Compiler (tsc)
  • ESLint
  • Expo Doctor
  • Android Emulator, physical device via Expo Go

CI Pipeline (mobile-ci.yml):

Runs automatically on every push and pull request to dev or main that includes changes under mobile-app/**. Steps:

Step Tool Purpose
Expo doctor npx expo-doctor Validates Expo project config and dependency compatibility
Type check npx tsc --noEmit Catches TypeScript type errors across all screens and components
Lint npm run lint Enforces code style and catches common mistakes
Unit tests npm run test:unit Runs unit test suite
Integration tests npm run test:integration Runs integration test suite

Any failure in these steps blocks the build. This pipeline ensures type safety and code quality on every commit.

APK Build Pipeline (mobile-build-apk.yml):

A separate workflow runs expo prebuild --platform android followed by ./gradlew assembleDebug to compile a release APK on every push to dev or main. The APK is uploaded as a build artifact and the latest stable version is published to GitHub Releases.

Manual End-to-End Testing:

Core user flows were also manually verified on Android emulator and physical device:

Flow Result
Register as mentor / mentee
Login and role-based navigation
Mentor profile update (all fields)
Mentee profile update (all fields)
Mentor discovery with pagination
Send mentorship request with message
Accept / reject request (mentor side)
Notifications: unread badge, mark as read, mark all read
Availability scheduling
Profile photo upload
Logout and session clearing

D6.4.2 Test Execution Reports

Backend API:

  • Test Results Summary: Total 391, Pass 391, Fail 0, Skip 0.
  • Test Environment and Tools: Executed locally with Maven Surefire (mvn verify) using JUnit 5,
    Mockito, Spring Boot Test, and MockMvc against a PostgreSQL 16 service container for integration tests; additionally validated in GitHub Actions via the backend-ci workflow. Full report: combined Surefire XML report.
  • Execution Time: 41.41s.

Web App:

  • Test Results Summary: Total 51, Pass 51, Fail 0, Skip 0.
  • Test Environment and Tools: Executed locally with Vitest (npm test) using jsdom, React Testing Library, and @testing-library/user-event; additionally validated in GitHub Actions via the web-ci workflow.
  • Full report: JUnit XML Report
  • Execution Time: 8.07s

Mobile App:

  • Mobile App: No automated test report — CI pipeline validates TypeScript compilation, Expo config, and lint on every push. Manual E2E results documented in D6.4.1.

D6.4.3 Impact Analysis

Coverage:

Backend:

  • 9 backend modules fully covered by tests: Auth, Profile, Matching, Mentorship, MentorshipRequest, Availability, MenteeAvailability, Notification, PhotoUpload
  • Each module has a unit + controller + integration test trio
  • Most extensively tested modules: Profile (84 tests), Matching (72 tests), Auth (62 tests)

Web Frontend:

  • 5 test files, 50 test methods covering auth API layer, mentorship API functions, and 3 key components (RequestMentorshipModal, HomePage, ExplorePage)
  • Auth layer fully covered: all 7 auth functions tested for correct endpoint, method, body, and error handling
  • Role-based rendering covered: MENTOR and MENTEE dashboard variants tested in isolation
  • Critical UI states covered: capacity enforcement, duplicate request prevention, active-mentor banner, send-request flow end-to-end

Mobile:

  • Manual coverage of all core user flows for both mentor and mentee roles

Bug Detection:

  1. Security vulnerability (PR #174): Backend tests revealed that POST /api/users/mentors and POST /api/users/mentees endpoints allowed user creation without email verification or password hashing — endpoints were removed
  2. JWT token bug (PR #157): Integration tests detected that the JWT secret was not being read correctly from environment variables in the Docker environment — fixed
  3. Profile save 403 error: Manual mobile testing detected that PATCH /users/me was returning 403; fixed by switching to role-specific endpoints PATCH /users/me/mentor and PATCH /users/me/mentee
  4. Mentor notification missing: Manual integration testing detected that mentors were not receiving notifications when a mentee sent a request; fixed by adding notificationEventPublisher call in MentorshipRequestService.createRequest()

Readiness: The backend test infrastructure is production-ready for the MVP. All 341 backend tests pass successfully and run automatically on every push/PR via CI/CD, with deployment blocked on test failure. Mobile core flows are manually verified. Automated mobile testing is planned for the final milestone.


D6.5 Planning and Team Process

1. Description of Team Organization and Management

Our team is organized into three functional sub-teams — Backend (Spring Boot), Frontend/Web (React), and Mobile (React Native / Expo) — with one member additionally owning DevOps and infrastructure. Members took on primary roles within their sub-team while staying aware of cross-team dependencies to avoid bottlenecks.

Work was broken down into GitHub Issues mapped to milestones (Pre-Release, MVP, Final). Issues were labeled by area (backend, web, mobile, DevOps, documentation) and assigned to team members. We held regular weekly online meetings to sync progress across sub-teams, resolve blockers, and assign upcoming tasks. Each meeting was documented on the project wiki with notes and action items.

Before coding phases, we used Use Case, Sequence, and Class diagrams to align sub-teams on data structures and API contracts before implementation began. This was especially important for agreeing on request/response DTOs between backend and frontend/mobile teams.

2. Evaluation of Processes

2.1 Team Meetings Weekly online meetings were held to synchronize sub-teams. Meetings covered progress review, architectural decisions (e.g. role-specific profile endpoints, pagination strategy, notification event model), and task distribution. All meetings were documented on the project wiki.

2.2 Issue Tracking and Pull Requests All work was tracked via GitHub Issues with labels and milestone assignments. Every PR was tied to an issue. PRs required review before merging to main. The dev branch was used for integration; feature branches were cut from dev.

Process change: Early in the milestone, some backend API contract changes (pagination, role-split endpoints, enum formats) were not communicated in time, causing breakage on web and mobile. We tightened cross-team communication on API changes so frontend/mobile could adapt immediately.

2.3 DevOps and Environment Standardization Production deployment was set up on a DigitalOcean droplet with Docker Compose. An .env.example file was maintained to keep environment variables synchronized across developers. GitHub Actions CI/CD pipelines were added for backend, web, and mobile to run tests and block merges on failure. Auto-deploy to production on push to main was added mid-milestone.

3. Evaluation of Tools

GitHub (Issues, Projects, PRs): Central source of truth for all tasks. We used two project boards — a Roadmap for milestone-level planning and a Kanban Board for sprint-level task tracking. Labels and milestone tags on every issue maintained traceability.

Docker & Docker Compose: Used for both local development and production deployment. A shared docker-compose.yml ensured all developers ran identical service configurations. docker-compose.prod.yml handled the production environment with externalized secrets.

Swagger / OpenAPI: Backend API was documented with Swagger from the start, accessible at the production server. This allowed frontend and mobile developers to explore and test endpoints without reading backend source code, eliminating the need for manual Postman collections.

GitHub Actions (CI/CD): Separate workflows for backend (backend-ci.yml), web (web_ci.yml), and mobile (mobile-ci.yml) run tests and builds on every push/PR. The backend CI also provisions a PostgreSQL service container for integration tests. A deployment workflow (deploy.yml) auto-deploys to production on push to main.

PlantUML: Used for designing and iterating on UML diagrams (Use Case, Sequence, Class). Diagrams were committed to the repo and embedded in the wiki, serving as a shared reference during implementation.

WhatsApp: Used for instant communication and urgent coordination — flagging breaking changes, unblocking teammates, and coordinating task handoffs when GitHub notifications were insufficient.

4. Links and Documentation

Project board screenshots below.

Backend

Backend-Roadmap-1 Backend-Roadmap-2

Web

Web-Roadmap

DevOps

DevOps-Roadmap

Mobile

Mobile-Roadmap

Communication (wp group)

Screenshot from 2026-04-11 21-11-34

D7. Individual Contributions

Beratcan Doğan (Backend)

Responsibilities: Backend development, authentication & security infrastructure, mentor matching algorithm, email services, production deployment configuration, DevOps (assisted LifelongWay with deployment setup), and PR reviews across backend/web PRs.

Main Contributions:

  • Designed and implemented the JWT-based authentication and role management system (Mentor/Mentee)
  • Built the mentor matching algorithm with weighted scoring (interests, skills, major, goals, availability overlap)
  • Implemented email verification and password reset flows using Resend API
  • Prepared the backend for production deployment (Spring profiles, Docker Compose prod config, CORS, environment variables)
  • Fixed critical security vulnerabilities and Docker/JWT bugs

Significant Issues:

Code-Related:

  1. Issue #86: Implemented backend authentication & roles — JWT token generation/verification, user registration/login endpoints, Mentor/Mentee role assignment
  2. Issue #102: Built the mentor matching API — weighted scoring algorithm considering interests (+3), skills (+3), major match (+5/+3), goals (+2), availability overlap (max +12); includes keyword filtering and capacity checks
  3. Issue #197: Prepared backend configuration for production deployment — production Spring profile, Docker Compose prod setup, CORS restrictions, externalized credentials, disabled Swagger in prod

Non-Code-Related:

  1. Issue #34: Created initial Use Case Diagram (Scenario 1) — analyzed the new mentee user scenario and produced a UML Use Case diagram for the wiki
  2. Issue #52: Created UML Sequence Diagram for the Login Use-Case — illustrated interactions between user, login interface, authentication service, and database
  3. Issue #119: Environment variable management & deployment environments — set up Spring profiles (dev/staging/prod), .env.example template, externalized secrets

Pull Requests:

  1. PR #173: Mentor matching algorithm implementation — scoring system, keyword filtering, capacity management, privacy controls. Conflict resolved by mehmetborasarioglu (rebased onto latest dev, removed duplicate matching code)
  2. PR #158: Email verification system for new registered users — token-based verification flow with Resend API integration
  3. PR #160: Password reset feature — email-based token generation and secure credential recovery
  4. PR #174: Security fix — removed unsafe user creation endpoints (POST /api/users/mentors, POST /api/users/mentees) that bypassed email verification and password hashing. Conflict resolved by mehmetborasarioglu (rebased, removed duplicate V4 Flyway migration)
  5. PR #199: Production deployment configurations — application-prod.properties, docker-compose.prod.yml, .env.production.example, CORS fix
  6. PR #157: Docker JWT token bug fix
  7. PR #214: Production ready release — merged dev into main (210 commits)
  8. PR #65: Lab 5 stub app — Random Joke Generator button with Dockerfile

Unit Tests:

Additional Information:

  • Collaborated with mehmetborasarioglu on the initial auth system through live coding sessions
  • Collaborated with LifelongWay (Amin) on environment variable management and deployment setup, assisted with DevOps configurations
  • Actively reviewed and approved numerous PRs across backend and web subgroups (e.g., PR #221, #223, #225, and others), ensuring code quality and consistency before merges
  • Addressed code review feedback on PR #173: fixed foreign key reference, resolved N+1 query issue with JOIN FETCH, improved stopword filtering, and corrected exception semantics

İbrahim Kayan (Backend)

Responsibilities

Backend feature development, notification infrastructure, matching algorithm improvements, API documentation, DevOps/container setup, and contribution to project documentation and milestone reporting.

Main Contributions

  • Implemented the backend notification infrastructure with persistence, event-driven triggering, and user-facing notification APIs.
  • Extended the mentor matching algorithm with mentee-mentor availability overlap scoring to improve recommendation quality.
  • Added mentor in-app notification triggering on mentorship request creation.
  • Integrated Swagger/OpenAPI documentation with JWT authorization support in Swagger UI.
  • Improved development and deployment readiness through Docker Compose dev stack enhancements, health checks, MailHog integration, and environment-based configuration.
  • Implemented structured logging with request tracing (SLF4J + Logback) for better observability across environments.

Significant Issues

Code-Related

  1. Issue #207: Enhanced the mentor matching algorithm by adding mentee-mentor availability overlap scoring to improve practical recommendation quality.
  2. Issue #108: Implemented the core notification triggering infrastructure, including notification domain and persistence setup and backend APIs for retrieval and read-state updates.
  3. Issue #106: Improved the Docker Compose-based development stack with service health checks, MailHog integration, persistent Postgres volume, and environment-driven configuration.

Non-Code-Related

  1. Issue #230: Contributed to finalization and consolidation of the MVP milestone report on the project wiki.
  2. Issue #163: Contributed to MVP demo planning and structuring of presentation flow and deliverables.
  3. Issue #83: Improved the Mentorship Management sequence diagram by refining interaction flow and UML consistency.

Pull Requests

  1. PR #221: Notify mentor when mentee creates mentorship request; added REQUEST_RECEIVED notification flow and related service-level test updates.
  2. PR #208: Added availability overlap scoring to the matching algorithm; included availability management and related matching and authorization updates.
  3. PR #195: Added structured logging configuration with request tracing and profile-based logging strategy.
  4. PR #191: Implemented notification triggering infrastructure, notification persistence model, and notification APIs.
  5. PR #154: Improved Docker Compose dev stack with Postgres persistence, MailHog, health checks, and environment management.
  6. PR #152: Integrated Swagger/OpenAPI docs with JWT bearer auth support in Swagger UI.
  7. PR #68: Implemented assigned lab feature and Dockerization work for the stub app phase.

Additional Information

  • Expanded backend test coverage for notification flows (creation, retrieval, read-state transitions) while implementing the notification infrastructure in PR #191.
  • Added and updated matching and availability test scenarios in PR #208, including overlap-based ranking behavior and authorization-related edge cases.
  • Updated service-level tests in PR #221 to verify mentor notification publication on mentorship request creation and protect against regression in existing request flows.
  • Verified backend test-suite stability during PR integration and merge operations for PR #176 and PR #177, including conflict resolution validation.
  • Reviewed and merged multiple teammate PRs, including PR #176, PR #177, PR #185, PR #186, and PR #212, helping maintain MVP delivery pace and codebase consistency.
  • Resolved integration conflicts during merge workflows (notably while merging PR #177 after PR #176), including clean GlobalExceptionHandler conflict resolution and correction of Spring Data repository method naming for mentee and mentor ID traversal.
  • Performed technical review checks before merge (requirements coverage, role and authorization behavior, regression risk, and test-suite status) to ensure production-safe backend integration.

Burak Ögüt (2021400168) — Mobile

Responsibilities:

  • Mobile application development (React Native / Expo)
  • Backend integration and API connectivity for all mobile screens
  • CI/CD pipeline for automated mobile APK build

Main Contributions:

  • Initialized the React Native Expo project from scratch and implemented core MVP features including authentication, splash screen, role-based dashboard, mentor/mentee constraints, and request management
  • Integrated all screens with the production backend using Axios with JWT interceptor
  • Implemented notifications screen with unread badge, mark-as-read, pull-to-refresh, and real-time notification count on home screen
  • Replaced mentor Explore tab with Mentee Requests tab showing incoming pending requests with accept/reject flow
  • Extended mentor and mentee profile screens with role-specific fields and correct PATCH endpoints
  • Added client-side pagination (5 per page) to mentee mentor listing, then handled backend paginated response format
  • Set up GitHub Actions CI workflow for automatic APK build on push to dev/main
  • Fixed TypeScript CI errors by removing deprecated tsconfig options and converting all path aliases to relative imports across 7 files

Significant Issues (Top 3 per category):

Code-Related:

  • Issue #155: Implemented core mobile MVP features — role-based navigation (mentor/mentee see different tabs and dashboards), secure authentication with JWT + SecureStore, mentor discovery with pagination, notifications screen with unread badge, and Mentee Requests tab for mentor side
  • Issue #155: Connected all mobile screens to production backend (http://167.71.44.71:8080/api); fixed 403 errors on profile save by switching to role-specific endpoints (PATCH /users/me/mentor, PATCH /users/me/mentee); extended mentor and mentee profile forms with new fields
  • Issue #155: Set up GitHub Actions CI pipeline for automatic APK build (mobile-build-apk.yml); fixed TypeScript CI errors by removing deprecated tsconfig options and converting all @/ path aliases to relative imports across 7 files

Non-Code-Related:

  • Issue #155: Identified that backend was not sending notifications to mentors when a mentee sends a request — diagnosed the missing notificationEventPublisher call in MentorshipRequestService and relayed to backend team for fix (resolved in PR #221)
  • Issue #155: Identified that backend pagination change broke the mobile mentor listing — immediately diagnosed and fixed (res.data.content ?? res.data) and coordinated merge with team to keep dev branch stable

Pull Requests:

  • PR #153: Initialize mobile app — React Native Expo project setup with MVP features (auth, splash screen, role-based dashboard, mentor constraints, request management)
  • PR #165: Fix mobile login screen and CI issues — login/register backend integration, explore tab fix, API client setup
  • PR #232: feat(mobile): notifications screen, production server connection, unread badge on home, Mentee Requests tab, extended profile fields, GitHub Actions APK CI, layout and SecureStore fixes
  • PR #234: fix(mobile): handle paginated response from /users/mentors

Tests:

  • Manual end-to-end testing of all mobile flows (login, profile update, explore, send request, accept/reject, notifications, availability)

Additional Information:

  • Coordinated with backend team to fix mentor notification on request creation
  • All mobile screens registered in _layout.tsx with headerShown: false to prevent double header rendering issue
  • APK successfully built via GitHub Actions and published as GitHub Release (mvp-milestone) for MVP submission
  • Identified and relayed to backend team: Expo Push API not integrated despite deviceToken field existing — native push notifications pending for final milestone

Mehmet Bora Sarıoğlu (Backend)

Responsibilities: Backend feature development (profile, matching, mentorship request, mentorship lifecycle, availability, file upload), security hardening, CI/CD setup, backend test suite, UML diagrams (initial + MVP), lab session organization, and lab feedback planning.

Main Contributions:

  • Built the Profile CRUD layer: GET/PATCH /api/users/me, role-specific PATCH /api/users/me/mentor and /api/users/me/mentee, sealed ProfileResponse hierarchy, and GlobalExceptionHandler for structured errors
  • Implemented the mentee candidate viewing endpoint (GET /api/matching/mentees) with preference filtering, capacity checks, and privacy controls (first-name-only, no photo)
  • Implemented mentorship request creation and listing with duplicate prevention (partial unique index), capacity enforcement, and paginated sent/received lists
  • Implemented mentorship accept/reject and active relationship management (/api/mentorship-requests/{id}/accept|reject, /api/mentorships, shared goal endpoint) with atomic side effects
  • Implemented mentor availability storage and retrieval with overlap detection, bulk replace, and @ValidTimeRange bean validator
  • Implemented profile photo upload (POST/DELETE /api/users/me/photo) with magic-byte verification, 5MB limit, UUID filenames, and transactional afterCommit file deletion
  • Added pagination to user list and matching endpoints (Page<T> responses, size clamping) and unpaginated /all variants for backward compatibility
  • Security hardening: IDOR fix on DELETE /api/users/{id}, input validation on auth DTOs, CORS config, custom auth exceptions returning correct HTTP status codes
  • Set up the backend CI/CD pipeline (GitHub Actions → ghcr.io) with Postgres service container for integration tests
  • Produced the MVP UML diagrams (class, use case, sequence) aligned with the implemented backend

Significant Issues:

Code-Related (by impact):

  1. Issue #105 — Mentorship lifecycle: accept/reject, active relationship creation, shared goal (MVP scope; extend/end/cancel/ban/rating deferred to final milestone)
  2. Issue #104 — Mentorship request creation and listing with capacity and duplicate checks
  3. Issue #101 — Profile CRUD endpoints (foundation for matching, requests, and lifecycle) with role-based access and structured error handling

Non-Code-Related:

  1. Issue #228 — MVP UML diagrams (class, use case, sequence)
  2. Issue #164 — Lab 7 report
  3. Issue #76 — Fix class diagram: complete method signatures and missing classes

Pull Requests:

  1. PR #147 — Backend CI/CD pipeline (GitHub Actions → ghcr.io) with Postgres service container and initial auth test suite
  2. PR #159 — Profile CRUD endpoints, sealed ProfileResponse, GlobalExceptionHandler, mentee-to-mentee access restriction
  3. PR #176 — Mentee candidate viewing endpoint for mentors with privacy-safe DTO and keyword filtering
  4. PR #177 — Mentorship request creation and listing with duplicate and capacity enforcement
  5. PR #183 — Mentor availability storage and retrieval with overlap detection
  6. PR #184 — Correct HTTP status codes from auth endpoints via custom exceptions
  7. PR #185 — Mentorship accept/reject and active relationship management
  8. PR #186 — Security hardening (IDOR fix, input validation, CORS, Swagger cleanup)
  9. PR #206 — DTO inheritance refactor and role-specific profile endpoints
  10. PR #209 — Profile photo upload with FileStorageService and security validations
  11. PR #223 — Pagination on user list and matching endpoints
  12. PR #231 — Unpaginated /all endpoints for backward compatibility

Unit Tests:

Additional Information:

  • Set up the backend CI/CD pipeline on GitHub Actions with a Postgres 16 service container; test failures block Docker build and deploy
  • Resolved merge conflicts on teammates' PRs during integration
  • Reviewed PR #173 (mentor matching algorithm) and PR #214 (production ready release), and merged teammates' PRs throughout the milestone to maintain integration pace
  • Created the initial project class diagram (Issue #57, #47) and produced the MVP class, use case, and sequence diagrams (Issue #228); added source .puml files under diagrams/
  • Addressed Lab 4 feedback on the class and sequence diagrams — completed method signatures, added missing classes, and fixed the cancel-relationship/auto-tempban sequence diagram (Issues #75, #76, #78)
  • Integrated all sequence diagrams into the wiki page (Issue #60) and enhanced the final use case diagram (Issues #38, #46)
  • Organized and led weekly lab sessions and team meetings, planned follow-ups on lab feedback, and drafted the Lab 1, Lab 5, and Lab 7 reports (Issues #12, #63, #164) along with the MVP demo plan wiki page (Issue #163)
  • Contributed to requirements elicitation, scenario authoring, and requirements updates (Issues #9, #10, #14, #20, #24, #40, #48)

Övgü Su Afşar (Mobile)

Responsibilities: Mobile application development with React Native / Expo, mobile UI implementation, role-based mobile flows for mentors and mentees, profile and discovery screens, mentorship request screens, mobile authentication UI, mobile CI fixes, and mobile MVP polishing.

Main Contributions:

  • Initialized the mobile application structure with Expo Router, tab navigation, mobile asset structure, theme setup, and role-aware screen organization
  • Implemented the initial splash and onboarding flows for the mobile app
  • Built the mobile login and registration screens with form validation and backend API integration
  • Integrated secure token storage using Expo SecureStore for authenticated mobile sessions
  • Implemented role-aware mobile profile screens for mentees and mentors, including profile editing fields, interests/expertise chips, and avatar/profile image handling
  • Implemented mentor discovery screens for mentees and mentee suggestion screens for mentors
  • Implemented mobile mentorship request screens, including sent/pending requests, incoming mentor requests, active mentorship display, and navigation to candidate/profile views
  • Implemented mobile screens for availability scheduling, meetings/sessions, task tracking, notifications, messages, and active connection profiles
  • Added and refined mobile role-based UI behavior, including mentor/mentee labels, profile headers, request states, notification badge behavior, and splash/onboarding branding
  • Fixed mobile login screen style issues and CI-related lint/build problems
  • Helped stabilize mobile-backend integration by adapting screens to backend response formats and role-specific endpoints

Significant Issues:

Code-Related (by impact):

  1. Issue #96 — Implement profile screen with editing capabilities and avatar upload
  2. Issue #97 — Implement mentor discovery screen and mentee suggestion screen
  3. Issue #99 — Implement mentorship request screens and active mentorship list
  4. Issue #95 — Implement mobile registration and login screens with form validation
  5. Issue #178 — Mobile App Testing and CI Setup
  6. Issue #155 — Mobile MVP core feature implementation and UI/UX refinements

Non-Code-Related:

  1. Issue #57 — Class Diagram
  2. Issue #55 — UML Sequence Diagram about Reporting User
  3. Issue #51 — Explaining members' contribution
  4. Issue #24 — Creating requirements covering scenarios
  5. Issue #14 — Fixing elicitation questions
  6. Issue #5 — Create an individual Wiki page for Ovgu Su Afsar

Pull Requests:

  1. PR #153 — Mobile app initialized; added the initial Expo mobile app structure, navigation, core mobile screens, profile screen, discovery screens, request-related screens, and mobile CI workflow
  2. PR #165 — Fixed mobile login screen and CI issues; corrected login screen styles, onboarding lint issue, and mobile CI checks
  3. PR #69 — Feature/stub app Ovgu button; contributed to the early stub app implementation

Unit Tests / CI:

  • Contributed to mobile CI setup through the mobile workflow introduced with the mobile app initialization and later fixes
  • Helped ensure mobile project health by addressing lint/style issues that blocked CI checks
  • Worked on mobile-side integration stability by testing core flows manually against backend endpoints during MVP development
  • Mobile CI-related contribution is tracked under Issue #178 and PR #165

Additional Information:

  • Established the first complete mobile MVP skeleton under mobile-app/, including navigation layout, assets, Expo configuration, and major app screens
  • Implemented mobile screens that support the core end-to-end MVP journey: onboarding, authentication, profile management, mentor discovery, request handling, active mentorship tracking, availability scheduling, notifications, and task/session views
  • Worked on role-specific UX so that mentor and mentee users see different profile, discovery, request, and active mentorship states
  • Improved mobile visual consistency by refining profile headers, role labels, splash/onboarding logo usage, and notification badge behavior
  • Helped align the mobile client with backend API changes such as role-specific profile update endpoints, paginated mentor responses, mentorship request endpoints, and notification/read-all behavior
  • Contributed to early project documentation and analysis work, including requirements, elicitation questions, wiki contribution explanations, class diagram work, and a sequence diagram for the report-user/admin investigation flow
  • Participated in mobile MVP refinement under Issue #155, especially by iterating on UI/UX gaps found during manual testing and demo preparation

Muhammet Sami Çakmak (Frontend)

Responsibilities:

  • As a member of the Frontend Web team, my primary responsibility was developing the React-based user interfaces.
  • My scope included implementing the profile management, mentor discovery interfaces, mentorship request workflows, and the centralized dashboard layouts.

Main Contributions:

  • Built mentor discovery cards, mentee candidate lists, and the entire UI for sending, receiving, and managing mentorship requests.
  • Implemented robust authentication state management, resolving critical session loss issues upon page refresh and integrating secure manual logout functionality.
  • Refactored the data layer across the Explore and Mentorship Requests pages to seamlessly utilize and render actual backend profile data (background and interests).
  • Streamlined the user experience by consolidating Mentor Preferences directly into the main Profile page and resolved various UI/UX layout and routing inconsistencies across the application.
  • Delivered comprehensive unit test coverage for the frontend Mentorship Request flow to ensure UI reliability before the MVP release.

Significant Issues

Code-Related:

  • Issue #194: Implemented unit tests using Vitest for the mentorship request feature, covering API utility functions and UI components involved in the mentorship request flow.
  • Issue #116: Created reusable UI components that allow an authenticated mentee to send a mentorship request to a mentor via the backend API.
  • Issue #89: Built the detailed view (a dedicated page or a modal) that opens when a mentor clicks "View Details" on a specific request from their pending list. This interface will allow mentors to evaluate the candidate and respond.

Non-Code-Related:

  • Issue #230: Contributed to prepare MVP Report page and create the MVP pre-release page.
  • Issue #54: Created Sequence Diagram for the User Registration Use-Case that has the Sign Up flow allowing Unaccounted Users to create accounts and select a role (Mentor or Mentee).
  • Issue #29: Contributed to complete the visual mock-ups for Scenario 3 to cover the entire user journey.

Pull Requests:

  • PR #210: This PR addresses several UI/UX inconsistencies, fixes layout routing issues, and refactors the data layer to utilize actual profile data (background and interests) across the Explore and Mentorship Requests pages.
  • PR #204: This PR introduces a manual logout feature, allowing users to securely terminate their session via a new profile dropdown menu in the navigation bar.
  • PR #203: This PR resolves the issue where the user's session was lost upon refreshing the page (F5).
  • PR #201: This pull request introduces comprehensive unit test coverage for the Mentorship Request feature flow within the frontend module.
  • PR #189: Integrated the Mentor Preferences settings directly into the existing Profile page instead of creating a separate dashboard, providing a much smoother user experience. Additionally, resolved a minor UI inconsistency in the main layout.
  • PR #188: This PR implements the frontend UI for the mentorship request interface.

Tests

  • Testing the UI interactions and validations of the Mentorship Request Modal component (e.g., character limit restrictions, submit button states, modal visibility, and payload formatting) - Link to test file
  • Testing the API utility functions responsible for mentorship requests (verifying endpoint targets, HTTP methods, authorization header inclusion, and payload stringification for methods like createMentorshipRequest) - Link to test file

Additional Information

Beyond my core development and demo execution duties, I actively participated in our team's code review process by reviewing and merging my teammate's pull requests to ensure code quality and smooth integration. Furthermore, our team maintained high collaborative efficiency; for example, some of the PRs I opened to fix specific frontend bugs were ultimately closed without merging because my teammate proactively resolved those overlapping issues within their own parallel tasks. This close communication streamlined our workflow and prevented unnecessary merge conflicts.


Amin Abu-Hilga (Web & DevOps)

Responsibilities: Lead contributor of the React web frontend: architecture, all pages, routing, state management, and frontend-backend wiring. DevOps: production server provisioning (DigitalOcean droplet), Docker Compose deployment, domain configuration, and CD pipeline. Email delivery infrastructure (Resend API replacing MailHog for production). Keeping the frontend in sync with evolving backend API contracts (endpoint changes, DTO shape fixes).

Main Contributions:

  • Built the full web application: Auth flow (login, register, email verification, forgot/reset password), Home dashboard (mentor & mentee views), Profile page (view + edit), Explore/Discover page, Availability page, User Profile viewer, Messaging UI, and Notifications bell
  • Connected every page to real REST endpoints — auth, profile (PATCH /users/me/mentor|mentee), mentorship requests, notifications, matching, availability (GET|PUT /availability, /mentee-availability), user lookup (GET /users/:id)
  • CI/CD pipeline: GitHub Actions workflow that auto-deploys to production droplet on every push to main via SSH + Docker Compose (docker compose up --build -d)
  • Frontend CI: Vitest test suite + GitHub Actions pipeline running on every push/PR to main and dev
  • Profile photo upload: replaced URL input with device file upload using POST /api/users/me/photo (multipart)
  • Notifications system: real-time NotificationBell in navbar polling the backend, with unread badge and dropdown
  • Mentor home dashboard: wired pending mentorship requests, active mentees, stats, and accept/reject flow to real endpoints
  • Production email: swapped MailHog with Resend API so verification and password-reset emails work in production

Significant Issues:

Code-Related:

  1. Issue #213: Production Deployment Setup — configured DigitalOcean droplet, set up Docker Compose for all services, registered domain mymentornet.org, wrote the GitHub Actions auto-deploy workflow with SSH secrets.
  2. Issue #216: Web Notification System — implemented NotificationBell component with real API polling, unread count badge, per-notification read marking, and wired mentor/mentee notifications end-to-end.
  3. Issue #215: Mentorship Request & View Backend Wiring — connected mentorship request sending, listing, accept/reject flow, and candidate mentee viewing to real backend endpoints.
  4. Issue #205: Connect Profile Page to Backend — added getOwnProfile, updateOwnProfile, getUserById to api.js; extended AuthContext; fully rewired ProfilePage and fixed DTO field mismatches.
  5. Issue #226: Setting profile image with new endpoint — replaced URL text input with device file upload using POST /api/users/me/photo multipart endpoint.
  6. Issue #202: User Logout Functionality — implemented logout via profile dropdown menu with token clearing and session cleanup.
  7. Issue #198: Set up production email service — replaced MailHog with Resend API so verification and password-reset emails work in production.
  8. Issue #194: Unit Tests for Mentorship Request Feature — wrote Vitest unit tests covering the mentorship request flow.
  9. Issue #180: Auth Services Unit Testing — wrote unit tests for all auth API functions including error handling and token encoding.
  10. Issue #179: Auth Endpoints Wiring — wired all auth endpoints (verifyEmail, validateResetToken, forgotPassword, resendVerification, resetPassword) to the web frontend.
  11. Issue #161: Change frontend Docker ports — updated Docker Compose frontend port configuration for production vs local dev.
  12. Issue #148: Frontend Testing and CI Setup — initialized Vitest test suite and set up GitHub Actions CI pipeline for the frontend.
  13. Issue #119: Environment Variable Management & Deployment Environments — set up .env management and deployment environment configuration.
  14. Issue #118: Mentor Discovery Interface — built the Explore page with mentor cards, search, interest chip filters, and request flow.
  15. Issue #116: Mentorship Request Interface — added Send Request button and modal form on mentor cards for mentees to send requests.
  16. Issue #115: Incoming Mentorship Requests List Page — built the mentor-side incoming requests list with accept/reject flow.
  17. Issue #114: Discover / View Other Profiles — implemented the UserProfilePage with /profile/:id route for viewing other users' profiles.
  18. Issue #109: CI/CD Pipeline with GitHub Actions — set up the initial GitHub Actions workflows for web CI and CD.
  19. Issue #100: Edit Own Profile — implemented the profile edit form with role-specific fields, validation, and backend save.
  20. Issue #98: Own Profile View Interface — implemented the profile view panel with privacy indicators.
  21. Issue #93: Build availability calendar UI — implemented the interactive weekly schedule UI for availability slot selection.
  22. Issue #91: Mentor dashboard — implemented the mentor home dashboard with mentoring preferences and request management.
  23. Issue #87: Infrastructure & Scaffolding — set up the initial React project structure, routing, and base component architecture.
  24. Issue #85: Frontend Auth & Session Management — implemented JWT-based auth context, protected routes, and session persistence.

Non-Code-Related:

  1. Issue #163: MVP Demo Plan (Wiki Page) — authored the team wiki page documenting the full demo scenario, feature checklist, and presenter assignments.
  2. Issue #162: Lab 7 MVP Demo Planning — organized and contributed to the planning session for the MVP demo, coordinating across mobile, backend, and web subgroups.
  3. Issue #164: Lab 7 Report — contributed to the team lab report covering demo outcomes and individual contributions.

Pull Requests:

  1. PR #224: ci: auto-deploy to production droplet on push to main — adds GitHub Actions SSH deploy workflow; requires DEPLOY_HOST and DEPLOY_SSH_KEY secrets. Closes #213.
  2. PR #219: Web/notifications and mentorship requests — NotificationBell, mentor home dashboard (pending requests, active mentees, stats, duration picker), mentee home improvements (AI best-match button, active mentor hero card), Explore page mentor/mentee candidate views.
  3. PR #211: Profile system — backend connection — three new api.js functions, AuthContext extended with profile data, ProfilePage fully wired, UserProfilePage added with /profile/:id route.
  4. PR #181: Web/auth — wired 5 missing auth endpoints (verifyEmail, validateResetToken, forgotPassword, resendVerification, resetPassword), added email verification and password reset pages.
  5. PR #150: ci: add frontend CI pipeline with GitHub Actions.github/workflows/web_ci.yml running npm ci, vitest, and vite build on push/PR to main and dev. Closes #148.
  6. PR #172: Web/availability page — interactive weekly schedule UI with time slot selection; later fully connected to /availability and /mentee-availability endpoints in PR #235.
  7. PR #235: fix(web): update endpoint integrations and UI fixes — wired availability pages to real endpoints, split updateOwnProfile by role, added getUserById calls for profile photos, fixed day-of-week enum format (MONDAY etc.), handled Java LocalTime object format from API.
  8. PR #227: feat(web): replace profile photo URL input with device file uploadPOST/DELETE /api/users/me/photo integration, hidden file input, immediate preview. Closes #226.

Unit Tests:

Additional Information:

  • Major part of the web application — 8+ pages, routing, auth state, API layer, and styling — was built and maintained, keeping pace with a rapidly changing backend
  • Set up and maintained the live demo environment (mymentornet.org) including SSL, Docker networking, port configuration, and the automated deploy pipeline — critical for the team to demo a live product rather than a localhost setup
  • Acted as the point of contact between backend and web, catching and fixing breaking API contract changes (paginated responses, role-split endpoints, enum format mismatches, Java LocalTime serialization) that would have blocked the demo
  • The backend used MailHog (a local mail trap) which doesn't deliver real emails; replaced it with the Resend API so that email verification and password reset work in production — unblocking user registration for the live demo
Team Members

Lab Reports


Weekly Meetings


Customer Meetings


Stakeholder Meetings


Project Requirements


🎦 Scenarios and Mock-ups

Use Case Diagrams

Class Diagram

Sequence Diagrams

Test Plan and Coverage


Project Standards


Final Milestone and MVP Plan

MVP Report


Final Milestone Report

Per-Member Prompt Logs


Future Work

Clone this wiki locally