Table of Contents
28 — FAQs, feedback and support
Technical reference. For task-based help, see the corresponding user guide.
Documentation status: reviewed against implementation · Reviewed: 2026-07-21 · Primary users: family and coach (tickets: coach only) · Surfaces: mobile web, coach portal and platform API
Purpose
Support is a set of deliberately different channels: published self-service FAQs, one-way product feedback, public login help, configured email contact, and a threaded support-ticket inbox for coaches. The UI must not imply that every channel has the same reply or role coverage.
Entry points
| Persona/surface | Entry points |
|---|---|
| Family mobile | /family/support, /family/faqs, /family/feedback, external user-guide link and login-screen help after repeated failure. |
| Coach mobile | /coach/support, /coach/faqs, /coach/feedback and external user-guide link. |
| Coach portal | Support overview → User guides, Feedback, Tickets, FAQs or Contact; unread ticket count appears in navigation. |
| Support owner | Admin support-ticket APIs and FAQ publishing data outside the coach portal. |
FAQs
GET /support/faqs?audience=family|coachreturns published entries applicable to the requested audience (includingboth), in configured display order.- The platform requires authentication. Families may request the family audience; coaches may request coach or family guidance; super-admin can request either.
- Mobile presents an accordion with loading, error and no-published-FAQ states.
- The coach portal requests coach FAQs, supports text search and topic filtering, initially shows five matches, and offers Show all/Show fewer.
- FAQ content is read-only in the coach portal.
Product feedback
Submission
- Family route:
POST /app-feedback; coach route:POST /coach/app-feedback. - The user selects General, Bug, Feature or Content, then enters 5–2,000 characters.
- Device platform and application version are attached when available to improve triage.
- You may contact me controls whether support may use the account email to follow up.
- Success replaces the form with a receipt state; failure preserves a retryable form.
Channel semantics
Feedback is a one-way product input. The submitter does not receive a thread, status timeline or in-app support reply. A user who needs a conversation should use the available contact or ticket channel.
Login help
- After repeated sign-in failure, the login screen can submit
POST /auth/login-supportwithout an authenticated session. - The request requires a valid email and 5–2,000 characters of detail and can include attempt/device/app context.
- The endpoint is rate-limited and returns a neutral receipt so it does not disclose whether an account exists.
- Login help is operational recovery, not an alternate authentication mechanism.
Contact support
Mobile support opens a mailto: link to VITE_SUPPORT_EMAIL or the product fallback address, with a role-appropriate subject. If the device has no mail client, the operating system/browser controls the failure state; no ticket is silently created.
Public user guides
- Canonical URL:
https://userguides.littlesbabytracker.com. - The coach portal uses an HTTPS anchor with
target=“_blank”andrel=“noopener noreferrer”, preserving the current portal session in its existing tab. - Family and coach mobile Support screens call
openExternalUrl, which sendsexternal.openthrough the native bridge. The wrapper delegates to the operating system with React NativeLinking.openURL, so the guide is not loaded inside the app WebView. - Browser-only mobile development falls back to
window.open(…, “_blank”, “noopener,noreferrer”). - A false external-open result leaves the Support screen available and shows an inline retryable error.
- The guides are public; no application access token, DokuWiki credential or session value is appended to the URL.
Coach support tickets
Create and review
- A coach creates a ticket with category
general,account,billing,technicalorclientAccess. - Subject is 3–140 characters and the first message is 1–4,000 characters.
- The portal lists/searches tickets and offers Active, All and Resolved views plus open/in-progress/resolved summaries.
- Statuses are
open,inProgress,doneandarchived.
Conversation, unread and lifecycle
- Selecting a ticket loads the non-internal chronological thread and marks support-authored messages seen.
- Unread counts include only non-internal support messages newer than the coach's
coachLastSeenAt. - A coach can reply to open, in-progress or done tickets. Replying to
donereopens it asopenand clearsresolvedAt. - An owner/support reply to
donechanges it toinProgress. - Archived tickets cannot receive another message.
- Configured transactional email may notify internal support on coach activity and the coach on support replies; email delivery is operationally best-effort.
Validation and user-visible states
| State | Behaviour |
|---|---|
| No FAQs/matches | Audience-appropriate empty message; filters can be cleared. |
| FAQ load error | Retryable API error; other support channels remain available. |
| Invalid feedback/ticket | Inline length/category validation prevents submission. |
| Feedback accepted | Clear confirmation; no false threaded-ticket promise. |
| Ticket unread | Badge/count persists until the ticket is opened/seen. |
| Done ticket reply | Ticket reopens to open. |
| Archived ticket | Thread remains historical; reply is disabled/rejected. |
| Login help throttled | Neutral failure/receipt handling does not reveal account state. |
| User guides cannot open | Support remains visible and mobile shows an inline retryable error. |
Platform API contract
| Method and route | Purpose |
|---|---|
GET /support/faqs | Read published FAQs for an authorized audience. |
POST /app-feedback | Submit family feedback. |
POST /coach/app-feedback | Submit coach feedback. |
POST /auth/login-support | Submit rate-limited unauthenticated login help. |
GET /coach/support-tickets | List the actor coach's tickets. |
GET /coach/support-tickets/unread-count | Aggregate unseen support replies. |
POST /coach/support-tickets | Create a coach ticket. |
POST /coach/support-tickets/:id/messages | Add coach reply; reopen a done ticket. |
POST /coach/support-tickets/:id/seen | Update the actor's seen watermark. |
GET/PATCH/POST /admin/support-tickets… | Owner/support list, status and reply operations. |
Authorization and privacy
- Ticket list/read/reply is limited to the coach who created the ticket; owner/support APIs require super-admin.
- Internal support messages are filtered from the coach presenter and do not inflate coach unread counts.
- Although the shared ticket model contains a
sourceRolecapable of representing family, there is currently no family ticket route or UI. Families use feedback, FAQs, login help or contact email. - Contact consent is stored with feedback and must be honored before follow-up using the account email.
- Login-help responses are deliberately non-enumerating and rate limited.
Do not advertise support tickets to family users yet. A broad domain type is not a user-facing capability; the implemented ticket routes enforce a coach actor and ownership of the thread.
Acceptance checklist
- [ ] FAQ audience and published-state filters are enforced server-side.
- [ ] Search/topic/show-more states work without changing FAQ authorization.
- [ ] Feedback enforces category, 5–2,000 characters and contact consent.
- [ ] Login help is rate-limited, neutral and usable while signed out.
- [ ] Ticket validation, filters, unread watermark and status summaries agree with API data.
- [ ] Replying to done reopens; archived reply is rejected.
- [ ] Coach sees only their tickets and no internal support message.
- [ ] Family UI makes no ticket-thread promise.
- [ ] Admin opens User guides in a new tab; family and coach mobile use the native external-browser bridge.
- [ ] User-guide URLs contain no application credential or account context.
Source evidence
- Mobile web:
mobile-web/src/routes/SupportScreen.tsx,mobile-web/src/routes/AppFeedbackScreen.tsx,mobile-web/src/api/login-support-email.ts,mobile-web/src/App.tsx - Coach portal:
admin-web/src/routes/SupportPanel.tsx,admin-web/src/routes/SupportTicketsPanel.tsx,admin-web/src/routes/FAQsContent.tsx - Platform:
platform/packages/shared/src/support-faqs.ts,support-tickets.ts,app-feedback.ts,platform/apps/api/src/routes/support-faq-routes.ts,platform/apps/api/src/routes/auth-routes.ts,platform/apps/api/src/routes/coach-routes.ts,platform/apps/api/src/services/support-ticket-service.ts
