132 lines
6.2 KiB
Markdown
132 lines
6.2 KiB
Markdown
# Who Need Help — product specification
|
|
|
|
Status: MVP specification for OpenAI Build Week, 2026-07-18.
|
|
|
|
## Purpose
|
|
|
|
Who Need Help connects an adult who needs urgent, practical nearby help with an
|
|
adult volunteer who can provide it without a mandatory fee.
|
|
|
|
The first-priority scenario lets a requester ask a nearby person to pick up and
|
|
deliver medication that has already been legally purchased or reserved. The
|
|
urgent-help mode also covers non-emergency roadside tasks after people and
|
|
vehicles are away from active danger. The product does not diagnose, prescribe,
|
|
recommend, sell, reimburse, or handle controlled substances.
|
|
|
|
## Primary user journey
|
|
|
|
1. A user creates an account and self-attests that they are at least 18.
|
|
2. The user creates an urgent request with a title, instructions, approximate
|
|
public location, expiry time, and a validated urgent-help category.
|
|
3. Nearby helpers see the request on a list and map.
|
|
4. One helper accepts it; requester and helper receive a private matched chat.
|
|
5. Either party may explicitly start live location sharing for the active
|
|
match. A browser shares only while its page remains open; Android may
|
|
continue through a visible foreground-service notification after the app is
|
|
minimized.
|
|
6. The requester gives the helper a one-time handover code after receiving help.
|
|
7. Both sides confirm completion and may leave a double-blind review.
|
|
8. The requester may send a voluntary thank-you through a helper-provided
|
|
external link. The platform does not collect or route money.
|
|
|
|
## Request lifecycle
|
|
|
|
`open → matched → in_progress → completed`
|
|
|
|
Terminal alternatives are `cancelled` and `expired`. The MVP permits one active
|
|
helper per request. Every state transition is authorized and recorded.
|
|
|
|
## MVP scope
|
|
|
|
- Email magic-link/password authentication.
|
|
- English default interface plus Ukrainian and Russian translations.
|
|
- Medicine pickup/delivery requests.
|
|
- Safe, non-emergency fuel delivery, car-wheel help, bicycle and motorcycle
|
|
problems, vehicle breakdown help, and support after a secured road incident.
|
|
- Hierarchical, data-driven categories with validated structured request fields.
|
|
- Request list, filters, details, and a MapLibre map.
|
|
- Matching, presence, chat, and consent-driven live location updates.
|
|
- Configurable location privacy.
|
|
- One-time handover confirmation.
|
|
- Double-blind reviews and a reputation summary.
|
|
- Category proposals and voting.
|
|
- Separate social activities for coffee, cinema, public walks, and hikes.
|
|
- Organizer-approved activity membership, capacity-safe joins, private group
|
|
chat, and exact meeting coordinates limited to approved participants.
|
|
- Bidirectional blocks, scoped request/assignment/message reports, and audited
|
|
report-evidence access.
|
|
- Role-protected report, account, abuse-signal, request, role, and category
|
|
moderation.
|
|
- A helper leaderboard based primarily on unique location-supported and
|
|
handover-verified counterpart counts.
|
|
- Configurable PostgreSQL-backed action limits shared by every web replica.
|
|
- PWA installation and foreground geolocation.
|
|
- Native Android WebView client for the same-origin authenticated map and
|
|
matched chat, plus a user-started native location foreground service with a
|
|
persistent Stop notification; reproducible debug APK build.
|
|
- Admin-only local Codex moderation batch for category proposals.
|
|
- Manual public social links plus optional verified GitHub linking. Manual
|
|
links never receive a verified badge, and OAuth access tokens are not stored.
|
|
|
|
## Explicitly outside the MVP
|
|
|
|
- Medical advice, prescriptions, pharmacy integrations, medication sale, and
|
|
controlled-substance delivery.
|
|
- Platform payments, escrow, fees, or compulsory compensation.
|
|
- Background PWA or unattended location tracking.
|
|
- Multiple simultaneous helpers on one request.
|
|
- Production-signed Android release, store publication, and native iOS
|
|
application.
|
|
- OAuth verification for providers other than GitHub and automated
|
|
social-network identity scoring.
|
|
- Automatic punitive abuse enforcement and unapproved production thresholds.
|
|
- Claims that identity, safety, or fraud prevention is perfect.
|
|
|
|
## Extensibility
|
|
|
|
Categories form a moderated tree. The seeded urgent-delivery and roadside-help
|
|
trees already cover medicine pickup, fuel delivery, wheel help, bicycle
|
|
punctures and chains, motorcycle chains and tyres, vehicle breakdowns, and
|
|
secured incident support. Each category adds validated text, select, and
|
|
boolean fields through its stored schema without changing the request form or
|
|
core state machine. Moderated proposals can extend the tree further.
|
|
|
|
User-provided social links are visibly marked unverified. A separately
|
|
configured GitHub OAuth flow can set `verified_at` after provider authorization;
|
|
one provider account cannot be linked to two local accounts. The provider
|
|
access token is discarded rather than stored.
|
|
|
|
## Privacy settings
|
|
|
|
Every user chooses one location visibility level:
|
|
|
|
- `hidden`
|
|
- `approximate_public` (default)
|
|
- `exact_for_active_match`
|
|
- `exact_public` (explicit per-request opt-in)
|
|
|
|
Public discovery uses either no marker, an approximate marker, or an explicitly
|
|
public exact marker. Exact active coordinates are ephemeral and no route
|
|
history is stored. The current point is deleted when sharing ends, a match
|
|
becomes terminal, or either participant blocks the other. Derived trust signals
|
|
may be retained.
|
|
|
|
The data model reserves a direct-message policy for a future general messaging
|
|
feature. The current product has no unsolicited inbox: chat exists only for
|
|
matched urgent-help participants or members of an organizer-approved activity,
|
|
and a block prevents new discovery, joins, and messages.
|
|
|
|
## Success criteria for the hackathon
|
|
|
|
- A new user can complete the primary journey locally in two browser sessions.
|
|
- The debug Android client can authenticate against the local stack and use
|
|
the request map, matched chat, and foreground sharing on an emulator.
|
|
- The same immutable image runs as both web and worker roles.
|
|
- Two web replicas and two worker replicas run concurrently in normal
|
|
development.
|
|
- A request, chat message, and location update reach clients connected to
|
|
different web replicas.
|
|
- The repository contains reproducible Compose and Kubernetes deployment paths.
|
|
- The feedback page records the main local Codex session identifier for the
|
|
Build Week submission.
|