-
Notifications
You must be signed in to change notification settings - Fork 1
Customer Milestone 3 Report of CMPE 451 Fall 2025
This document is the complete Customer Milestone 3 report for Nutri Hub (Group 9) in the CMPE 451 Fall 2025 course. It provides the status of all deliverables, an executive review of the project, a summary of progress based on teamwork, the current state of requirements, API documentation, testing evidence, and deployment instructions. References to the project wiki and repository are cited throughout.
Deliverable Status
| Deliverable | Status |
|---|---|
| Weekly Reports | Weekly reports for each week and team member are catalogued in the wiki page. |
| Meeting Notes | Meeting notes with agendas and decisions are recorded in the wiki page. |
| Final SRS | The updated Software Requirements Specification (SRS) is available in the wiki under the “Requirements” page |
| Final Design | The final designs are finalized and placed in Use Case Diagrams, Class Diagrams, Sequence Diagrams |
| Deployed Web App | The web application is live at https://nutrihub.fit; the login page invites users to begin their journey toward healthier eating and links to the project’s GitHub and Android APK. |
| Mobile Release (APK) | A compiled Android package (.apk) is attached to the v1.0.0 GitHub release. |
Report Date: 21.12.2025, 17:00 Group Number: 9
-
Weekly Reports:
https://github.com/bounswe/bounswe2025group9/wiki/Weekly-Reports -
Meeting Notes:
https://github.com/bounswe/bounswe2025group9/wiki/Meeting-Notes
-
Final SRS:
The SRS enumerates all functional and non‑functional requirements. It includes the table of contents listing functional requirements such as User Profile Management, Recipe Management, Forum & Nutrition Tips, Meal Planner, Market, Account Management, Moderation, and Nutrition Tracking
-
Final Design (UML):
-
API Documentation:
The backend uses drf‑spectacular to generate OpenAPI 3.0 documentation. The live Swagger UI is available at
https://nutrihub.fit/api/docs -
Deployed Web Application:
The production deployment is at
https://nutrihub.fitfor the web and is containerised via Docker. Users can explore the food database, plan meals, compare foods, create posts, and track nutrition. -
Mobile Release (.apk):
The mobile application built with React Native offers the same core features; the
.apkis attached to the GitHub release.
1. Executive Summary: Nutri Hub successfully reached its 1.0.0 Official Release, delivering a full-stack nutrition-focused platform with food databases, meal planning, nutrition tracking, social interaction, and moderation workflows. All core system components are implemented, containerized, tested, and deployed.
2. Deliverable Status: All required deliverables are completed and committed either to the repository or the project wiki. The final software release is tagged, deployed, and validated through automated test suites.
3. Final Release Notes:
- Complete food database with nutrition scoring
- Meal planning with nutrition targets
- Daily nutrition tracking
- Social forum with reporting and moderation
- Accessibility improvements (WCAG 2.1)
- GDPR-compliant account deletion
- Stable API with OpenAPI documentation
4. Process Improvements:
After Milestone 2, the team implemented several process enhancements:
- Continuous integration and deployment (CI/CD): GitHub Actions pipelines perform linting, unit testing and build tasks on pull requests, ensuring early detection of issues.
- Modular architecture: The backend was refactored into smaller Django apps, and the frontend into reusable components, improving maintainability and enabling parallel development.
- Accessibility integration: ARIA labels, keyboard navigation and colour‑contrast fixes were incorporated across the UI, aligning with WCAG 2.1 recommendations.
- Retrospectives: Weekly retrospectives identified bottlenecks and informed process adjustments.
5. Final Demo Reflections: The final demo highlighted a unified product with strong community engagement features. Integrating micronutrient comparison and private food proposals provided tangible value. The combined meal planner and nutrition tracker simplified user workflows. Performance enhancements (caching and query optimisation) improved responsiveness. Cross‑platform consistency required extra coordination but resulted in a smoother user experience.
Lessons learned include the importance of early testing and accessibility planning, clear API contracts, and a modular codebase. Future work could focus on advanced analytics, recommendation systems, and deeper personalisation (e.g., dynamic nutrient targets, feed deduplication). Starting UX research earlier and adopting microservices sooner might have accelerated development.
6. What Could Have Been Done Differently:
- Earlier finalization of badge aggregation logic
- Earlier UI polish for advanced data visualizations
- Earlier stress testing of personalized feed logic
- Implementation of W3C standards for Recipe models
| Team Member | Contributions (Summary) | Major PRs / Issues |
|---|---|---|
| Akın, Yusuf | Private food entries backend, Nutrition (micro/macro) range filters (normalizing Micronutrients json field, scaling nutrient values to 100g), CI/CD workflows for deployment, and misc bug fixes | #778, #820, #790, #748, #747,Issue #798,Issue #815 |
| Başar, Nuri | Updated UML designs (Use Case, Class, Sequence) to reflect final implementation, Authored the Customer Milestone 3 report, Implemented hydration-aware nutrition scoring logic and UI integration | #877, #879, #799 |
| Bilsel, Fatih Furkan | Implemented food search and filtering, added Food Proposal Status feature, and developed private food UI with basic CRUD support | #773, #793, #809, #811, #819 |
| Bilen, Berkay | Backend API development, user deletion endpoint implementation, API documentation, recipe-related backend fixes, and milestone coordination | #787, #795, #805, #834, #822 |
| Damar, Mete | No contributions documented for this milestone | |
| Göktaş, Berk | What-If planning mode, dynamic warning system with selectable portion size, interactive food details in nutrition tracker, seed the DB with realistic recipes | #740, #788, #806, #812, #813, #823, #864, #869, #870, #871, #874 |
| Keleş, Hasancan | Identification and resolution of mobile UX issues, the implementation of multi-food search functionality in the forum, and the addition of micronutrient radar charts for food comparison. Overall usability, data visualization, and interface consistency across mobile and web platforms were improved, with multiple feature and UI enhancement | #863, #804, #866,#860, #824, #678, #662 |
| Küçük, Onur | Mobile nutrition tracking improvements, multilingual support with RTL handling, mobile-web synchronization, nutrition tracking navigation restructuring, W3C standards research and documentation | #855, #826, #839, #749, #827, #847, #857, #861 |
| Saygan, Arda | Led final milestone planning and demo scenarios, refactored recipe models for Schema.org compliance, improved ingredient unit UX, and identified missing W3C standards, end-to-end testing | #797, #749, #850, #800 |
| Yazıcı, Yusuf Anıl | Meal planner and nutrition tracking integration, allergen tagging migration, admin enhancements, bug fixes in food comparison and profile management, UI/UX improvements and food image dataset expansion | #849, #792, #729, #867, #725, #727, #868, #872 |
| Yüksel, Osman Selim | Private food feature implementation on mobile, nutrition tracking enhancements and synchronization fixes, UI/UX polish and bug fixes, feature parity with web, managing new deliverables and reviewing mobile PR's on MVP | #781, #841, #839, #784, #854, #873, #862 |
The following section reflects the implementation status of each requirement according to the final codebase. Requirement IDs correspond to those defined in the SRS.
- 1.1 Food Database: 1.1.1 (food entry listing and search), 1.1.2.1 (food details), 1.1.2.2 (food reviews), 1.1.3 (nutrition score), 1.1.4 (dietary options), 1.1.5 (price & budget), 1.1.7 (micronutrient analysis), 1.1.8 (serving definition), 1.1.9 (data entry).
- 1.2 User Profile Management: 1.2.1 (allergen tracking), 1.2.2 (personal information), 1.2.3 (account settings), 1.2.4 (password reset), 1.2.5 (profile photo upload), 1.2.6 (certificates & credentials), 1.2.9 (profession tags), 1.2.10 (certification display), 1.2.18 (user following), 1.2.19 (badges).
- 1.3 Recipe Management: 1.3.1 (recipe creation & editing), 1.3.4 (ingredient prices), 1.3.5 (cost estimation), 1.3.7 (nutrition score).
- 1.4 Forum & Nutrition Tips: 1.4.1 (post creation), 1.4.2 (commenting & tagging), 1.4.6 (interactions—likes & saves), 1.4.8 (reporting content), 1.4.10 (moderation actions).
- 1.5 Meal Planner: 1.5.1 (plan creation), 1.5.3 (automatic generation), 1.5.4 (plan saving), 1.5.5 (plan summaries & statistics).
- 1.7 Account Management: 1.7.1 – 1.7.6 (full authentication flow).
- 1.8 Moderation: 1.8.2 (role management), 1.8.4 (food approval), 1.8.6 (moderation dashboard), 1.8.10 (automated detection framework implemented).
- 1.9 Nutrition Tracking: 1.9.1 (logging nutrition), 1.9.2 (daily totals), 1.9.3 (targets), 1.9.5 (persistence across sessions).
- 1.1.6 Compare Food Items: The radar/spider chart integration exists for food comparisons, but the UI requires final polishing and minor improvements in semantics.
-
1.2.14 Impact Metrics: The
UserMetricsmodel stores metrics, but ensuring real‑time updates within a 60‑second window is still under validation. - 1.4.19 Personalised Feed: A basic feed merges posts and replies, but the logic to avoid duplicate content is still being refined.
- 1.2.15 Helped Count: Logic for a “This helped me” reaction on meal plans, separate from generic likes, has not been implemented.
-
1.2.16 Impact Summary Badge: A single badge summarising all user impact metrics is not yet defined in the
BADGE_RULESstructure.
- 1.6 Market: This functional requirement was removed from scope in SRS revision 1.1.0; no code was implemented for market or e‑commerce features.
- Live: https://nutrihub.fit/api/docs/
-
Local:
http://localhost:8000/api/docs/ -
Schema:
backend/schema.yml
Endpoint: POST /api/foods/manual-proposal/
Scenario Description: A user proposes a brand-new food item with detailed macronutrient and micronutrient data; the system accepts this as a proposal awaiting moderation.
Request:
curl -X POST "http://localhost:8000/api/foods/manual-proposal/" \
-H "Authorization: Bearer <your_access_token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Goji Berries (Dried)",
"category": "Fruit",
"servingSize": 30,
"caloriesPerServing": 105,
"proteinContent": 4.0,
"fatContent": 0.5,
"carbohydrateContent": 22.0,
"dietaryOptions": ["Vegan", "Gluten-free"],
"nutritionScore": 8.5,
"micronutrients": {
"Vitamin A (mg)": 2.5,
"Vitamin C (mg)": 14.0,
"Iron (mg)": 2.0
}
}'Response:
{
"id": 142,
"food_entry_id": null,
"name": "Goji Berries (Dried)",
"category": "Fruit",
"servingSize": 30.0,
"caloriesPerServing": 105.0,
"proteinContent": 4.0,
"fatContent": 0.5,
"carbohydrateContent": 22.0,
"dietaryOptions": ["Vegan", "Gluten-free"],
"nutritionScore": 8.5,
"imageUrl": "",
"micronutrients": {
"Vitamin A (mg)": 2.5,
"Vitamin C (mg)": 14.0,
"Iron (mg)": 2.0
},
"isApproved": false,
"createdAt": "2025-12-18T14:30:00.000Z",
"proposedBy": 5
}Endpoint: POST /api/foods/
Scenario Description: A user searches the food catalog for items high in iron and low in fat, sorted by best cost-to-nutrition ratio.
Request:
curl -X POST "http://localhost:8000/api/foods/" \
-H "Authorization: Bearer <your_access_token>" \
-H "Content-Type: application/json" \
-d '{
"category": "Vegetables",
"sort_by": "cost-nutrition-ratio",
"order": "asc",
"micronutrients": [
{ "Micronutrient": "Iron", "MinValue": [5.0], "PerHowmanyGrams": "100 gr" },
{ "Micronutrient": "Fat", "MaxValue": [1.0], "PerHowmanyGrams": "100 gr" }
]
}'Response:
[
{
"id": 856,
"name": "Spinach (Raw)",
"category": "Vegetables",
"nutritionScore": 9.2,
"base_price": "15.50",
"micronutrients": { "Iron (mg)": 2.71 }
}
]Endpoint: POST /api/meal-planner/saved-plans/from-log/
Scenario Description: A user converts today’s logged and planned food entries into a reusable saved meal plan.
Request:
curl -X POST "http://localhost:8000/api/meal-planner/saved-plans/from-log/" \
-H "Authorization: Bearer <your_access_token>" \
-H "Content-Type: application/json" \
-d '{
"name": "My Perfect Recovery Day",
"description": "High protein meal plan from Tuesday",
"date": "2025-12-18",
"include_logged": true,
"include_planned": true
}'Response:
{
"message": "Successfully created meal plan \"My Perfect Recovery Day\" with 4 entries.",
"meal_plan": {
"id": 27,
"name": "My Perfect Recovery Day",
"entries": [ { "meal_type": "breakfast" }, { "meal_type": "lunch" } ]
}
}-
Frontend Code: Source code for the web interface is located in the
frontend/directory of the repository. Components (frontend/src/components) implement responsive layouts, accessibility features (ARIA labels, contrast themes) and interactive elements such as the radar chart comparison. -
Mobile App Code: The mobile application resides in the
mobile/nutrihubdirectory and mirrors the web functionality. -
Screenshots:
-
- Food Comparison Screen with micronutrients
-
- Nutrition Tracking Screen unified with What-if Meal Planner feature
-
- Advanced Nutrient Filtering -
screen for private food adding in nutrition tracking (Mobile) -
"my private foods" menu in profile (Mobile)
After Milestone 2, the team improved keyboard navigation and screen reader compatibility. Interactive elements without text labels now use aria-label attributes (e.g., the dark/light mode toggle and search buttons).Colour contrast ratios were adjusted, ensuring readability for users with low vision. Alt‑text was added to images, and forms provide clear validation messages.
The system emphasises privacy by design. Account deletion triggers a cascade removal or anonymisation of user data, complying with GDPR principles (right to erasure). Moderation tools mitigate harmful content, and metrics tracking is aggregated to avoid individual profiling. Private food proposals are hidden until approved to prevent misinformation.
Nutri Hub follows several standards:
- WCAG 2.1 for accessibility (use of ARIA roles, contrast guidelines and keyboard navigation);
- GDPR principles for data privacy and account deletion;
- OpenAPI 3.0 for API specification;
- Bcrypt for password hashing and CSRF protection.
Evidence: Interactive controls in the React codebase (e.g., theme toggles, search buttons) specify aria-label attributes, enabling screen readers to convey actions to users. Form fields include descriptive labels and error messages. Navigation components use semantic HTML and appropriate landmarks.
Reasoning: By providing aria-label on icon‑only buttons, the interface meets WCAG 2.1 Success Criterion 1.1.1 (non‑text content) and 2.4.6 (headings and labels). Colour contrast ratios were adjusted to satisfy Success Criterion 1.4.3 (contrast minimum). These changes ensure that people using assistive technologies can navigate and understand the content.
Evidence: The backend introduces an AccountDeletionLog model to track account deletions and cascades data removal across recipes, posts and logs. User data is either deleted or anonymised to ensure no residual personal information remains. Services responsible for account deletion handle the cascade accordingly.
Reasoning: Implementing a deletion log and cascade removal aligns with GDPR requirements for the right to erasure. Data anonymisation prevents linkability of deleted accounts to stored content.
Evidence: The recipe JSON returned the endpont (backend/forum/views.py/recipe_schema_json_view) is identical to Schema.org except the ingredient list is a structured data. We have endpoints to convert the recipe database to schema.org compliant data.
Reasoning: Our recipe database should provide data for external use as well.
The repository ('reports/') contains machine‑readable (XML) and human‑readable (HTML) test reports generated during continuous integration. Separate reports exist for the backend API, web application and mobile application. The reports confirm that all tests pass, including regressions from earlier milestones.
To see the test suites for backend
open reports/backend/test-report.html
To see the test suites for frontend
cd frontend
npx vite preview --outDir ../reports/frontend/html --port 4174
To see the test suites for mobile
open reports/mobile/test-report.html
- Backend Unit Tests: New tests cover nutrition calculations, meal plan generation, food proposal submission and account deletion logic. They ensure that micronutrient comparisons handle custom units and that price thresholds update correctly.
-
Integration Tests: End‑to‑end tests simulate user flows such as creating a recipe, planning meals and deleting accounts. Selenium tests verify UI interactions for accessibility (e.g., correct
aria-labeluse) and data validation. - UI/UX Tests: Frontend tests check responsive layouts, dark/light mode toggles and radar chart rendering.
Coverage: Tests achieve high coverage on critical functions, including nutrition score calculations and authentication flows. Frontend tests cover key pages (login, meal planner, recipe creation). Mobile tests ensure parity with the web application.
Bug Detection:
-
Accessibility Regression: Selenium tests caught missing
aria-labelson newly added buttons, which were fixed to restore screen reader accessibility. - Nutrition Recalculation Bug: Tests uncovered a bug where deleting a log entry did not update daily totals correctly; a signal handler in the meal planner was adjusted to recalculate totals on deletion.
Readiness: With comprehensive testing and continuous integration, the system is considered stable for v1.0.0 deployment. In‑progress features (e.g., radar chart UI polish and personalised feed deduplication) are isolated and do not compromise core functionality.
Responsibilities:
I was responsible for the development and maintenance of some of the mobile application features, ensuring consistency between mobile, backend, and web frontend data. I focused on improving mobile UI/UX with attention to usability and accessibility, implemented internationalization and localization support, and actively reviewed pull requests related to mobile and cross-platform components.
Main Contributions:
Key contributions include enhancing the Mobile Nutrition Tracking screen by resolving data inconsistencies and redesigning the micronutrient UI, implementing multilingual support with RTL handling, and fixing synchronization issues between mobile and web platforms. I also improved feature discoverability through navigation restructuring and contributed to standards compliance by researching and documenting relevant W3C standards and certification requirements.
Significant Issues (Top 3 per category):
Code-Related:
- Issue #855: The Mobile Nutrition Tracking screen was improved by aligning micronutrient data with backend and web frontend values, and the UI layout was redesigned to reduce excessive vertical space and improve overall visual clarity and usability
- Issue #826: Implemented language support for mobile and frontend to provide a multilingual user experience with proper internationalization (i18n) and localization (l10n) capabilities
- Issue #839: Resolved a synchronization issue that prevented private/custom foods added through the mobile nutrition tracking feature from appearing on the web frontend
Non-Code-Related:
- Issue #749: Identified missing W3C standards requirements and proposed additional applicable standards
- Issue #754: Researched and documented internationally recognized standards and certification requirements for Halal, Vegan, and Vegetarian labeling
- Issue #750: Contributed to planning and selecting W3C standards to be implemented in the final milestone
Pull Requests:
- PR #861: Moved the Nutrition Tracking feature from the Profile section to the main bottom tab navigation for improved discoverability and UX
- PR #857: Modernized the micronutrient display with a compact circular UI and aligned filtering logic with the frontend
- PR #847: Fixed the synchronization issue where private/custom foods added via mobile nutrition tracking were not appearing on the web
- PR #827: Implemented multi-language support for the mobile app, including i18n infrastructure, persistent language selection, RTL handling, and refactoring hardcoded UI strings
- PR #818: Fixed a race condition bug during feed loading on application startup
- Reviewed PRs: PR #784, PR #802, PR #803, PR #829, PR #832
Responsibilities
I owned the integration between the meal‑planner and nutrition‑tracking modules and kept an eye on both backend logic and user‑facing stuff. That meant designing models and APIs, adding admin tooling, tackling data‑driven tasks like allergen tagging, and hunting down bugs in food comparison, profile management and tracking. I also jumped into mobile/web UX discussions, spun up issues for improvements and helped grow our food image dataset.
Main Contributions
-
Meal‑planner & nutrition‑tracking integration: merged the meal planner into the nutrition tracker by introducing
SavedMealPlanandSavedMealPlanEntrymodels, building CRUD endpoints and crafting a UI so users can create, save and plan meals from their logs. - Allergen tagging migration: wrote a data migration that auto‑tags every food item with allergens by scanning food names and establishing a set of standard allergens; this boosted filtering and allergy support.
- Admin enhancements: exposed the recipe model in the Django admin panel so staff can manage recipes, and added moderation tools that let admins edit food proposals without leaving the moderation page.
-
Bug fixes:
- Resolved comparison and search bugs in the food comparison screen, making the compare feature usable again.
- Fixed the profile screen to show accurate follower/following counts and made the follow/unfollow button consistent across pages.
- Squashed a nutrition‑tracking serializer bug that triggered 500 errors on the backend.
- Corrected serving‑size ↔ grams conversions in the food catalogue so nutrition stats are accurate.
- Removed the unused hydration bar from the UI to clean up the interface.
- Data & assets: used complimentary FAL.AI credits to generate and upload a bunch of new food images to Cloudinary to enrich our database.
- Documentation & UX: documented feedback from users and teammates to draft UX improvement goals and wrote a section for our lab report summarising those findings.
Significant Issues (Top 3 per category)
Code-Related:
- Issue #849: Replaced the static "tracking tips" widget with a full meal planner integrated into daily tracking, complete with new models, endpoints and collapsible plan lists
- Issue #792: Implemented a migration that creates standard allergens, scans food names for keywords and assigns tags via a Many‑to‑Many relation
- Issue #729: Fixed multiple bugs that broke the compare‑foods screen and improved its search functionality
Non-Code-Related:
- Issue #752: Gathered and documented UX feedback, identified pain points in the web/mobile flows and summarised goals in our lab report
- Issue #756: Coordinated the use of AI credits to produce additional food images, ensuring most items in our database have Cloudinary‑hosted images
- Issue #770: Created an issue to port our web skeleton loaders to mobile, aiming to improve perceived performance on poor networks
Pull Requests:
- PR #867: Integrated meal planning into nutrition tracking with new models, API endpoints and UI
- PR #792: Added migration and logic to tag foods with allergens
- PR #725: Added recipe models to the Django admin for easy management
- PR #727: Fixed follower/following counts and follow button issues
- PR #729: Cleaned up the compare‑foods screen and improved search
- PR #868: Patched a serializer bug causing 500 errors
- PR #858: Addressed serving‑size conversion bugs and added moderation edit functionality for food proposals
- PR #872: Removed the hydration bar from the UI
- Reviewed PRs: PR #828, PR #830, PR #846, PR #873
Responsibilities
Role: Backend & Documentation (Reporting)
Responsible for maintaining backend logic, refining nutrition-related features, updating design documentation (UML diagrams), and drafting the final Customer Milestone 3 report.
Main Contributions
-
Report Lead: Authored and finalized the Customer Milestone 3 report, ensuring strict compliance with the official template, including complex API usage scenarios, testing & QA evidence, and standards compliance.
Evidence: Issue #879 -
Design Documentation Update: Updated and cleaned UML diagrams (Use Case, Class, Sequence) to reflect the final system behavior and resolve formatting inconsistencies.
Evidence: Issue #877 -
Hydration & Nutrition Score Enhancement: Implemented hydration-aware nutrition scoring for daily logs, added hydration penalties, and integrated a Hydration Card in both web and mobile applications.
Evidence: Pull Request #799 -
Backend & Mobile Stability Improvements: Finalized and merged several pull requests addressing critical bugs and feature completeness, including meal planner fixes, token error handling, pagination stability, and private food synchronization across devices.
Evidence: PRs #828, #829, #830, #832, #848 -
Issue Review & Cleanup: Closed or addressed assigned requirements and lab-related issues and organized the issue tracker by removing outdated or out-of-scope items to stabilize the final milestone backlog.
Evidence: Issues #757, #758, #759, #760
Significant Issues (Top 3 per Category)
Code-Related
-
#799 – Update Nutrition Score: Added hydration-aware fields and calculations for nutrition scoring; introduced Hydration Card UI and associated logic.
https://github.com/bounswe/bounswe2025group9/issues/799 -
#828 – Meal Planner Bug Fixes: Resolved meal planner inconsistencies and improved reliability of generated plans.
https://github.com/bounswe/bounswe2025group9/issues/828 -
#829 / #830 – Token & Pagination Fixes: Improved authentication error handling and resolved backend pagination issues affecting list endpoints.
https://github.com/bounswe/bounswe2025group9/issues/829
https://github.com/bounswe/bounswe2025group9/issues/830
3.2 Non-Code-Related
-
#877 – UML Diagram Updates: Fixed formatting and updated design diagrams to align with current system functionality.
https://github.com/bounswe/bounswe2025group9/issues/877 -
#879 – Customer Milestone 3 Report: Drafted and finalized the comprehensive MS3 report covering project status, API workflows, QA evidence, and standards compliance.
https://github.com/bounswe/bounswe2025group9/issues/879 -
Requirements Review (Lab 8): Reviewed and validated requirements sections 1.1 and 1.2, contributing to acceptance planning and issue organization.
Evidence: Issues #757 – #760
Pull Requests
- #799 – Update Nutrition Score: Added hydration-aware calculations and UI; merged after review feedback.
- #828 – Meal Planner Bug Fixes: Fixed backend issues affecting plan generation.
- #829 – Improve Token Error Handling: Enhanced authentication failure handling.
- #830 – Resolve Pagination Issues: Stabilized paginated API responses.
- #832 – Private Food Integration: Synced private food proposals across devices and added a mobile screen.
- #848 – Revert Search Fix: Rolled back a change causing search regressions.
Additional Information
- Assisted in writing and structuring the final demo plan and defining mobile demo scenarios.
- Actively participated in labs and milestone discussions to finalize features for the release.
- Reviewed and provided feedback on teammates’ issues and pull requests, approving changes and suggesting improvements.
Responsibilities:
I managed deployments and coordinated between backend and frontend development for both web and mobile applications. I implemented CI/CD workflows, handled database migration challenges, and improved backend processes, including tests, APIs, and documentation. Additionally, I redesigned food and nutrition models for better scalability, introducing micronutrient normalization and range filtering. Along the way, I contributed to QA by fixing and reporting frontend bugs, improving access to private food entries, addressing mobile UI issues, and setting up tasks to streamline testing and deployment.
Backend-Frontend Coordination:
- Redesigned food backend models to implement private food entries and advanced food catalog filters.
- Implemented micronutrient normalization and range filtering.
- Fixed/Reported UI bugs in mobile and web app.
DevOps & Deployment:
- Streamlined CI/CD workflows and deployment processes to reduce downtime and speed up testing.
- Optimized migrations and backend processes for better efficiency and reliability.
Significant Issues (Top 3 per category):
Code-Related:
- Issue #798 [feat]: Missing CRUD endpoints and permission checks for private FoodEntry objects; users cannot properly manage their own unvalidated food entries.
- Issue #815 [bug]: Deleting a private FoodEntry that is referenced by another model fails silently; backend returns a 500 error and frontend provides no feedback.
- Issue #816 [bug]: Pagination displays additional pages after navigating to the last page, and selecting those pages results in an error.
Non-Code-Related:
- Issue #801 [task]: Need a database migration to seed initial data
- PR #778 [backend][frontend]: Integrated full micronutrient range filtering with normalized schema and frontend controls.
- PR #820 [backend][frontend]: Added macronutrient filtering and normalized nutrition values to a 100g standard across backend and frontend.
-
PR #878 [backend]: Fixed food proposal micronutrients serialization and parsing to ensure frontend-compatible flat key–value format (e.g.,
"Vitamin C (mg)": 28.1). - PR #790 [backend]: Implemented clean private food functionality with refactored access control and model simplification.
- PR #780 [backend][bugfix]: Fixed duplicate micronutrient creation bug violating unique constraints.
- PR #806 [backend][frontend]: Fixed daily micronutrient log to use correct micronutrient keys (name + unit).
- PR #851 [backend][frontend]: Implemented comment count support in web forum serializers and UI.
- PR #803 [mobile]: Updated Android manifest to adjust keyboard mode and improve mobile text input usability.
- PR #802 [mobile]: Removed enforced food catalog sorting on mobile.
- PR #775 [backend][devops]: Optimized broken image links migration for faster test execution.
- PR #748 [devops]: Added GitHub Actions workflow for manual deployment of NutriHub.
- PR #747 [devops][frontend]: Added CI workflow to ensure frontend builds successfully on relevant changes.
- PR #865 [backend][db]: Added backup mock NutriHub database state and instructions for loading dump DB.
- PR #876 [devops][docs]: Updated README to document GitHub Actions usage for the mobile pipeline.
Responsibilities
Role: Backend Developer
Responsible for implementing user-facing features related to food discovery and management, contributing to backend API functionality, addressing milestone feedback, and supporting documentation and UX evaluation tasks during labs and milestone preparation.
Main Contributions
-
Milestone & Process Evaluation:
Authored Section 2.4 (Evaluation of Tools and Processes) for Customer Milestone 2, analyzing the effectiveness of development tools, workflows, and collaboration practices.
Evidence: Wiki – Customer Milestone 2 Report (Section 2.4) -
Lab 8 UX & Feedback Assessment:
Reviewed milestone feedback during lab sessions and co-documented the UX assessment section in the Lab 8 Requirements Review & Acceptance Planning report with Yusuf Anil Yazıcı.
Evidence: Lab 8 Wiki, Meeting Notes (Nov 27) -
Food Search & Filtering (Micronutrient-Aware):
Implemented advanced search and filtering for food entries, including micronutrient-based filtering, improving food discovery accuracy and usability.
Evidence: PR #773 -
Food Proposal Status Feature:
Identified the need for proposal tracking, created the corresponding issue, and implemented the Food Proposal Status tab across both frontend and backend to allow users to track proposal states.
Evidence: Issue #791, PR #793 -
Private Food Functionality (UI & CRUD):
Created frontend and backend issues for private food support and implemented the UI along with basic CRUD operations, enabling users to manage personal food entries isolated from public proposals.
Evidence: Issues #807, #810;
PRs #809, #811 -
Bug Fix – Private Food Deletion:
Resolved a silent failure occurring during private food deletion, ensuring correct API behavior and reliable user feedback.
Evidence: PR #819
Significant Issues (Top 3 per Category)
3.1 Code-Related
-
#773 – Food Search & Filtering with Micronutrients:
Added robust search and filtering logic to food listings, including micronutrient-based constraints.
https://github.com/bounswe/bounswe2025group9/pull/773 -
#793 – Food Proposal Status Implementation:
Implemented proposal status tracking across frontend and backend, improving transparency of the proposal workflow.
https://github.com/bounswe/bounswe2025group9/pull/793 -
#819 – Fix Private Food Deletion Failure:
Fixed a silent failure in the delete operation for private foods, improving reliability and user experience.
https://github.com/bounswe/bounswe2025group9/pull/819
3.2 Non-Code-Related
-
Milestone 2 – Tools & Processes Evaluation:
Documented a structured evaluation of tools, workflows, and collaboration practices in the MS2 report.
Evidence: Wiki – Customer Milestone 2 Report (Section 2.4) -
Lab 8 UX Assessment:
Assessed milestone feedback and contributed to UX evaluation and acceptance planning documentation.
Evidence: Lab 8 Wiki, Meeting Notes (Nov 27) -
Issue Planning for Private Foods:
Defined and structured frontend and backend issues for private food functionality, improving task clarity and implementation flow.
Evidence: Issues #807, #810
Pull Requests
- #773 – Food Search & Filtering: Implemented micronutrient-aware search and filters.
- #793 – Food Proposal Status: Added proposal status tracking across FE & BE.
- #809 – Private Food UI & CRUD (Frontend): Implemented UI and client-side logic.
- #811 – Private Food CRUD (Backend): Added backend support for private food operations.
- #819 – Fix Private Food Deletion: Resolved silent deletion failure.
Responsibilities: For the final milestone, I took ownership of the Advanced Nutrition Logic and Scenario Planning modules on the frontend. My primary responsibility was converting the application from a passive logger into a proactive planning tool. This involved designing the complex state management for the "What If" mode, implementing dynamic safety warnings based on serving sizes, and ensuring the application was demo-ready with realistic data. I also handled backend tasks related to database seeding to ensure our "Central Recipe Database" requirement was met with high-quality content.
Main contributions: My most significant contribution was the "What If" Mode (PR #823), a complex feature allowing users to model future nutrition scenarios without corrupting their actual logs. This required implementing a shadow state system and dual-segment progress bars. I also addressed critical safety feedback by implementing Dynamic Serving Size Warnings (PR #813). I built a system that actively calculates nutrient density against daily limits and triggers visual alerts (yellow/red) if a portion is unsafe. To improve usability, I refactored the nutrition tracker to make all entries clickable (PR #871), exposing detailed macro/micro data in a modal. Finally, I acted as the Data Engineer for the demo, writing migration scripts to seed the database with 38 realistic recipes across various cuisines to demonstrate the platform's depth (PR #874).
Significant issues:
Code-related:
- #740 Unified Tracking and Meal Planning - What If Mode: I architected the frontend logic for "What If" mode, introducing a dedicated reducer to handle temporary "planned" items alongside "committed" logs. I also built the visual components, including dashed-border entries and stacked progress bars to visualize the impact of potential meals.
- #812 Added serving size selection and warnings to the food details: I implemented the logic for dynamic unit conversion (100g vs. Serving vs. Custom) and the threshold warning system.
- #864 Clickable food entries in nutrition tracker: I enabled the food entries in nutrition tracker to be clickable and to show the food details similar to the food catalog, enhancing UX.
Non-code related:
- #869 Arrange presentation account and the nutrition tracker items: I designed the specific user journey for the final customer presentation, creating a pre-configured user account with specific data points to showcase our new features effectively.
- #788 Strategy for Forum Database Population: I analyzed the requirements for the recipe data structure and defined the JSON schema required to make the recipes feel "realistic" (author names, diverse ingredients) before writing the migration code.
- #870 Populate database with recipes for the demo: I wrote a Python-based Django migration script to populate the central database with diverse recipe data (Vegan, Halal tags), ensuring the "Recipe" feature was fully testable during the final presentation.
Pull requests that I created, merged, or reviewed:
- #823 Unified Tracking and Meal Planning - What If Mode (Feature/Complex)
- #813 Added serving size selection and warnings to the food details (Feature/Safety)
- #874 Populate database with recipes for the demo (Backend/Data)
- #871 Clickable Food Entries in Nutrition Tracker (UX Improvement)
- Reviewed and merged #806
Additional Information:
- I was one of the presenters for the Final Milestone Web Scenario Presentation.
1. Responsibilities
Role: Frontend Developer, Customer Relations, Team Lead Respobsible for organizing meetings with the customer and designing the product, planning of the project, population of database via external resources, reviewing, and coding frontend components for Meal Planner, Food comparison screens.
2. Main Contributions
-
Final Milestone Planning and Preparation:
Identified requirements to cover in the final milestone and prepared demo scenarios to present during the milestone presentation. Also presented it in the final milestone. Evidence: Lab-9: Finalizing Milestone 3 Demo Plan, Final Milestone Mobile Demo Plan - Refactoring of the Recipe Model: Researched how we can make our recipe model more suitable to Schema.org model and populate the database with real data. We discussed with Berkay Bilen on how to modify this model Evidence: Discussion under #774, Review of #805
- Improving UX in Recipe Ingredient Amounts: Guided Berkay Bilen to include other units than grams to described recipe amounts in the database, later reflected this change in frontend. Evidence: #797, PR #800
- Identifying the Missing W3C Standards: During Labs, Onur Küçük, Hasancan Keleş and I identified the missing standards in our implementation and plan which ones to implement in the next milestone. Evidence: Lab-8 Report, #749, #754.
- Testing the product for the final demo: Went over the scenaerios and found bugs and missing features. Evidence: #852, #883, #796
Significant Issues (Top 3 per Category)
3.1 Code-Related
- #797 : Add custom amounts in recipe ingredients
- #742 : Admin panel proposal editing
- #840 : Bug fix in mobile, food catalog search
3.2 Non-Code-Related
- #774 : Finding external resources for Recipe refactoring and population.
- #783 : Meeting Notes for final milestone task distribution
- #749 : Identifying the Missing W3C Standards Requirements and Planning
4.Pull Requests
Created:
- #850 – search behavior in mobile food catolog
- #707 - improve ux in recipe ingredient amount
- #777 - proposal editing (Not merged due to conflicts)
Reviwed (in detail):
- #790 - private food
- #765 - generate more images and put them to cloudinary
- #813 - added serving size selection and warnings to the food details, I contributed by improving UX as well
- #787 - Add customUnit field to RecipeIngredients
- #793 - add food proposal status serializer and endpoint, integrate into profile, solved merge conflict
- #799 - Update Nutrition Score, solved merge conflicts and type errors
- #811 - add CRUD operations for user's private foods, also committed tests
Responsibilities:
I primarily contributed as a backend-focused team member, with responsibilities spanning API development, system integration, bug analysis, and milestone planning. I actively participated in milestone preparation, requirements analysis, backend feature implementation, API documentation, and extensive code reviews to ensure system consistency and readiness for delivery.
Main Contributions:
My main contributions during this milestone included evaluating milestone feedback and translating it into concrete acceptance and addressing plans, contributing to milestone documentation, and coordinating backend readiness for the final demo. I implemented and fixed backend endpoints (notably user deletion and recipe/meal planner related features), prepared Swagger-based API documentation, and ensured system-wide compatibility after feature changes. Additionally, I played an active role in PR reviews, bug detection, and merge decisions to stabilize the backend before milestone delivery.
Significant Issues (Top 3 per category):
Code-Related:
- PR #787: Updated and fixed recipe-related backend logic to support newly introduced features, ensuring correct handling of recipe data and compatibility with recent changes in the recipe management and meal planner workflows
- PR #795: Implemented the user account deletion functionality, handling proper cleanup and consistency of user-related data while maintaining overall system integrity and preventing orphaned records
- PR #805: Implemented an external-facing recipe endpoint designed to produce schema.org–compatible recipe representations, enabling structured data exposure for interoperability, semantic web compatibility, and potential third-party integrations
Non-Code-Related:
- Issue #733: Contributed to the milestone report together with Yusuf Akın, helping finalize written deliverables
- Issue #757: Analyzed milestone feedback, evaluated requirements, and authored the addressing and acceptance plan for final deliverables
- Issue #774: Researched external recipe databases to support decision-making for recipe-related features
Pull Requests:
- PR #795: Implemented the user deletion endpoint and ensured backend compatibility across related modules
- PR #780: Reviewed and merged a bugfix PR addressing migration and filtering issues identified before the milestone demo
- PR #834: Added Swagger documentation and API improvements for milestone features
- PR #805: Fixed recipe management functionality as part of milestone delivery
- PR #822: Contributed to backend stability improvements for milestone features
- PR #787: Implemented final backend fixes prior to milestone submission
- Reviewed PRs: PR #747, PR #748, PR #775, PR #773, PR #778, PR #800, PR #730
Additional Information:
Beyond direct implementation tasks, I actively supported milestone coordination by reviewing demo plans, discussing feature scenarios after backend stabilization, and ensuring that the system behavior aligned with the intended milestone scope. I also contributed to maintaining overall code quality and delivery readiness through consistent reviews and early bug identification.
Osman Selim Yüksel (Mobile)
Responsibilities Role: Mobile Developer
Responsible for implementing and enhancing key features in the mobile application, with a primary focus on private food functionality, nutrition tracking improvements, UI/UX refinements, and bug fixes to ensure a smooth and consistent user experience.
Main Contributions
-
Private Food Feature Implementation: Designed and fully implemented the private food system on mobile, enabling users to create, store, edit, delete, and use custom foods locally without requiring admin approval. This included CRUD operations, persistence with AsyncStorage, integration into food selection and nutrition tracking flows, and a dedicated detail view.
Evidence: Pull Requests #784, #854 -
Nutrition Tracking Enhancements: Integrated private foods seamlessly into the Nutrition Tracking screen, fixed synchronization issues between mobile and web views, and resolved display bugs (e.g., incorrect zero values when adding private foods to meals).
Evidence: Issues #839, Pull Request #873 -
UI/UX Polish and Bug Fixes: Improved visual consistency and usability across screens, including fixing header alignment in the Food Catalog, enhancing search behavior to handle empty results gracefully, making private food items clickable with detail navigation, and removing redundant explanatory text from the Forum screen.
Evidence: Pull Requests #846, #862, Issue #840 -
Feature Parity with Web: Ensured mobile alignment with web features by adding edit/delete operations for private foods and detailed micronutrient-aware food comparison support (prepared for database integration).
Evidence: Issues #838, #841, #702
Significant Issues (Top 3 per Category)
Code-Related
-
#781 – Mobile Private Food Items: Added full support for creating and using private foods in nutrition tracking, with local storage and immediate usability without approval.
-
#841 – Add Detailed View for Private Food (Mobile): Implemented tappable private food items with navigation to a detail screen showing full nutritional data, edit, and delete functionality.
-
#839 – Fix Mobile Nutrition Tracking Async Behavior with Backend: Resolved synchronization issues ensuring foods added on mobile appear correctly on the web version.
Non-Code-Related
-
#840 – Fix Search Behavior in Mobile Food Catalog: Improved error handling to display a "No results found" state instead of crashing on non-existent searches.
-
#838 – Add Delete and Edit to Private Food (Mobile): Implemented edit and delete operations with confirmation dialogs and immediate UI reflection.
-
#702 – Enhance Food Comparison with Micronutrients (Mobile): Extended food comparison screen to prepare for and support micronutrient details alongside macros.
Pull Requests (Written by Me)
-
#784 – Add Private Food Feature Mobile: Implemented core private food functionality including creation modal, local storage service, integration into food selector and propose flows, with comprehensive unit tests.
-
#854 – Feat/841: Added clickable private food items with detail screen, edit/delete actions, navigation, and proper handling of local/private food IDs.
-
#873 – Fix the 0 valued info page when adding private food to nutrition tracking: Corrected nutrition value display when adding private foods to meals.
-
#846 – Fix/header size: Resolved header alignment issues in the Food Catalog screen for better visual layout.
-
#862 – Remove forum screen explanation text: Cleaned up UI by removing redundant explanatory text beneath the Forum page headline.
Pull Requests (Reviewed & Approved by Me)
- #723 – Fix price category filter not working correctly.
- #847 – Sync private foods to backend for cross-platform visibility.
- #850 – Fix search behavior in mobile food catalog.
- #851 – Added comment count to web forum.
- #857 – Visual improvements for nutrition tracking and mobile targets.
- #861 – Move Nutrition Tracking to main navigation.
Additional Information
-
Ensured feature completeness and stability through thorough testing, including unit tests for services and manual verification of navigation, persistence, and error handling.
-
Maintained consistency with existing app architecture, theming, and patterns while adding new screens and components.
-
Contributed to mobile-web parity for critical user features, improving overall app usability and cross-platform experience.
For the team project, ownership was taken over several frontend and UX-focused improvements across mobile and web platforms. Responsibilities included identifying usability issues, proposing and implementing data visualization features, and enhancing search and interaction flows to improve overall user experience. Contributions were primarily focused on forum functionality, food comparison features, and mobile UI correctness, ensuring that implemented features were production-ready and user-friendly.
The most significant contributions were made in the areas of UX refinement, search functionality, and nutritional data visualization. Micronutrient radar charts were introduced to enable clearer food comparison, while multi-food forum search was implemented to improve content discoverability. Additionally, mobile form validation behavior was corrected to prevent misleading warnings and improve interaction flow.
-
#863 – False empty input warning in mobile food proposal
A UX bug was identified where validation warnings were shown prematurely during user input. -
#804 – Adding radar chart for micronutrients in food comparison
A feature request was proposed to visualize micronutrient data using radar charts.
-
#866 – Fix mobile food proposal validation UX
Validation logic was updated to prevent empty-field warnings before form submission. -
#824 – Add micronutrient radar charts
Radar chart visualizations were implemented for micronutrient comparison. -
#860 – UI fixes and radar chart layout improvements
UI refinements were applied to improve layout consistency and visibility. -
#678 – Mobile forum search with multiple food items
Multi-food fuzzy search functionality was implemented for the mobile forum. -
#662 – Web forum search by multiple food items
A multi-food search feature was developed for the web forum.
Through these contributions, notable improvements were achieved in user experience, nutritional data clarity, and forum search usability. Multiple merged pull requests delivered tangible enhancements to the application, while reported issues and feature proposals helped guide the team toward a more polished and user-centric product.
-
Release Tag:
customer-milestone-3_cmpe451-fall2025 -
Release Name:
1.0.0 (Official Release) - Live Deployment: https://nutrihub.fit
-
Docker Setup:
docker-compose.yml - Mobile APK: Attached to GitHub Release