Skip to content

Final Status of Requirements

Beyza Nur Deniz edited this page May 16, 2026 · 2 revisions
Requirement Status Evidence
1.1.1.1 The application shall allow users to upload pre-recorded historical photographs, videos, and audio from the device's gallery. Completed We implemented authenticated media upload through POST /stories/{story_id}/media in backend/app/routers/story.py. We validate uploaded media types and file sizes in backend/app/services/media_validation.py, and we cover image, audio, and video upload cases in backend/tests/api/test_story_api.py.
1.1.2.1, 1.2.2.1, 1.2.2.3, 1.2.2.4 Completed We implemented story-to-map binding through latitude/longitude fields and interactive marker rendering. The backend location and story validation are defined in backend/app/models/story.py, while the map interface is implemented in frontend/map.html. Marker previews, map interaction, and zoom controls are all part of the delivered interface.
1.1.3.1, 1.1.3.1.1, 1.1.3.1.2, 1.1.3.1.3, 1.1.3.1.4, 1.1.3.2, 1.1.3.3 Completed We implemented the core story creation workflow in backend/app/routers/story.py and backend/app/models/story.py. Users can create posts with title, content, location, and historical date or date range. The story creation interface is implemented in frontend/story-create.html, and the flow is covered by backend/tests/api/test_story_api.py and backend/tests/integration/test_story_flow.py.
1.1.3.1.5, 1.2.2.5 Completed We implemented multi-location story support. The request/response models include locations in backend/app/models/story.py, and map-side normalization and rendering are implemented in frontend/multi-location.js and frontend/map.html. We also cover this flow in backend/tests/integration/test_story_location_flow.py.
1.1.4.1, 1.1.4.2, 1.2.4.1, 1.2.4.1.1, 1.2.4.2 Completed We implemented registration and login using username, email, and password in backend/app/routers/auth.py and backend/app/services/auth_service.py. We enforce email uniqueness and authenticated/unauthenticated access separation in the same backend layer. These flows are covered in backend/tests/api/test_auth_api.py and frontend/tests/uat/auth.spec.js.
1.2.4.1.2 E-mail addresses shall be confirmed. Not Started We did not implement an email confirmation workflow in the final release. Our authentication flow supports registration, login, and Google sign-in, but does not yet include email verification tokens or a confirmed-email state.
1.2.4.1.3 The system must provide a Google account sign-in option as an alternative to email registration. Completed We implemented Google OAuth login in backend/app/routers/auth.py and backend/app/services/auth_service.py through /auth/google/login and /auth/google/callback. On the frontend, the callback flow is handled by frontend/oauth-callback.html, and the delivered flow is covered in frontend/tests/uat/auth.spec.js and backend/tests/api/test_auth_api.py.
1.2.4.1.4 The system must automatically generate a username suggestion from first and last name during sign up. Not Started We did not implement this requirement in the final release. Our registration page in frontend/register.html asks the user to enter a username directly, and our backend registration model expects an explicit username.
1.1.5.1, 1.1.5.2, 1.1.5.3, 1.1.5.4, 1.2.6.1 Completed We implemented comments, likes, public viewing, and saved stories. Backend endpoints are defined in backend/app/routers/story.py, while frontend integrations are implemented in frontend/comments.js, frontend/likes.js, and frontend/saves.js. These flows are covered by backend/tests/integration/test_story_comment_flow.py, backend/tests/integration/test_story_like_flow.py, and backend/tests/integration/test_story_save_flow.py.
1.1.6.1, 1.1.6.2, 1.1.6.3, 1.1.6.4 Completed We implemented search and filtering through GET /stories and GET /stories/search in backend/app/routers/story.py, with support for place-based search, date filtering, tag-based filtering, and location-oriented discovery. The user-facing search/filter interface is implemented in frontend/search.html and frontend/search-filters.js, and backend coverage exists in backend/tests/api/test_story_api.py.
1.1.7.1 Authenticated users must have access to a personal dashboard where they can see view counts for each of their published stories. Completed We implemented dashboard and engagement endpoints in backend/app/routers/users.py and backend/app/services/user_service.py, including view-count statistics. The feature is covered in backend/tests/api/test_user_dashboard_api.py, and corresponding UI/UAT support exists in frontend/tests/uat/dashboard.spec.js.
1.1.8.1, 1.2.8.1 Completed We implemented anonymous story sharing in both backend and frontend layers. The story models include is_anonymous in backend/app/models/story.py, masking behavior is handled in backend/app/services/story_service.py, and frontend display logic is implemented in frontend/anonymous.js. We also test this behavior in frontend/anonymous.test.js and backend unit tests.
1.1.9.1, 1.2.9.1 Completed We implemented the timeline view through GET /stories/timeline in backend/app/routers/story.py, with both coordinate-based and place-name-based scoping. The web UI is implemented in frontend/timeline.html, and entry points to the timeline appear in frontend/map.html and frontend/story-detail.html. We cover the API behavior in backend/tests/api/test_story_api.py.
1.2.1.1, 1.2.1.1.1 Completed We implemented in-app recording and transcript review support. The recording interface is part of frontend/story-create.html; transcript preview is provided through POST /transcription/preview in backend/app/routers/transcription.py; and transcription logic is implemented in backend/app/services/transcription_service.py. This workflow is covered in frontend/tests/uat/media.spec.js.
1.2.2.2 The application shall execute geospatial queries to display “Stories near me”. Completed We implemented nearby-story discovery through GET /stories/nearby in backend/app/routers/story.py, backed by geospatial query logic in the service layer. The map interface uses this feature in frontend/map.html, and the API behavior is covered in backend/tests/api/test_story_api.py.
1.2.3.1 The system shall allow users to report posts; admins can review reports, remove posts, and restrict posters. Completed We implemented story reporting in backend/app/routers/story.py and admin moderation endpoints in backend/app/routers/admin.py. This includes listing reports, updating report status, removing stories, and restricting/unrestricting users. We cover these flows in backend/tests/integration/test_story_report_flow.py and backend/tests/integration/test_admin_user_restriction_api.py.
1.2.3.2 The system must display a First Post badge after the user's first successful post. Completed We implemented badge awarding in backend/app/services/badge_service.py and expose badge data through profile/dashboard flows. On the frontend, badge display is implemented in frontend/profile.js, and the first-post badge unlock modal is implemented in frontend/story-create.html. We also cover this scenario in frontend/tests/uat/badge.spec.js.
1.2.5.1, 1.2.5.2, 1.2.7.7, 1.2.7.8 Completed We enforce authenticated media upload, reject unauthenticated upload attempts, and persist uploaded media in object storage with linked database records. This behavior is implemented in backend/app/routers/story.py, backend/app/services/media_validation.py, and the related persistence/service layer, and it is covered by backend API tests.
1.2.7.1, 1.2.7.2, 1.2.7.3, 1.2.7.4, 1.2.7.5, 1.2.7.6 Completed We persist each story with creator identity, required-field validation, post-submission visibility, unique identifiers, and authenticated ownership linkage. This behavior is implemented in backend/app/models/story.py, backend/app/services/story_service.py, and backend/app/routers/story.py, with supporting API and integration tests.
2.1.1.1, 2.2.1.1 Completed We delivered a responsive web application and prepared a Capacitor-based Android mobile application. The repository includes Android build configuration in frontend/android, Capacitor integration in frontend/capacitor.config.json, mobile build scripts in frontend/package.json, and mobile setup/testing instructions in frontend/tests/mobile-e2e/README.md. The release workflow also packages an Android debug APK in .github/workflows/release.yml.
2.1.2.1 The timeline visualization must render changes in under 2 seconds on a standard 1000 Mbits/s internet connection. In Progress We implemented the timeline feature and performed query/performance work, including load/performance-related documentation in backend/tests/load/README.md. However, we do not present a final repository-level benchmark artifact that formally verifies the exact <2 seconds target under the stated condition.
2.2.2.1 User passwords shall meet safety criteria. Completed We implemented password strength validation in backend/app/models/user.py, requiring uppercase, lowercase, digit, and special characters. We also cover this logic explicitly in backend/tests/unit/test_password_validation.py.
2.2.3.1 The application shall allow content upload related to/from all parts of the world. Completed We designed the story model to accept arbitrary coordinates and place names rather than restricting uploads to a fixed region. This support is visible in backend/app/models/story.py, the story creation flow in frontend/story-create.html, and the map/location-based browsing features delivered across the platform.
2.2.4.1 The application shall validate file sizes upon upload and reject files exceeding the defined limit. Completed We implemented upload size validation and 413 handling in backend/app/services/media_validation.py, backend/app/services/auth_service.py, and backend/app/routers/transcription.py. This applies to story media, avatar uploads, and transcription preview uploads, and is covered by backend API tests such as backend/tests/api/test_transcription_api.py.
Team Members

Milestones


Lab Reports


Weekly Meetings

Other Meetings


Templates

Scenarios

Use Case Diagrams

Class Diagram

Sequence Diagrams

Requirements


Implementation

Clone this wiki locally