-
Notifications
You must be signed in to change notification settings - Fork 1
Final Milestone Individual Contribution: Utku Yiğit Demir
-
Responsibilities: Backend and web contributor. Responsible for major final-milestone backend work around discovery filtering (eligibility, categories, rating counts), invitation listing/detail APIs, and full Turkish/English i18n for backend-owned messages. On the web side, responsible for closing dark-mode gaps and responsive regressions across the application. Also wrote the requirements/issue tickets that drove the cross-stack discovery, public-profile, rating-count, advanced-filters, and i18n epics across backend, web, and mobile.
-
Main Contributions:
- Added Turkish/English localization for all backend-owned messages (validation errors, domain errors,
notifications), including a locale middleware,
Accept-Languagenegotiation, an embedded TR/EN catalog, ausers.localecolumn migration, and TR/EN parity tests (#507, PR #580) - Split the received-invitations response into pending and past buckets with cursor-based pagination, and added an invitation detail endpoint so the web/mobile invitations inboxes can render per-invitation state (#581, PR #588)
- Filtered event discovery by viewer age and gender eligibility on the backend so users only see events they can actually join (#501, PR #615)
- Finished the multi-select category filter on event discovery by accepting a singular
category_idalias and aligning the OpenAPI schema with the frontend's emitted query shape (#483, PR #613) - Closed the rating-count coverage gap on the discovery card payload so hosts' aggregate rating counts now flow end-to-end (#498, PR #610)
- Closed dark-mode gaps and responsive regressions across the web app: auth/profile/landing/maps surfaces in the
first pass, then a follow-up sweep across profile, event detail, create-event, my-events, tickets, favorites,
notifications, and language switcher (~220 selectors total) using the established
:root[data-theme='dark']convention (#631, #650, PR #644, PR #652) - Authored the final-milestone cross-stack tickets (backend + web + mobile triplets) that drove the public profile, advanced filters, eligibility-filtered discovery, rating count, and TR/EN localization epics (#495–[#509](https://github.com/bounswe/bounswe2026group 11/issues/509))
- Added Turkish/English localization for all backend-owned messages (validation errors, domain errors,
notifications), including a locale middleware,
-
Significant Issues (Top 3 per category):
-
Code-Related:
- Issue #507: Add Turkish/English localization support for backend-owned messages — locale middleware, catalog, parity tests, and migration for user locale.
- Issue #501: Filter discovery results by event gender and age restrictions so viewers only see events they are eligible to join.
- Issue #581: Split received invitations response into pending and past buckets and add an invitation detail endpoint.
-
Non-Code-Related:
- Issue #631: Catalogued dark-mode gaps and responsive regressions across the web app with reproduction notes per page; used as the source of truth for the dark-mode follow-up PRs.
- Issue #650: Audited and documented the remaining dark-mode gaps across profile, event detail, create-event, and list pages found during production walkthroughs after #631.
-
Issue #505 /
#506: Specified the advanced-filters UI tickets for web
and mobile so the audience-based discovery scenarios (
#504) could be picked up by frontend contributors.
-
Code-Related:
-
Pull Requests:
-
Merged (final milestone period):
- PR #652: fix(frontend): dark mode gaps across profile, event detail, create-event, lists (#650)
- PR #644: fix(frontend): dark mode gaps and responsive regressions (#631)
- PR #615: feat(backend): filter discovery by viewer age and gender eligibility (#501)
- PR #613: feat(backend): finish multi-select category filter on event discovery (#483)
- PR #610: feat(backend): close rating-count coverage gap on discovery card (#498)
- PR #588: feat(backend): split received invitations response into pending and past buckets & create invitation detail endpoint (#581)
- PR #580: feat(backend): add Turkish/English localization for backend-owned messages (#507)
-
Reviewed:
- PR #646: fix(frontend): improve host event create and edit flows
- PR #622: feat(frontend-mobile): make gender and birthdate mandatory on sign up
- PR #583: feat(backend): implement participant reconfirmation state transitions and confirm-attendance API for critical event updates
- PR #528: feat(backend): add admin role authorization and backoffice read APIs
- PR #523: feat(backend): implement in-app notification system
- PR #512: devops(backend): re-structure backend logs and remove fanout logging
- PR #511: devops(backend): add new relic integration for backend observability
-
Merged (final milestone period):
-
AI Transparency & Documentation:
-
Tool summary:
- Claude (Claude Code): Used as the primary agentic coding assistant for both backend Go work (handlers, services, repositories, integration tests) and frontend dark-mode CSS work. Workflow was conversational: describe the issue or feature, let the agent implement and write tests, then iterate on observed issues — including driving Playwright MCP sessions against production to spot dark-mode gaps that did not reproduce locally.
- Codex: Used as a secondary code-reading and debugging assistant when triaging cross-stack issues (especially around discovery query shape and invitation pagination cursors) and when reviewing other team members' PRs.
- Prompts: No formal prompt log was maintained; the sessions were conversational and not exported in a structured form. The general pattern was: (a) paste or reference the issue body, (b) ask the agent to plan before implementing, (c) implement + add tests, (d) run the suite, (e) iterate on failures or design-intent corrections (e.g., keeping categorical status pills hue-preserving in dark mode rather than desaturating them to neutral gray).
-
Tool summary:
-
Individual Testing Efforts:
-
backend/internal/i18n/accept_language_test.go,backend/internal/i18n/catalog_test.go,backend/internal/i18n/locale_test.go,backend/internal/i18n/parity_test.go, commitdaa5904: Unit tests for the i18n package —Accept-Languageheader parsing/negotiation, catalog lookups with fallbacks, locale normalization, and a TR/EN parity test that fails the build if a translation key is missing on either side. -
backend/internal/adapter/out/httpapi/handler_i18n_test.go,backend/internal/adapter/out/httpapi/locale_middleware_test.go, commitdaa5904: Tests for the HTTP locale middleware (resolving locale from header vs. authenticated user preference) and for localized handler error responses. -
backend/internal/application/notification/service_i18n_test.go,backend/internal/application/notification/service_test.go,backend/internal/application/profile/service_test.go, commitdaa5904: Service-level tests for localized notification message rendering and for the newusers.localeprofile field round-trip. -
backend/tests_integration/audience_attributes_test.go, commitdaa5904: Integration coverage exercising the localized validation error responses through the real HTTP stack. -
backend/internal/application/invitation/service_test.go,backend/internal/application/invitation/cursor_test.go, commit102c5d9: Service and cursor tests for the pending/past invitation split — pagination correctness, bucket boundaries, and decoding/encoding of opaque cursors. -
backend/tests_integration/invitation_test.go,backend/tests_integration/event_test.go,backend/internal/adapter/out/httpapi/event_handler/event_handler_test.go, commit102c5d9: End-to-end integration tests for the listing and detail endpoints (GET /invitations?bucket=pending|past,GET /invitations/:id). -
backend/tests_integration/event_test.go, commit1934f30: Integration tests for the eligibility-filtered discovery endpoint, covering age-only restrictions, gender-only restrictions, combined restrictions, and the "viewer has no birthdate/gender" fallthrough cases. (+342 lines.) -
backend/tests_integration/event_test.go, commit0cf078a: Integration assertions verifyinghost_rating_countappears on the discovery card payload across listing and detail flows. (+131 lines.) -
backend/internal/adapter/out/httpapi/event_handler/event_handler_test.go, commit3fc9858: Handler tests for thecategory_idsingular alias on event discovery, including coexistence with the pluralcategory_ids[]query and OpenAPI-aligned parsing edge cases. - Manual verification suite for PR #644 and PR
#652: Playwright MCP walkthroughs against
socialeventmapper.comwith the seeded production user, capturing before/after screenshots for every flagged page in both dark and light mode to confirm there were no light-mode regressions. Localvitestsuite (188/188 in single-fork mode) andtsc -b --noEmitwere re-run on each commit.
-
-
Additional Information: I owned the cross-stack issue planning for the final milestone — most of the "backend + web + mobile" triplets that drove the public profile, advanced filters, eligibility-filtered discovery, rating count, and TR/EN localization epics (#495–[#509](https://github.com/bouns we/bounswe2026group11/issues/509)) were authored by me so that backend, web, and mobile contributors could pick up matching tickets in parallel. During the pre-demo period I performed production walkthroughs against
socialeventmapper.comwith seeded demo data, which surfaced the dark-mode and responsive regressions tracked under #631 and #650 — both of which I then closed myself with the corresponding fix PRs. I also participated in reviewing infrastructure-level PRs (logging restructure, New Relic integration, admin authorization) to keep the backend stack ready for the final demo.
👥 Team Members
- Lab 1 Report (12.02.2026)
- Lab 2 Report (19.02.2026)
- Lab 3 Report (26.02.2026)
- Lab 4 Report (05.03.2026)
- Lab 5 Report (12.03.2026)
- Lab 6 Report (26.03.2026)
- Lab 7 Report (02.04.2026)
- Lab 8 Report (16.04.2026)
- Lab 9 Report (30.04.2026)
- Lab 10 Report (07.05.2026)
- Customer Meeting (17.02.2026)
- Weekly Meeting 1 (17.02.2026)
- Weekly Meeting 2 (25.02.2026)
- Weekly Meeting 3 (04.03.2026)
- Stakeholder Meeting (10.03.2026)
- Weekly Meeting 4 (11.03.2026)
- Database Design Meeting (18.03.2026)
- Weekly Meeting 6 (25.03.2026)
- Weekly Meeting 7 (01.04.2026)
- Weekly Meeting 8 (15.04.2026)
- Weekly Meeting 9 (06.05.2026)
- Scenario 1 - Discovering and Joining an Event
- Scenario 2 - Private Event Organization
- Scenario 3 - Public Event Organization
- Use Case Diagram (Final)
- Scenario 1 Use Case Diagram
- Scenario 2 Use Case Diagram
- Scenario 3 Use Case Diagram
- All Sequence Diagrams
- Sequence Diagram - Oğuz Özer
- Sequence Diagram - Emine Türk
- Sequence Diagram - Cansu Er
- Sequence Diagram - Sevde Pekköse
- Sequence Diagram - Buğra Keser
- Sequence Diagram - Mehmet Kaan Ünsel
- Sequence Diagram - Utku Yiğit Demir
- Sequence Diagram - Mehmet Akif Yıldırım