Skip to content

Feature Inventory ​

Status legend: ✅ fully wired · ⚠️ partially wired · ❌ not wired

Source of truth: backend controllers in apps/backend/src/, mobile screens in apps/mobile/src/screens/, admin pages in apps/admin/src/pages/. Endpoints below are relative to /api/v1.

Auth ​

FeatureEndpoint(s)ClientStatus
Register (email + password + name)POST /auth/registerauthApi.register (mobile) → RegisterScreen✅
LoginPOST /auth/loginauthApi.login (mobile) → LoginScreen; POST /admin/auth/login (admin) → LoginPage✅
Refresh tokenPOST /auth/refresh, POST /admin/auth/refreshauthApi.refresh (mobile), admin api.ts interceptor✅
LogoutPOST /auth/logoutauthApi.logout (mobile, via AuthContext)✅
Fetch current userGET /auth/meauthApi.getMe (mobile, via AuthContext)✅
Verify email (token from email)POST /auth/verify-emailauthApi.verifyEmail — no dedicated screen yet⚠️ (client wrapped, no UI)
Resend verification emailPOST /auth/resend-verificationauthApi.resendVerification — no dedicated UI⚠️
Forgot passwordPOST /auth/forgot-passwordauthApi.forgotPassword — no dedicated screen yet⚠️
Reset password (token from email)POST /auth/reset-passwordauthApi.resetPassword — no dedicated screen yet⚠️

Tasks ​

FeatureEndpoint(s)ClientStatus
Create taskPOST /taskstasksApi.create → CreateTaskScreen✅
Browse tasks nearby (geo filter)GET /tasks?longitude&latitude&radiusKmtasksApi.list → MapScreen✅
View task detailGET /tasks/:idtasksApi.getById — used by inbox/chat flows⚠️ (no standalone detail screen)
Edit taskPUT /tasks/:idtasksApi.update — no UI screen yet⚠️
Delete taskDELETE /tasks/:idtasksApi.remove — no UI action yet⚠️
Accept task (helper applies)POST /tasks/:id/accepttasksApi.accept — used by interaction flow⚠️
Mark task complete (helper)POST /tasks/:id/completetasksApi.complete — no dedicated UI trigger⚠️
Confirm completion (creator)PUT /tasks/:id/confirmtasksApi.confirm — no dedicated UI trigger⚠️
List my posted tasksGET /users/me/tasksusersApi.getMyTasks → ProfileScreen✅
List tasks I helped withGET /users/me/helpedusersApi.getMyHelped → ProfileScreen✅

Interactions (messaging + time proposals) ​

Every task with an accepted helper opens a TaskInteraction container that owns messages and time-proposal negotiation.

FeatureEndpoint(s)ClientStatus
Inbox (all my interactions)GET /users/:userId/interactionsinteractionsApi.listUserInteractions → InteractionsInboxScreen✅
Task interaction threadGET /tasks/:taskId/interactionsinteractionsApi.listTaskInteractions → ChatScreen✅
Send messagePOST /tasks/:taskId/messagesinteractionsApi.createMessage → ChatScreen✅
List messages (paginated)GET /tasks/:taskId/messagesinteractionsApi.listMessages → ChatScreen✅
Mark message as readPATCH /tasks/:taskId/messages/:messageId/readinteractionsApi.markMessageAsRead → ChatScreen✅
Create time proposalPOST /tasks/:taskId/time-proposalsinteractionsApi.createTimeProposal → TimeProposalScreen✅
List time proposalsGET /tasks/:taskId/time-proposalsinteractionsApi.listTimeProposals → TimeProposalScreen✅
Accept proposalPOST /tasks/:taskId/time-proposals/:proposalId/acceptinteractionsApi.acceptTimeProposal → TimeProposalScreen✅
Reject proposalPOST /tasks/:taskId/time-proposals/:proposalId/rejectinteractionsApi.rejectTimeProposal → TimeProposalScreen✅
Counter proposalPOST /tasks/:taskId/time-proposals/:proposalId/counterinteractionsApi.counterTimeProposal → TimeProposalScreen✅

