MVP Milestone Individual Contribution: Mehmet Kaan Ünsel - bounswe/bounswe2026group11 GitHub Wiki
Mehmet Kaan Ünsel (Backend / DevOps) | MVP Contributions
Responsibilities
Led the Backend / DevOps side of the MVP and handled the infrastructure end to end.
Established the backend foundation, project layout, configuration model, and Clean Architecture based service wiring.
Designed and maintained the local and remote deployment setup with Docker, Docker Compose, Nginx reverse proxy, PostgreSQL/PostGIS, and GitHub Actions.
Implemented core backend capabilities including authentication, event discovery/search, event detail, ratings, image upload, favorite locations, and participation flows.
Built and maintained CI/CD workflows for backend, frontend, mobile, and automated development-server deployment.
Added and maintained backend unit/integration tests and supported demo preparation with seeded/mock data flows.
Contributed to requirements refinement, scenario work, sequence diagrams, meeting documentation, and roadmap alignment.
Main Contributions
Bootstrapped the Go backend and created the initial Clean Architecture-oriented folder structure that the rest of the backend work built on top of.
Designed the backend composition root, configuration loading, database bootstrapping, and service wiring so the project could evolve in a sustainable and scalable way.
Set up Dockerized local development with PostGIS, then extended the stack with Nginx so the repository matched the intended production topology early.
Took ownership of DevOps: provisioned the server, connected over SSH, set up the deployment layout, configured the reverse proxy, brought up the database on the server, and documented the remote environment.
Built the CI/CD pipeline: backend CI, frontend CI, mobile CI, and the automated dev CD workflow that builds versioned images, pushes them to Docker Hub, transfers deployment assets, injects runtime secrets safely, and deploys to the dev droplet.
Implemented the backend authentication system including email-OTP registration, username/password login, refresh-token rotation, logout, availability checks, and forgot-password support.
Implemented the most critical product feature for the MVP: the event discovery/search flow with geospatial querying, radius filtering, full-text search, time/category/tag filters, sorting, and pagination. This was the core of the product experience and one of the most technically important backend contributions in the project.
Added direct image-upload infrastructure using DigitalOcean Spaces + CDN-backed URLs and a backend-issued presigned upload contract.
Implemented or extended event detail, host moderation, favorite locations, leave-event participation logic, ratings, discovery status handling, and transactional consistency improvements with the UnitOfWork pattern.
Contributed several late-stage cross-stack fixes and polish PRs to keep backend/frontend/mobile behavior aligned during MVP stabilization.
Significant Issues (Top 3 per category)
Code-Related
Issue #201: Implemented the event discovery endpoint with geospatial radius filtering, full-text search, structured filters, and pagination. This directly powered the product's core event discovery experience. Related merged work: PR #210, PR #363, PR #379, and PR #384.
Issue #123: Built the automated development deployment workflow that packages backend/frontend images, tags them safely, transfers deployment assets, injects runtime secrets, and deploys the application to the remote server with health-aware sequencing. Related merged work: PR #367.
Issue #117: Initialized the Go backend project structure and created the architectural baseline for the backend, which later evolved into the full Clean Architecture service layout used by the MVP. Related merged work: PR #126, PR #127, and PR #135.
Non-Code-Related
Issue #39: Contributed to updating the requirements based on elicitation results and helped align the documented scope with the refined system understanding.
Issue #45: Contributed to the finding-an-event scenario page together with teammates, helping define the user journey that later informed the discovery implementation.
Issue #83: Created the sequence diagram for the ticket usage flow and contributed to the broader design consistency work around sequence diagrams.
Pull Requests
PR #53: Added the Scenario 1 mockup designs to the repository.
PR #91: Implemented the stub-app GitHub events viewer page for the individual assignment.
PR #124: Added the canonical database schema documentation and the initial SQL migration structure.
PR #125: Documented development conventions and added the shared PR template.
PR #126: Initialized the Go backend project and created the first backend folder structure.
PR #127: Added centralized Viper-based configuration and fail-fast environment validation.
PR #128: Dockerized the backend and PostgreSQL/PostGIS stack for local development.
PR #129: Added Nginx reverse proxy support and reorganized migrations into numbered files.
PR #130: Prepared the dev deployment layout and droplet-oriented deployment files.
PR #133: Implemented the backend auth API with email OTP registration, login, refresh, and logout.
PR #135: Refactored backend/env setup and strengthened the architectural layering around the backend.
PR #140: Added the registration availability endpoint and integration tests.
PR #237: Implemented the backend direct image-upload flow backed by object storage/CDN.
PR #304: Added CRUD endpoints for user favorite locations.
PR #318: Added the leave-event endpoint and support for the LEFT participation status.
PR #320: Fixed the backend logic so users can rejoin after leaving before the event starts.
PR #321: Added the UnitOfWork pattern for transactional flows in the application layer.
PR #363: Exposed event status in discovery responses and excluded IN_PROGRESS events from discovery.
PR #364: Added frontend event rating/lifecycle UI and the supporting API helpers.
PR #365: Fixed the navbar avatar update issue after profile photo upload.
PR #367: Added the automated development deployment workflow.
PR #370: Extended the favorite-events response with privacy_level and location_address.
PR #379: Optimized event detail and favorite flows for better backend/frontend performance.
PR #384: Split the event detail API into lean detail and dedicated host-management endpoints.
PR #390: Updated the frontend color palette to align with the mobile visual direction.
PR #399: Added the SEM brand logo, refreshed frontend visuals, and improved the discover location flow.
PR #405: Fixed stale protected-event join-request pending state across backend, frontend, and mobile; also resolved the related merge conflict in the mobile Jest mock.
PR #409: Added the mobile sort-by filter, redesigned the home header, and improved default location resolution.
Beyond the repository-visible DevOps work, I personally handled the operational setup of the development environment: domain acquisition, renting the server, connecting over SSH, manually preparing the machine, bringing up the database, and configuring the reverse proxy on the server.
I was the main owner of the deployment/infrastructure side throughout the MVP period and kept the backend and infrastructure direction aligned as the project scaled from an empty repository into a working full-stack system.
The geospatial discovery/search work was the technical heart of the product from a backend perspective, because it combined PostGIS-based proximity filtering with full-text search and product-facing filters in the same endpoint.
Supported the MVP demo preparation by helping generate demo-ready mock data and by making sure the deployed environment remained stable and usable for the presentation.