-
Notifications
You must be signed in to change notification settings - Fork 1
API Documentation with Examples
This document describes the implemented backend API for the Neighborhood Emergency Preparedness Hub MVP. The backend is a Node.js + Express application and exposes JSON endpoints under /api.
Local development: http://localhost:3000
API root: http://localhost:3000/api
All request bodies are JSON.
Content-Type: application/jsonProtected endpoints require a JWT access token in the Authorization header.
Authorization: Bearer <accessToken>The access token is returned by POST /api/auth/login.
Guest-created help requests return a guestAccessToken. Guests can use this token to read or update only that specific help request.
x-help-request-access-token: <guestAccessToken>The same token may also be passed as a query parameter:
GET /api/help-requests/{requestId}?guestAccessToken=<guestAccessToken>
Most errors use the following JSON format:
{
"code": "VALIDATION_ERROR",
"message": "Email format is invalid"
}Some validation endpoints return a details array:
{
"code": "VALIDATION_FAILED",
"message": "Validation failed",
"details": [
"`contact.phone` must be a 10-digit integer starting with 5."
]
}| Status | Meaning |
|---|---|
200 |
Successful read or update |
201 |
Resource created |
400 |
Validation error |
401 |
Missing, invalid, or expired authentication |
403 |
Authenticated but not allowed |
404 |
Resource not found |
409 |
Conflict, such as invalid status transition |
429 |
Too many requests on rate-limited auth endpoints |
500 |
Unexpected server error |
Checks whether the backend is running.
Example request
curl http://localhost:3000/healthExample response
{
"status": "ok"
}Returns API metadata and enabled modules.
Example request
curl http://localhost:3000/apiExample response
{
"name": "Neighborhood Emergency Preparedness Hub API",
"modules": ["auth", "profiles", "help-requests", "availability"]
}Auth endpoints are available under /api/auth.
Creates a new user account and sends an email verification message.
Authentication: Not required
Rate limit: 10 requests per 15 minutes
Request body
{
"email": "user@example.com",
"password": "password123",
"acceptedTerms": true
}Validation rules
| Field | Rule |
|---|---|
email |
Required, valid email format |
password |
Required string, minimum 8 characters |
acceptedTerms |
Must be true
|
Example request
curl -X POST http://localhost:3000/api/auth/signup \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "password123",
"acceptedTerms": true
}'Example success response: 201 Created
{
"message": "User created successfully. Please check your email to verify your account.",
"user": {
"userId": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"isEmailVerified": false,
"acceptedTerms": true,
"createdAt": "2026-04-11T12:00:00.000Z"
}
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_ERROR |
Missing or invalid input |
409 |
EMAIL_ALREADY_EXISTS |
Email is already registered |
429 |
TOO_MANY_REQUESTS |
Rate limit exceeded |
Authenticates a verified user and returns an access token.
Authentication: Not required
Rate limit: 10 requests per 15 minutes
Request body
{
"email": "user@example.com",
"password": "password123"
}Example request
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "password123"
}'Example success response: 200 OK
{
"message": "Login successful",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"userId": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"isEmailVerified": true,
"isAdmin": false,
"adminRole": null
}
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_ERROR |
Missing or invalid input |
401 |
INVALID_CREDENTIALS |
Email or password is wrong |
401 |
EMAIL_NOT_VERIFIED |
Account exists but email is not verified |
429 |
TOO_MANY_REQUESTS |
Rate limit exceeded |
Verifies a user's email address using the token sent by email.
Authentication: Not required
Example request
curl "http://localhost:3000/api/auth/verify-email?token=<verificationToken>"Example success response: 200 OK
{
"message": "Email verified successfully",
"user": {
"userId": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"isEmailVerified": true
}
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_ERROR |
Token is missing |
400 |
INVALID_VERIFICATION_TOKEN |
Token is invalid or expired |
Sends a new verification email.
Authentication: Not required
Rate limit: 10 requests per 15 minutes
Request body
{
"email": "user@example.com"
}Example response: 200 OK
{
"message": "Verification email sent. Please check your inbox."
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_ERROR |
Email is missing |
400 |
USER_NOT_FOUND |
User does not exist |
400 |
EMAIL_ALREADY_VERIFIED |
Email has already been verified |
Sends a password reset email.
Authentication: Not required
Rate limit: 10 requests per 15 minutes
Request body
{
"email": "user@example.com"
}Example response: 200 OK
{
"message": "Password reset email sent. Please check your inbox."
}Resets a user's password using the reset token sent by email.
Authentication: Not required
Rate limit: 10 requests per 15 minutes
Request body
{
"token": "<resetToken>",
"newPassword": "newpassword123"
}Example response: 200 OK
{
"message": "Password reset successfully. You can now log in with your new password."
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_ERROR |
Token missing or password shorter than 8 characters |
400 |
INVALID_RESET_TOKEN |
Token is invalid or expired |
404 |
USER_NOT_FOUND |
User no longer exists |
Returns the current authenticated user.
Authentication: Required
Example request
curl http://localhost:3000/api/auth/me \
-H "Authorization: Bearer <accessToken>"Example response: 200 OK
{
"userId": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"isEmailVerified": true,
"acceptedTerms": true,
"createdAt": "2026-04-11T12:00:00.000Z",
"isAdmin": false,
"adminRole": null
}Returns a logout confirmation. The current implementation is token-based and does not maintain a server-side session blacklist.
Authentication: Required
Example response: 200 OK
{
"message": "Logged out successfully."
}The following endpoints require a valid JWT and admin privileges:
| Method | Path | Description |
|---|---|---|
GET |
/api/auth/admin/users |
Lists up to 100 users |
GET |
/api/auth/admin/help-requests |
Lists up to 100 help requests |
GET |
/api/auth/admin/announcements |
Lists up to 100 announcements |
GET |
/api/auth/admin/stats |
Returns basic system counts |
Example admin stats request
curl http://localhost:3000/api/auth/admin/stats \
-H "Authorization: Bearer <adminAccessToken>"Example response
{
"stats": {
"totalUsers": 15,
"totalHelpRequests": 7,
"totalAnnouncements": 2,
"totalAdmins": 1
}
}Profile endpoints are available under /api/profiles. All /me profile endpoints require authentication.
Most profile endpoints return the full profile bundle:
{
"profile": {
"profileId": "prf_123",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"firstName": "Ada",
"lastName": "Lovelace",
"phoneNumber": "5301234567"
},
"privacySettings": {
"profileVisibility": "PUBLIC",
"healthInfoVisibility": "PRIVATE",
"locationVisibility": "EMERGENCY_ONLY",
"locationSharingEnabled": true
},
"healthInfo": {
"medicalConditions": [],
"chronicDiseases": [],
"allergies": ["Peanut"],
"medications": [],
"bloodType": "A+"
},
"physicalInfo": {
"age": 22,
"gender": "female",
"height": 168,
"weight": 60
},
"locationProfile": {
"address": "Bina B, 3. kat",
"city": "Istanbul",
"country": "Turkiye",
"latitude": 41.0082,
"longitude": 28.9784,
"lastUpdated": "2026-04-11T12:00:00.000Z"
},
"expertise": [
{
"profession": "Doctor",
"expertiseAreas": ["First Aid", "Logistics"]
}
]
}Returns the current user's profile bundle.
Authentication: Required
Example request
curl http://localhost:3000/api/profiles/me \
-H "Authorization: Bearer <accessToken>"Possible errors
| Status | Code | Meaning |
|---|---|---|
401 |
UNAUTHORIZED |
Missing or invalid token |
404 |
NOT_FOUND |
Profile does not exist |
Creates or updates the base profile. When creating a profile for the first time, firstName and lastName are required.
Authentication: Required
Request body
{
"firstName": "Ada",
"lastName": "Lovelace",
"phoneNumber": "5301234567"
}Example request
curl -X PATCH http://localhost:3000/api/profiles/me \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Ada",
"lastName": "Lovelace",
"phoneNumber": "5301234567"
}'Updates physical information.
Authentication: Required
Request body
{
"age": 22,
"gender": "female",
"height": 168,
"weight": 60
}Validation rules
| Field | Rule |
|---|---|
age |
Number, >= 0
|
gender |
String or null
|
height |
Number, > 0
|
weight |
Number, > 0
|
Updates health information.
Authentication: Required
Request body
{
"medicalConditions": ["Asthma"],
"chronicDiseases": [],
"allergies": ["Peanut"],
"medications": ["Inhaler"],
"bloodType": "A+"
}Array fields must be arrays of strings. bloodType must be a string or null.
Updates location information.
Authentication: Required
Request body
{
"address": "Bina B, 3. kat",
"city": "Istanbul",
"country": "Turkiye",
"latitude": 41.0082,
"longitude": 28.9784
}If either latitude or longitude is provided, both must be provided.
Updates privacy settings.
Authentication: Required
Request body
{
"profileVisibility": "PUBLIC",
"healthInfoVisibility": "PRIVATE",
"locationVisibility": "EMERGENCY_ONLY",
"locationSharingEnabled": true
}Allowed visibility values:
PUBLIC
EMERGENCY_ONLY
PRIVATE
Updates or clears the user's profession.
Authentication: Required
Request body
{
"profession": "Doctor"
}To clear the profession:
{
"profession": null
}Replaces the user's expertise areas.
Authentication: Required
Request body
{
"expertiseAreas": ["First Aid", "Logistics"]
}Validation rules
| Field | Rule |
|---|---|
expertiseAreas |
Required array of strings |
| Each item | Non-empty string, maximum 35 characters |
| Array length | Maximum 5 items |
| Duplicates | Not allowed |
Help request endpoints are available under /api/help-requests.
{
"id": "req_123",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"helpTypes": ["first_aid", "fire_brigade"],
"otherHelpText": "",
"affectedPeopleCount": 3,
"riskFlags": ["fire", "electric_hazard"],
"vulnerableGroups": ["children", "pregnant"],
"description": "Apartment entrance blocked, one person bleeding.",
"bloodType": "A+",
"location": {
"country": "turkiye",
"city": "istanbul",
"district": "besiktas",
"neighborhood": "levazim",
"extraAddress": "Bina B, 3. kat, arka giris"
},
"contact": {
"fullName": "Ayse Yilmaz",
"phone": 5052318546,
"alternativePhone": 5321234567
},
"consentGiven": true,
"needType": "first_aid",
"status": "SYNCED",
"internalStatus": "PENDING",
"createdAt": "2026-04-11T12:00:00.000Z",
"resolvedAt": null,
"isSavedLocally": false,
"helper": null
}Public-facing status values:
| Status | Meaning |
|---|---|
PENDING_SYNC |
Request was saved locally and has not been synced |
SYNCED |
Request exists on the backend |
MATCHED |
Request is assigned or in progress internally |
RESOLVED |
Request was resolved |
CANCELLED |
Request was cancelled |
Creates a help request. This endpoint supports both authenticated users and guests.
Authentication: Optional
Request body
{
"helpTypes": ["first_aid", "fire_brigade"],
"otherHelpText": "",
"affectedPeopleCount": 3,
"riskFlags": ["fire", "electric_hazard"],
"vulnerableGroups": ["children", "pregnant"],
"description": "Apartment entrance blocked, one person bleeding.",
"bloodType": "A+",
"location": {
"country": "turkiye",
"city": "istanbul",
"district": "besiktas",
"neighborhood": "levazim",
"extraAddress": "Bina B, 3. kat, arka giris"
},
"contact": {
"fullName": "Ayse Yilmaz",
"phone": 5052318546,
"alternativePhone": 5321234567
},
"consentGiven": true
}Example authenticated request
curl -X POST http://localhost:3000/api/help-requests \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{
"helpTypes": ["first_aid", "fire_brigade"],
"affectedPeopleCount": 3,
"riskFlags": ["fire", "electric_hazard"],
"vulnerableGroups": ["children", "pregnant"],
"description": "Apartment entrance blocked, one person bleeding.",
"bloodType": "A+",
"location": {
"country": "turkiye",
"city": "istanbul",
"district": "besiktas",
"neighborhood": "levazim",
"extraAddress": "Bina B, 3. kat, arka giris"
},
"contact": {
"fullName": "Ayse Yilmaz",
"phone": 5052318546,
"alternativePhone": 5321234567
},
"consentGiven": true
}'Example guest request
curl -X POST http://localhost:3000/api/help-requests \
-H "Content-Type: application/json" \
-d '{
"helpTypes": ["food"],
"affectedPeopleCount": 1,
"riskFlags": [],
"vulnerableGroups": [],
"description": "Need food and water.",
"location": {
"country": "turkiye",
"city": "istanbul",
"district": "besiktas",
"neighborhood": "levazim",
"extraAddress": ""
},
"contact": {
"fullName": "Guest User",
"phone": 5052318546
},
"consentGiven": true
}'Example success response for guest: 201 Created
{
"request": {
"id": "req_123",
"userId": null,
"helpTypes": ["food"],
"otherHelpText": "",
"affectedPeopleCount": 1,
"riskFlags": [],
"vulnerableGroups": [],
"description": "Need food and water.",
"bloodType": "",
"location": {
"country": "turkiye",
"city": "istanbul",
"district": "besiktas",
"neighborhood": "levazim",
"extraAddress": ""
},
"contact": {
"fullName": "Guest User",
"phone": 5052318546,
"alternativePhone": null
},
"consentGiven": true,
"needType": "food",
"status": "SYNCED",
"internalStatus": "PENDING",
"createdAt": "2026-04-11T12:00:00.000Z",
"resolvedAt": null,
"isSavedLocally": false,
"helper": null
},
"warnings": [],
"guestAccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Validation rules
| Field | Rule |
|---|---|
helpTypes |
Required array of non-empty strings |
affectedPeopleCount |
Required integer, >= 1
|
riskFlags |
Optional array of strings |
vulnerableGroups |
Optional array of strings |
description |
Required string, maximum 2000 characters |
bloodType |
Optional string, maximum 10 characters |
consentGiven |
Required boolean, must be true
|
location.country |
Required string |
location.city |
Required string |
location.district |
Required string |
location.neighborhood |
Required string |
location.extraAddress |
Optional string, maximum 500 characters |
contact.fullName |
Required string |
contact.phone |
Required 10-digit integer starting with 5
|
contact.alternativePhone |
Optional 10-digit integer starting with 5
|
Lists the authenticated user's help requests.
Authentication: Required
Example request
curl http://localhost:3000/api/help-requests \
-H "Authorization: Bearer <accessToken>"Example response: 200 OK
{
"requests": [
{
"id": "req_123",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"helpTypes": ["food"],
"description": "Need food and water.",
"status": "SYNCED",
"internalStatus": "PENDING",
"createdAt": "2026-04-11T12:00:00.000Z",
"resolvedAt": null,
"isSavedLocally": false,
"helper": null
}
]
}Returns a single help request.
Authentication: Required for registered users. Guest-created requests can be read using x-help-request-access-token.
Example authenticated request
curl http://localhost:3000/api/help-requests/req_123 \
-H "Authorization: Bearer <accessToken>"Example guest request
curl http://localhost:3000/api/help-requests/req_123 \
-H "x-help-request-access-token: <guestAccessToken>"Example response
{
"request": {
"id": "req_123",
"userId": null,
"helpTypes": ["food"],
"description": "Need food and water.",
"status": "SYNCED",
"internalStatus": "PENDING",
"helper": null
}
}Updates a help request status.
Authentication: Required for registered users. Guest-created requests can be updated using x-help-request-access-token.
Request body
{
"status": "RESOLVED"
}Allowed status update values:
SYNCED
RESOLVED
Example request
curl -X PATCH http://localhost:3000/api/help-requests/req_123/status \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{ "status": "RESOLVED" }'Example response
{
"request": {
"id": "req_123",
"status": "RESOLVED",
"internalStatus": "RESOLVED",
"resolvedAt": "2026-04-11T12:20:00.000Z",
"isSavedLocally": false
}
}Possible errors
| Status | Code | Meaning |
|---|---|---|
400 |
VALIDATION_FAILED |
Invalid status value |
401 |
UNAUTHORIZED |
Missing auth or guest token |
403 |
FORBIDDEN |
Guest token belongs to another request |
404 |
NOT_FOUND |
Request not found |
409 |
INVALID_STATUS_TRANSITION |
Resolved request cannot move back to synced |
Availability endpoints are available under /api/availability. All availability endpoints require authentication.
Returns the current user's volunteer availability and active assignment, if any.
Authentication: Required
Example request
curl http://localhost:3000/api/availability/status \
-H "Authorization: Bearer <accessToken>"Example response with no volunteer record
{
"isAvailable": false,
"volunteer": null,
"assignment": null
}Example response with availability
{
"isAvailable": true,
"volunteer": {
"volunteer_id": "vol_123",
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"is_available": true,
"last_known_latitude": 41,
"last_known_longitude": 29,
"location_updated_at": "2026-04-11T12:00:00.000Z"
},
"assignment": {
"assignment_id": "asg_123",
"volunteer_id": "vol_123",
"request_id": "req_123",
"assigned_at": "2026-04-11T12:00:00.000Z",
"is_cancelled": false,
"need_type": "first_aid",
"description": "Apartment entrance blocked, one person bleeding.",
"request_status": "ASSIGNED",
"requester_email": "requester@example.com"
}
}Sets volunteer availability. If the user becomes available, the backend may automatically assign the oldest matching pending help request.
Authentication: Required
Request body
{
"isAvailable": true,
"latitude": 41.0082,
"longitude": 28.9784
}latitude and longitude are optional numbers.
Example request
curl -X POST http://localhost:3000/api/availability/toggle \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{
"isAvailable": true,
"latitude": 41.0082,
"longitude": 28.9784
}'Example response
{
"volunteer": {
"volunteer_id": "vol_123",
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"is_available": true,
"last_known_latitude": 41.0082,
"last_known_longitude": 28.9784,
"location_updated_at": "2026-04-11T12:00:00.000Z"
},
"assignment": null
}Syncs locally stored availability records and sets the volunteer status to the latest timestamped record.
Authentication: Required
Request body
{
"records": [
{
"isAvailable": true,
"timestamp": "2026-04-11T11:50:00.000Z"
},
{
"isAvailable": false,
"timestamp": "2026-04-11T12:00:00.000Z"
}
]
}Example response
{
"volunteer": {
"volunteer_id": "vol_123",
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"is_available": false
},
"assignment": null
}Returns the volunteer's current active assignment.
Authentication: Required
Example request
curl http://localhost:3000/api/availability/my-assignment \
-H "Authorization: Bearer <accessToken>"Example response
{
"assignment": {
"assignment_id": "asg_123",
"volunteer_id": "vol_123",
"request_id": "req_123",
"need_type": "first_aid",
"description": "Apartment entrance blocked, one person bleeding.",
"request_status": "ASSIGNED",
"help_types": ["first_aid", "fire_brigade"],
"affected_people_count": 3,
"risk_flags": ["fire", "electric_hazard"],
"vulnerable_groups": ["children", "pregnant"],
"blood_type": "A+",
"contact_full_name": "Ayse Yilmaz",
"contact_phone": "5052318546",
"contact_alternative_phone": "5321234567",
"request_country": "turkiye",
"request_city": "istanbul",
"request_district": "besiktas",
"request_neighborhood": "levazim",
"request_extra_address": "Bina B, 3. kat, arka giris",
"requester_email": "requester@example.com",
"requester_first_name": "Ada",
"requester_last_name": "Lovelace"
}
}Cancels the volunteer's current assignment and returns the help request to pending status. If another matching request exists, a new assignment may be returned.
Authentication: Required
Example request
curl -X POST http://localhost:3000/api/availability/assignments/asg_123/cancel \
-H "Authorization: Bearer <accessToken>"Example response
{
"message": "Assignment cancelled and request put back to pending",
"newAssignment": null
}Marks the assigned help request as resolved. If another matching request exists, a new assignment may be returned.
Authentication: Required
Request body
{
"requestId": "req_123"
}Example request
curl -X POST http://localhost:3000/api/availability/assignments/resolve \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{ "requestId": "req_123" }'Example response
{
"message": "Request marked as resolved",
"newAssignment": null
}| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/health |
No | Backend health check |
GET |
/api |
No | API metadata |
POST |
/api/auth/signup |
No | Create account |
POST |
/api/auth/login |
No | Login and receive JWT |
GET |
/api/auth/verify-email |
No | Verify email token |
POST |
/api/auth/resend-verification |
No | Resend verification email |
POST |
/api/auth/forgot-password |
No | Send reset password email |
POST |
/api/auth/reset-password |
No | Reset password |
GET |
/api/auth/me |
Yes | Current user |
POST |
/api/auth/logout |
Yes | Logout confirmation |
GET |
/api/auth/admin/users |
Admin | List users |
GET |
/api/auth/admin/help-requests |
Admin | List help requests |
GET |
/api/auth/admin/announcements |
Admin | List announcements |
GET |
/api/auth/admin/stats |
Admin | Basic stats |
GET |
/api/profiles/me |
Yes | Get profile bundle |
PATCH |
/api/profiles/me |
Yes | Create/update base profile |
PATCH |
/api/profiles/me/physical |
Yes | Update physical information |
PATCH |
/api/profiles/me/health |
Yes | Update health information |
PATCH |
/api/profiles/me/location |
Yes | Update location information |
PATCH |
/api/profiles/me/privacy |
Yes | Update privacy settings |
PATCH |
/api/profiles/me/profession |
Yes | Update profession |
PUT |
/api/profiles/me/expertise-areas |
Yes | Replace expertise areas |
POST |
/api/help-requests |
Optional | Create help request |
GET |
/api/help-requests |
Yes | List own help requests |
GET |
/api/help-requests/{requestId} |
Yes or guest token | Get one help request |
PATCH |
/api/help-requests/{requestId}/status |
Yes or guest token | Update request status |
GET |
/api/availability/status |
Yes | Get availability and assignment |
POST |
/api/availability/toggle |
Yes | Set availability |
POST |
/api/availability/sync |
Yes | Sync offline availability records |
GET |
/api/availability/my-assignment |
Yes | Get active assignment |
POST |
/api/availability/assignments/{assignmentId}/cancel |
Yes | Cancel assignment |
POST |
/api/availability/assignments/resolve |
Yes | Resolve assigned request |
- The API is modularized into
auth,profiles,help-requests, andavailability. - Authentication uses JWT bearer tokens.
- Help request creation supports both authenticated users and guests.
- Guest users receive a request-specific access token for tracking their own help request.
- Volunteer availability can automatically create assignments for pending help requests.
- Profile data is separated into base profile, physical information, health information, location, privacy settings, profession, and expertise areas.
🎓 Team Members
- Weekly Meeting 1 (16.02.2026)
- Weekly Meeting 2 (25.02.2026)
- Weekly Meeting 3 (04.03.2026)
- Weekly Meeting 4 (11.03.2026)
- Weekly Meeting 5 (18.03.2026)
- Weekly Meeting 6 (25.03.2026)
- Weekly Meeting 7 (01.04.2026)
- Weekly Meeting 8 (08.04.2026)
- Weekly Meeting 9 (15.04.2026)
- Weekly Meeting 10 (29.04.2026)
- Weekly Meeting 11 (06.05.2026)
- Weekly Meeting 12 (13.05.2026)
- 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)
- Scenario 1: Injured Neighbor
- Scenario 2: Volunteer Users Help Offer
- Scenario 3: User Registration and Profile Setup
- Use Case Diagram (Final)
- Use Case Diagram for Scenerio 1 ‐ Sub‐group 2
- Use Case Diagram for Scenerio 2 ‐ Sub‐group 3
- Use Case Diagram for Scenerio 3 ‐ Sub‐group 1
- Sequence Diagram - Alper Kartkaya
- Sequence Diagram - Kağan Can
- Sequence Diagram - Mehmet Can Gürbüz
- Sequence Diagram - Ethem Erinç Cengiz
- Sequence Diagram - Berat Sayın
- Sequence Diagram - Gülce Tahtasız
- Sequence Diagram - Rojhat Delibaş