Points ​

FeatureEndpoint(s)ClientStatus
Get balanceGET /users/:userId/pointspointsApi.getBalance → ProfileScreen, RewardsScreen✅
Transaction historyGET /users/:userId/points/historypointsApi.getHistory — no dedicated screen yet⚠️ (client wrapped, no UI)
Earn on task completion(server-side, no direct endpoint)Emitted by TasksService.confirm✅

Partners & Rewards ​

FeatureEndpoint(s)ClientStatus
Browse partners + offersGET /partners, GET /partners/:idpartnersApi.list, partnersApi.getById → RewardsScreen✅
Redeem offer with pointsPOST /partners/:id/redeempartnersApi.redeem → RewardsScreen✅
List my redemptionsnot implemented—❌ (deferred)

Profiles ​

FeatureEndpoint(s)ClientStatus
View own profileGET /auth/meauthApi.getMe → ProfileScreen✅
View public profileGET /users/:idusersApi.getById → PublicProfileScreen✅
Edit profile (name, bio, avatar)PUT /users/meusersApi.updateMe → EditProfileScreen✅
Predefined avatar pickerGET /users/avatarsusersApi.getAvatars → EditProfileScreen✅

Admin panel (apps/admin) ​

FeatureEndpoint(s)ClientStatus
Admin login / refreshPOST /admin/auth/login, POST /admin/auth/refreshadmin api.login → LoginPage✅
Dashboard statsGET /admin/statsapi.getStats → Dashboard✅
List users (search / filter)GET /admin/usersapi.getUsers → UsersPage✅
Verify user (approve/reject inline)PATCH /admin/users/:id/verifyapi — used by admin flow✅
Suspend / unsuspend userPATCH /admin/users/:id/suspend (body { suspended, reason })api.suspendUser, api.unsuspendUser → UsersPage (see Spec 003)✅
User activities logGET /admin/users/:id/activitiesapi — used in user detail✅
Verification queueGET /admin/verifications, POST /admin/verifications/:id/approve, POST /admin/verifications/:id/rejectapi.getVerificationRequests, api.approveVerification, api.rejectVerification → VerificationsPage✅
Points adjustmentPOST /admin/points/adjustapi.adjustPoints → PointsPage✅
Points transactions listGET /admin/points/transactionsapi.getPointsTransactions → PointsPage✅
Audit logsGET /admin/audit-logsapi.getAuditLogs → AuditLogsPage✅
Partner CRUDGET/POST/PUT/DELETE /admin/partners, POST/PUT /admin/partners/:id/offersadmin api — CRUD helpers⚠️ (backend ready, admin page pending)

Static / drawer screens (no backend calls) ​

AboutScreen, FaqScreen, ContactScreen, FeedbackScreen — informational drawer entries. Contact/Feedback have no submission endpoint yet.

Gaps traced to Specs 001–003 ​

Specs 001, 002, and 003 identified the mobile/admin wiring gaps below. All three specs shipped and are marked COMPLETE, so the gaps listed here are closed. They remain in this doc as a reference for anyone auditing older PRs.

SpecOriginal gapResolution
001Only a handful of the 30+ backend endpoints had a mobile client wrapperapps/mobile/src/services/api.ts now exposes authApi, tasksApi, usersApi, pointsApi, partnersApi, interactionsApi — every endpoint listed above has a typed method
002MapScreen, ProfileScreen, RewardsScreen, EditProfileScreen made no API callsAll four now fetch/mutate through the client with loading + error states
003Admin called POST /admin/users/:id/unsuspend, which never existedBoth suspend and unsuspend now PATCH /admin/users/:id/suspend with { suspended, reason }

Remaining ⚠️ entries above are UI-side follow-ups (screens not yet built) — not API gaps.

Good Deeds - Nachbarschaftshilfe-App