feat: expand homepage with interactive demo map
Some checks are pending
Quality / full-local-gates (push) Waiting to run

This commit is contained in:
SimpleTest 2026-07-21 20:13:55 +03:00
parent 4f2a9aaacc
commit ff856f637f
10 changed files with 1914 additions and 309 deletions

View File

@ -144,10 +144,54 @@
}
.aid-map {
position: relative;
min-height: 22rem;
border-radius: 1.25rem;
overflow: hidden;
border: 1px solid color-mix(in oklab, currentColor 12%, transparent);
background:
linear-gradient(135deg, color-mix(in oklab, var(--color-success) 8%, transparent), transparent),
var(--color-base-200);
}
.home-demo-map {
min-height: 32rem;
border-radius: 2rem;
}
.home-demo-map[data-map-ready="false"]::after {
position: absolute;
inset: 50% auto auto 50%;
width: 2rem;
height: 2rem;
content: "";
border: 3px solid color-mix(in oklab, var(--color-success) 25%, transparent);
border-top-color: var(--color-success);
border-radius: 9999px;
transform: translate(-50%, -50%);
animation: home-map-spin 800ms linear infinite;
}
.home-demo-map[data-map-ready="true"]::after {
display: none;
}
@keyframes home-map-spin {
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@media (max-width: 47.999rem) {
.home-demo-map {
min-height: 24rem;
}
}
@media (prefers-reduced-motion: reduce) {
.home-demo-map[data-map-ready="false"]::after {
animation: none;
}
}
.help-card {

View File

@ -24,7 +24,7 @@ import {Socket} from "phoenix"
import {LiveSocket} from "phoenix_live_view"
import {hooks as colocatedHooks} from "phoenix-colocated/who_need_help"
import topbar from "../vendor/topbar"
import {Hooks} from "./hooks"
import {Hooks, mountStaticAidMaps} from "./hooks"
const systemTheme = () =>
matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"
@ -91,6 +91,7 @@ const activateProtectedTokenFragment = () => {
activateProtectedTokenFragment()
window.addEventListener("hashchange", activateProtectedTokenFragment)
mountStaticAidMaps(document)
const liveSocket = new LiveSocket("/live", Socket, {
longPollFallbackMs: 2500,

View File

@ -15,90 +15,164 @@ const defaultStyle = {
layers: [{id: "osm", type: "raster", source: "osm"}]
}
const markerPoints = element => {
try {
const points = JSON.parse(element.dataset.markers || "[]")
if (!Array.isArray(points)) return []
return points.filter(point =>
Number.isFinite(point?.longitude) && Number.isFinite(point?.latitude)
)
} catch (_error) {
return []
}
}
const createAidMap = element => {
const state = {
element,
map: null,
markers: []
}
state.markLoading = () => {
if (state.element.dataset.mapReady !== "true") {
state.element.dataset.mapReady = "false"
}
}
state.markReady = () => {
state.element.dataset.mapReady = "true"
}
state.showUnavailable = () => {
state.map = null
state.element.dataset.mapUnavailable = "true"
state.markReady()
const fallback = document.createElement("p")
fallback.className = "grid h-full place-items-center p-6 text-center text-sm"
fallback.dataset.mapFallback = "true"
fallback.textContent = state.element.dataset.mapUnavailableLabel
state.element.replaceChildren(fallback)
}
state.renderMarkers = () => {
if (!state.map) return
state.markers.forEach(marker => marker.remove())
state.markers = []
const points = markerPoints(state.element)
points.forEach(point => {
const popupContent = document.createElement("div")
const title = document.createElement("strong")
title.textContent = point.title || ""
popupContent.append(title, document.createElement("br"))
popupContent.append(document.createTextNode(point.location || ""))
const popup = new maplibregl.Popup({offset: 18}).setDOMContent(popupContent)
const marker = new maplibregl.Marker({color: point.exact ? "#d6573b" : "#278467"})
.setLngLat([point.longitude, point.latitude])
.setPopup(popup)
.addTo(state.map)
state.markers.push(marker)
})
if (points.length === 1) {
state.map.flyTo({center: [points[0].longitude, points[0].latitude], zoom: 12})
} else if (points.length > 1) {
const bounds = new maplibregl.LngLatBounds()
points.forEach(point => bounds.extend([point.longitude, point.latitude]))
state.map.fitBounds(bounds, {padding: 52, maxZoom: 13})
}
}
state.mount = () => {
state.markLoading()
const demoMap = state.element.dataset.demoMap === "true"
if (!supportsMapCanvas()) {
state.showUnavailable()
return
}
try {
state.map = new maplibregl.Map({
container: state.element,
style: defaultStyle,
center: [30.5234, 50.4501],
zoom: 5,
attributionControl: true,
dragRotate: !demoMap,
pitchWithRotate: !demoMap,
scrollZoom: !demoMap
})
} catch (_error) {
state.showUnavailable()
return
}
if (demoMap) state.map.touchZoomRotate.disableRotation()
state.map.addControl(
new maplibregl.NavigationControl({showCompass: !demoMap}),
demoMap ? "bottom-right" : "top-right"
)
state.map.on("dataloading", state.markLoading)
state.map.on("load", state.markReady)
state.map.on("idle", state.markReady)
state.renderMarkers()
}
state.destroy = () => {
state.map?.off("dataloading", state.markLoading)
state.map?.off("load", state.markReady)
state.map?.off("idle", state.markReady)
state.map?.remove()
}
return state
}
export const mountStaticAidMaps = root => {
root.querySelectorAll("[data-static-aid-map]").forEach(element => {
if (element.dataset.staticMapMounted === "true") return
const mount = () => {
element.dataset.staticMapMounted = "true"
element._aidMap = createAidMap(element)
element._aidMap.mount()
}
if (!("IntersectionObserver" in window)) {
mount()
return
}
const observer = new IntersectionObserver(entries => {
if (!entries.some(entry => entry.isIntersecting)) return
observer.disconnect()
mount()
}, {rootMargin: "240px"})
observer.observe(element)
})
}
export const Hooks = {
AidMap: {
mounted() {
this.markers = []
this.markLoading = () => {
if (this.el.dataset.mapReady !== "true") {
this.el.dataset.mapReady = "false"
}
}
this.markReady = () => {
this.el.dataset.mapReady = "true"
}
this.showUnavailable = () => {
this.map = null
this.el.dataset.mapUnavailable = "true"
this.markReady()
const fallback = document.createElement("p")
fallback.className = "grid h-full place-items-center p-6 text-center text-sm"
fallback.dataset.mapFallback = "true"
fallback.textContent = this.el.dataset.mapUnavailableLabel
this.el.replaceChildren(fallback)
}
if (!supportsMapCanvas()) {
this.showUnavailable()
return
}
try {
this.map = new maplibregl.Map({
container: this.el,
style: defaultStyle,
center: [30.5234, 50.4501],
zoom: 5
})
} catch (_error) {
this.showUnavailable()
return
}
this.map.addControl(new maplibregl.NavigationControl(), "top-right")
this.map.on("dataloading", this.markLoading)
this.map.on("load", this.markReady)
this.map.on("idle", this.markReady)
this.renderMarkers()
this.aidMap = createAidMap(this.el)
this.aidMap.mount()
},
updated() {
this.renderMarkers()
this.aidMap.renderMarkers()
},
destroyed() {
this.map?.off("dataloading", this.markLoading)
this.map?.off("load", this.markReady)
this.map?.off("idle", this.markReady)
this.map?.remove()
},
renderMarkers() {
if (!this.map) return
this.markers.forEach(marker => marker.remove())
this.markers = []
const points = JSON.parse(this.el.dataset.markers || "[]")
points.forEach(point => {
const popupContent = document.createElement("div")
const title = document.createElement("strong")
title.textContent = point.title || ""
popupContent.append(title, document.createElement("br"))
popupContent.append(document.createTextNode(point.location || ""))
const popup = new maplibregl.Popup({offset: 18}).setDOMContent(popupContent)
const marker = new maplibregl.Marker({color: point.exact ? "#d6573b" : "#278467"})
.setLngLat([point.longitude, point.latitude])
.setPopup(popup)
.addTo(this.map)
this.markers.push(marker)
})
if (points.length === 1) {
this.map.flyTo({center: [points[0].longitude, points[0].latitude], zoom: 12})
} else if (points.length > 1) {
const bounds = new maplibregl.LngLatBounds()
points.forEach(point => bounds.extend([point.longitude, point.latitude]))
this.map.fitBounds(bounds, {padding: 52, maxZoom: 13})
}
this.aidMap.destroy()
}
},

View File

@ -2,7 +2,10 @@ defmodule WhoNeedHelpWeb.PageController do
use WhoNeedHelpWeb, :controller
def home(conn, _params) do
render(conn, :home)
render(conn, :home,
page_description:
"Ask nearby volunteers for free medicine pickup or safe practical help, coordinate privately, and verify the handover."
)
end
def privacy(conn, _params) do

View File

@ -1,30 +1,58 @@
<% demo_markers =
Jason.encode!([
%{
title: gettext("Medicine pickup · example"),
location: gettext("Approximate area · demo data"),
latitude: 50.4501,
longitude: 30.5234,
exact: false
},
%{
title: gettext("Flat tyre help · example"),
location: gettext("Approximate area · demo data"),
latitude: 50.4612,
longitude: 30.4926,
exact: false
},
%{
title: gettext("Bicycle chain help · example"),
location: gettext("Approximate area · demo data"),
latitude: 50.4328,
longitude: 30.5487,
exact: false
}
]) %>
<Layouts.app flash={@flash} current_scope={@current_scope}>
<section class="grid gap-10 py-8 lg:grid-cols-[1.15fr_.85fr] lg:items-center">
<section
aria-labelledby="home-title"
class="grid gap-10 py-8 lg:grid-cols-[1.15fr_.85fr] lg:items-center"
>
<div>
<div class="badge badge-success badge-outline mb-5">
{gettext("Fast, local, voluntary help")}
{gettext("Free, nearby, voluntary help")}
</div>
<h1 class="max-w-3xl text-5xl font-black tracking-tight text-balance sm:text-6xl">
{gettext("Help can be closer than you think.")}
<h1
id="home-title"
class="max-w-3xl text-5xl font-black tracking-tight text-balance sm:text-6xl"
>
{gettext("Need help nearby? Ask the community.")}
</h1>
<p class="mt-6 max-w-2xl text-lg leading-8 text-base-content/70">
{gettext(
"Who Need Help connects people who urgently need medicine pickup or safe roadside assistance with nearby volunteers who can help for free."
"Ask a nearby volunteer to collect medicine that is already purchased or help with a safe roadside problem. There is no mandatory fee."
)}
</p>
<div class="mt-8 flex flex-wrap gap-3">
<.link navigate={~p"/requests"} class="btn btn-primary btn-lg">
{gettext("See nearby requests")}
<.link
navigate={if @current_scope, do: ~p"/requests/new", else: ~p"/users/register"}
class="btn btn-primary btn-lg"
>
{gettext("I need help")}
</.link>
<.link navigate={~p"/requests"} class="btn btn-outline btn-lg">
{gettext("I can help")}
</.link>
<%= if @current_scope do %>
<.link navigate={~p"/requests/new"} class="btn btn-outline btn-lg">
{gettext("Ask for help")}
</.link>
<% else %>
<.link navigate={~p"/users/register"} class="btn btn-outline btn-lg">
{gettext("Join the community")}
</.link>
<% end %>
</div>
<p class="mt-5 text-sm text-base-content/70">
{gettext(
@ -35,51 +63,338 @@
<div class="relative">
<div class="absolute inset-0 rounded-[2rem] bg-success/10 blur-2xl"></div>
<div class="relative rounded-[2rem] border border-base-300 bg-base-100 p-7 shadow-xl">
<div class="mb-6 flex items-center justify-between">
<article class="relative rounded-[2rem] border border-base-300 bg-base-100 p-7 shadow-xl">
<div class="mb-6 flex items-center justify-between gap-3">
<span class="text-sm font-semibold text-success">{gettext("Medicine pickup")}</span>
<span class="badge badge-error badge-sm">{gettext("urgent")}</span>
</div>
<div class="badge badge-ghost badge-sm mb-4">{gettext("Example request")}</div>
<h2 class="text-2xl font-bold">{gettext("Medicine order is ready at the pharmacy")}</h2>
<p class="mt-3 text-base-content/65">
{gettext(
"The pharmacy closes soon and I cannot leave home. The item is already paid for."
)}
</p>
<div class="mt-7 flex items-center justify-between border-t border-base-300 pt-5">
<div class="mt-7 flex items-center justify-between gap-4 border-t border-base-300 pt-5">
<div>
<div class="text-sm font-semibold">{gettext("Approximate area")}</div>
<div class="text-xs text-base-content/55">
{gettext("Exact address after matching")}
</div>
</div>
<button class="btn btn-success btn-sm" disabled>{gettext("I can help")}</button>
<.link navigate={~p"/requests"} class="btn btn-success btn-sm shrink-0">
{gettext("I can help")}
</.link>
</div>
</article>
</div>
</section>
<section aria-labelledby="help-types-title" class="py-12">
<div class="max-w-3xl">
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("Start with urgent practical help")}
</div>
<h2 id="help-types-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("What can you ask the community for?")}
</h2>
<p class="mt-4 text-base-content/65">
{gettext(
"Choose a moderated category. Each one asks only for the details needed for that kind of help."
)}
</p>
</div>
<div class="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
<article class="help-card rounded-3xl border border-base-300 bg-base-100 p-6">
<.icon name="hero-shopping-bag" class="size-7 text-success" />
<h3 class="mt-5 font-bold">{gettext("Collect medicine")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("The medicine is already legally purchased or reserved for pickup.")}
</p>
</article>
<article class="help-card rounded-3xl border border-base-300 bg-base-100 p-6">
<.icon name="hero-truck" class="size-7 text-success" />
<h3 class="mt-5 font-bold">{gettext("Bring fuel")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Only after people and the vehicle are away from active traffic danger.")}
</p>
</article>
<article class="help-card rounded-3xl border border-base-300 bg-base-100 p-6">
<.icon name="hero-wrench-screwdriver" class="size-7 text-success" />
<h3 class="mt-5 font-bold">{gettext("Help with a wheel")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("A flat tyre or another small roadside problem in a safe place.")}
</p>
</article>
<article class="help-card rounded-3xl border border-base-300 bg-base-100 p-6">
<.icon name="hero-cog-6-tooth" class="size-7 text-success" />
<h3 class="mt-5 font-bold">{gettext("Bicycle or motorcycle")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("A puncture, broken chain, tyre problem, or similar practical help.")}
</p>
</article>
</div>
</section>
<section aria-labelledby="demo-map-title" class="py-12">
<div class="grid gap-8 lg:grid-cols-[1.1fr_.9fr] lg:items-stretch">
<div class="relative min-w-0">
<div
id="home-demo-map"
data-static-aid-map="true"
data-demo-map="true"
data-map-ready="false"
data-markers={demo_markers}
data-map-unavailable-label={
gettext("The demo map is unavailable. The example steps remain available beside it.")
}
role="region"
aria-label={gettext("Demo map with synthetic approximate help requests")}
class="aid-map home-demo-map"
>
</div>
<div class="pointer-events-none absolute left-4 top-4 z-10 flex flex-wrap gap-2">
<span class="badge badge-neutral shadow-sm">{gettext("Interactive demo")}</span>
<span class="badge badge-ghost border border-base-300 bg-base-100/95 shadow-sm">
{gettext("Example data — not live requests")}
</span>
</div>
</div>
<div class="rounded-[2rem] bg-base-200 p-7 sm:p-9">
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("Privacy by default")}
</div>
<h2 id="demo-map-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("See nearby needs without exposing a home address")}
</h2>
<p class="mt-4 text-base-content/65">
{gettext(
"These three points are synthetic examples. Real public discovery follows each requester's location visibility choice."
)}
</p>
<ol class="mt-7 space-y-5">
<li class="flex gap-4">
<span class="grid size-9 shrink-0 place-items-center rounded-full bg-success text-sm font-black text-success-content">1</span>
<div>
<h3 class="font-bold">{gettext("Discover an approximate area")}</h3>
<p class="mt-1 text-sm text-base-content/65">
{gettext("The public marker does not need to reveal an exact address.")}
</p>
</div>
</li>
<li class="flex gap-4">
<span class="grid size-9 shrink-0 place-items-center rounded-full bg-success text-sm font-black text-success-content">2</span>
<div>
<h3 class="font-bold">{gettext("Accept and open private coordination")}</h3>
<p class="mt-1 text-sm text-base-content/65">
{gettext("Only the matched requester and helper receive the private chat.")}
</p>
</div>
</li>
<li class="flex gap-4">
<span class="grid size-9 shrink-0 place-items-center rounded-full bg-success text-sm font-black text-success-content">3</span>
<div>
<h3 class="font-bold">{gettext("Share live location only by choice")}</h3>
<p class="mt-1 text-sm text-base-content/65">
{gettext("Current coordinates are optional and deleted when sharing stops.")}
</p>
</div>
</li>
</ol>
</div>
</div>
</section>
<section class="grid gap-4 py-10 md:grid-cols-3">
<div class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">1</div>
<h3 class="mt-4 font-bold">{gettext("Post a clear request")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Choose a category, urgency, and safe location visibility.")}
</p>
<section aria-labelledby="how-title" class="py-12">
<div class="max-w-3xl">
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("A clear handover")}
</div>
<h2 id="how-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("From request to verified completion")}
</h2>
</div>
<div class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">2</div>
<h3 class="mt-4 font-bold">{gettext("Match and coordinate")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Use private chat and optional live location sharing.")}
</p>
<div class="mt-8 grid gap-4 md:grid-cols-3">
<article class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">1</div>
<h3 class="mt-4 font-bold">{gettext("Post a clear request")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Choose a category, urgency, and safe location visibility.")}
</p>
</article>
<article class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">2</div>
<h3 class="mt-4 font-bold">{gettext("Match and coordinate")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Use private chat and optional live location sharing.")}
</p>
</article>
<article class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">3</div>
<h3 class="mt-4 font-bold">{gettext("Verify the handover")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext(
"Both confirm, the helper enters a one-time code, and reviews stay blind until both submit."
)}
</p>
</article>
</div>
<div class="rounded-2xl bg-base-200 p-6">
<div class="text-3xl">3</div>
<h3 class="mt-4 font-bold">{gettext("Verify the handover")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Both confirm and the helper enters a one-time code.")}
</section>
<section aria-labelledby="trust-title" class="py-12">
<div class="rounded-[2rem] border border-base-300 bg-base-100 p-7 sm:p-10">
<div class="max-w-3xl">
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("Built for safer coordination")}
</div>
<h2 id="trust-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("You stay in control of the match")}
</h2>
</div>
<div class="mt-8 grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
<div>
<.icon name="hero-gift" class="size-7 text-success" />
<h3 class="mt-4 font-bold">{gettext("No mandatory payment")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext(
"Help is voluntary. An external thank-you link is optional after completion."
)}
</p>
</div>
<div>
<.icon name="hero-lock-closed" class="size-7 text-success" />
<h3 class="mt-4 font-bold">{gettext("Private matched chat")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("There is no unsolicited inbox between strangers.")}
</p>
</div>
<div>
<.icon name="hero-shield-check" class="size-7 text-success" />
<h3 class="mt-4 font-bold">{gettext("Reports and blocking")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext(
"Leave a match, block a person, or send a scoped report when something feels wrong."
)}
</p>
</div>
<div>
<.icon name="hero-star" class="size-7 text-success" />
<h3 class="mt-4 font-bold">{gettext("Verified reputation signals")}</h3>
<p class="mt-2 text-sm text-base-content/65">
{gettext("Handover codes and unique completed matches matter more than raw totals.")}
</p>
</div>
</div>
<.link navigate={~p"/safety"} class="btn btn-outline mt-8">
{gettext("Read the safety rules")}
</.link>
</div>
</section>
<section aria-labelledby="activities-title" class="py-12">
<div class="grid gap-6 rounded-[2rem] bg-success/10 p-7 sm:p-10 lg:grid-cols-[1fr_auto] lg:items-center">
<div class="max-w-3xl">
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("Not only urgent help")}
</div>
<h2 id="activities-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("Find company for coffee, cinema, a walk, or a hike")}
</h2>
<p class="mt-4 text-base-content/65">
{gettext(
"Social activities are separate from urgent requests. Organizers approve participants, and exact meeting details stay inside the approved group."
)}
</p>
</div>
<.link navigate={~p"/activities"} class="btn btn-success btn-lg">
{gettext("Explore activities")}
</.link>
</div>
</section>
<section aria-labelledby="faq-title" class="py-12">
<div class="grid gap-8 lg:grid-cols-[.7fr_1.3fr]">
<div>
<div class="text-sm font-bold uppercase tracking-[.18em] text-success">
{gettext("Quick answers")}
</div>
<h2 id="faq-title" class="mt-3 text-3xl font-black sm:text-4xl">
{gettext("Before you create a request")}
</h2>
</div>
<div class="space-y-3">
<details class="group rounded-2xl border border-base-300 bg-base-100 p-5">
<summary class="cursor-pointer font-bold">
{gettext("Do I have to pay a helper?")}
</summary>
<p class="mt-3 text-sm leading-6 text-base-content/65">
{gettext(
"No. Help has no mandatory fee. A helper may optionally publish an external thank-you link after a completed handover."
)}
</p>
</details>
<details class="group rounded-2xl border border-base-300 bg-base-100 p-5">
<summary class="cursor-pointer font-bold">
{gettext("Can a volunteer buy medicine for me?")}
</summary>
<p class="mt-3 text-sm leading-6 text-base-content/65">
{gettext(
"The medicine must already be legally purchased or reserved. The service does not prescribe, recommend, sell, or handle controlled substances."
)}
</p>
</details>
<details class="group rounded-2xl border border-base-300 bg-base-100 p-5">
<summary class="cursor-pointer font-bold">
{gettext("Who can see my exact address?")}
</summary>
<p class="mt-3 text-sm leading-6 text-base-content/65">
{gettext(
"You choose the visibility. Exact active coordinates can be limited to the matched helper and are removed when sharing stops."
)}
</p>
</details>
<details class="group rounded-2xl border border-base-300 bg-base-100 p-5">
<summary class="cursor-pointer font-bold">
{gettext("What if there is immediate danger?")}
</summary>
<p class="mt-3 text-sm leading-6 text-base-content/65">
{gettext(
"Contact the emergency service for your location. Who Need Help is for voluntary practical coordination, not emergencies."
)}
</p>
</details>
</div>
</div>
</section>
<section class="py-12 text-center">
<div class="rounded-[2rem] bg-neutral px-6 py-12 text-neutral-content sm:px-10">
<h2 class="text-3xl font-black sm:text-4xl">{gettext("Ready to ask or help nearby?")}</h2>
<p class="mx-auto mt-4 max-w-2xl text-neutral-content/70">
{gettext(
"Create one account, choose your role for each situation, and keep control of what you share."
)}
</p>
<div class="mt-8 flex flex-wrap justify-center gap-3">
<.link
navigate={if @current_scope, do: ~p"/requests/new", else: ~p"/users/register"}
class="btn btn-primary btn-lg"
>
{gettext("I need help")}
</.link>
<.link
navigate={~p"/requests"}
class="btn btn-outline btn-lg border-neutral-content/45 text-neutral-content"
>
{gettext("I can help")}
</.link>
</div>
</div>
</section>
</Layouts.app>

View File

@ -24,7 +24,6 @@ msgstr ""
#: lib/who_need_help_web/components/layouts.ex:70
#: lib/who_need_help_web/components/layouts.ex:119
#: lib/who_need_help_web/controllers/page_html/home.html.heex:21
#: lib/who_need_help_web/live/request_live/new.ex:23
#, elixir-autogen, elixir-format
msgid "Ask for help"
@ -41,21 +40,6 @@ msgstr ""
msgid "Categories"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#, elixir-autogen, elixir-format
msgid "Fast, local, voluntary help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:8
#, elixir-autogen, elixir-format
msgid "Help can be closer than you think."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:25
#, elixir-autogen, elixir-format
msgid "Join the community"
msgstr ""
#: lib/who_need_help_web/components/layouts.ex:78
#: lib/who_need_help_web/components/layouts.ex:128
#: lib/who_need_help_web/controllers/user_registration_html/new.html.heex:9
@ -88,11 +72,6 @@ msgstr ""
msgid "Requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:17
#, elixir-autogen, elixir-format
msgid "See nearby requests"
msgstr ""
#: lib/who_need_help_web/components/layouts.ex:315
#, elixir-autogen, elixir-format
msgid "Something went wrong!"
@ -294,7 +273,7 @@ msgstr ""
msgid "Approved participants"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:80
#: lib/who_need_help_web/live/activity_live/new.ex:263
#: lib/who_need_help_web/live/request_live/new.ex:311
#, elixir-autogen, elixir-format
@ -357,11 +336,6 @@ msgstr ""
msgid "Blocked users"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:81
#, elixir-autogen, elixir-format
msgid "Both confirm and the helper enters a one-time code."
msgstr ""
#: lib/who_need_help_web/live/request_live/new.ex:123
#, elixir-autogen, elixir-format
msgid "Briefly describe the help you need"
@ -446,7 +420,7 @@ msgstr ""
msgid "Changing..."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:67
#: lib/who_need_help_web/controllers/page_html/home.html.heex:226
#, elixir-autogen, elixir-format
msgid "Choose a category, urgency, and safe location visibility."
msgstr ""
@ -706,7 +680,7 @@ msgstr ""
msgid "Enter handover code"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:53
#: lib/who_need_help_web/controllers/page_html/home.html.heex:82
#, elixir-autogen, elixir-format
msgid "Exact address after matching"
msgstr ""
@ -871,7 +845,9 @@ msgstr ""
msgid "Human decisions retained"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:56
#: lib/who_need_help_web/controllers/page_html/home.html.heex:54
#: lib/who_need_help_web/controllers/page_html/home.html.heex:86
#: lib/who_need_help_web/controllers/page_html/home.html.heex:395
#: lib/who_need_help_web/live/request_live/show.ex:875
#, elixir-autogen, elixir-format
msgid "I can help"
@ -1047,7 +1023,7 @@ msgstr ""
msgid "Mark completed"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#: lib/who_need_help_web/controllers/page_html/home.html.heex:231
#, elixir-autogen, elixir-format
msgid "Match and coordinate"
msgstr ""
@ -1064,12 +1040,12 @@ msgstr ""
msgid "Medicine is ready at the pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:43
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#, elixir-autogen, elixir-format
msgid "Medicine order is ready at the pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:40
#: lib/who_need_help_web/controllers/page_html/home.html.heex:68
#, elixir-autogen, elixir-format
msgid "Medicine pickup"
msgstr ""
@ -1223,7 +1199,7 @@ msgstr ""
msgid "None revealed yet."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:30
#: lib/who_need_help_web/controllers/page_html/home.html.heex:58
#, elixir-autogen, elixir-format
msgid "Not an emergency or medical service. In immediate danger, contact local emergency services."
msgstr ""
@ -1398,7 +1374,7 @@ msgstr ""
msgid "Podil, near the central pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:65
#: lib/who_need_help_web/controllers/page_html/home.html.heex:224
#, elixir-autogen, elixir-format
msgid "Post a clear request"
msgstr ""
@ -1794,7 +1770,7 @@ msgstr ""
msgid "Signal updated."
msgstr ""
#: lib/who_need_help_web/components/layouts/root.html.heex:27
#: lib/who_need_help_web/components/layouts/root.html.heex:34
#, elixir-autogen, elixir-format
msgid "Skip to main content"
msgstr ""
@ -1959,7 +1935,7 @@ msgstr ""
msgid "The organizer has not approved your request yet."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:45
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#, elixir-autogen, elixir-format
msgid "The pharmacy closes soon and I cannot leave home. The item is already paid for."
msgstr ""
@ -2164,7 +2140,7 @@ msgstr ""
msgid "Use my current foreground location"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#: lib/who_need_help_web/controllers/page_html/home.html.heex:233
#, elixir-autogen, elixir-format
msgid "Use private chat and optional live location sharing."
msgstr ""
@ -2222,7 +2198,7 @@ msgstr ""
msgid "Verify handover"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:79
#: lib/who_need_help_web/controllers/page_html/home.html.heex:238
#, elixir-autogen, elixir-format
msgid "Verify the handover"
msgstr ""
@ -2270,11 +2246,6 @@ msgstr ""
msgid "What help do you need?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Who Need Help connects people who urgently need medicine pickup or safe roadside assistance with nearby volunteers who can help for free."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/safety.html.heex:8
#, elixir-autogen, elixir-format
msgid "Who Need Help coordinates voluntary help between adults. It cannot verify every person, request, item, route, or outcome and cannot guarantee safety."
@ -2555,7 +2526,7 @@ msgstr ""
msgid "unverified"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:41
#: lib/who_need_help_web/controllers/page_html/home.html.heex:69
#, elixir-autogen, elixir-format
msgid "urgent"
msgstr ""
@ -3667,3 +3638,321 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "and"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:214
#, elixir-autogen, elixir-format
msgid "A clear handover"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:127
#, elixir-autogen, elixir-format
msgid "A flat tyre or another small roadside problem in a safe place."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:134
#, elixir-autogen, elixir-format
msgid "A puncture, broken chain, tyre problem, or similar practical help."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:191
#, elixir-autogen, elixir-format
msgid "Accept and open private coordination"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#: lib/who_need_help_web/controllers/page_html/home.html.heex:12
#: lib/who_need_help_web/controllers/page_html/home.html.heex:19
#, elixir-autogen, elixir-format
msgid "Approximate area · demo data"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:42
#, elixir-autogen, elixir-format
msgid "Ask a nearby volunteer to collect medicine that is already purchased or help with a safe roadside problem. There is no mandatory fee."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:328
#, elixir-autogen, elixir-format
msgid "Before you create a request"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:18
#, elixir-autogen, elixir-format
msgid "Bicycle chain help · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bicycle or motorcycle"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:240
#, elixir-autogen, elixir-format
msgid "Both confirm, the helper enters a one-time code, and reviews stay blind until both submit."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:118
#, elixir-autogen, elixir-format
msgid "Bring fuel"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:252
#, elixir-autogen, elixir-format
msgid "Built for safer coordination"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:344
#, elixir-autogen, elixir-format
msgid "Can a volunteer buy medicine for me?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:102
#, elixir-autogen, elixir-format
msgid "Choose a moderated category. Each one asks only for the details needed for that kind of help."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:111
#, elixir-autogen, elixir-format
msgid "Collect medicine"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:367
#, elixir-autogen, elixir-format
msgid "Contact the emergency service for your location. Who Need Help is for voluntary practical coordination, not emergencies."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:380
#, elixir-autogen, elixir-format
msgid "Create one account, choose your role for each situation, and keep control of what you share."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:202
#, elixir-autogen, elixir-format
msgid "Current coordinates are optional and deleted when sharing stops."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:153
#, elixir-autogen, elixir-format
msgid "Demo map with synthetic approximate help requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:182
#, elixir-autogen, elixir-format
msgid "Discover an approximate area"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:334
#, elixir-autogen, elixir-format
msgid "Do I have to pay a helper?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:160
#, elixir-autogen, elixir-format
msgid "Example data — not live requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:71
#, elixir-autogen, elixir-format
msgid "Example request"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:316
#, elixir-autogen, elixir-format
msgid "Explore activities"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:307
#, elixir-autogen, elixir-format
msgid "Find company for coffee, cinema, a walk, or a hike"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Flat tyre help · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:33
#, elixir-autogen, elixir-format
msgid "Free, nearby, voluntary help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:217
#, elixir-autogen, elixir-format
msgid "From request to verified completion"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:289
#, elixir-autogen, elixir-format
msgid "Handover codes and unique completed matches matter more than raw totals."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:264
#, elixir-autogen, elixir-format
msgid "Help is voluntary. An external thank-you link is optional after completion."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:125
#, elixir-autogen, elixir-format
msgid "Help with a wheel"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:389
#, elixir-autogen, elixir-format
msgid "I need help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:158
#, elixir-autogen, elixir-format
msgid "Interactive demo"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:280
#, elixir-autogen, elixir-format
msgid "Leave a match, block a person, or send a scoped report when something feels wrong."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:4
#, elixir-autogen, elixir-format
msgid "Medicine pickup · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:39
#, elixir-autogen, elixir-format
msgid "Need help nearby? Ask the community."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:262
#, elixir-autogen, elixir-format
msgid "No mandatory payment"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:337
#, elixir-autogen, elixir-format
msgid "No. Help has no mandatory fee. A helper may optionally publish an external thank-you link after a completed handover."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:304
#, elixir-autogen, elixir-format
msgid "Not only urgent help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:120
#, elixir-autogen, elixir-format
msgid "Only after people and the vehicle are away from active traffic danger."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:193
#, elixir-autogen, elixir-format
msgid "Only the matched requester and helper receive the private chat."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:167
#, elixir-autogen, elixir-format
msgid "Privacy by default"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:271
#, elixir-autogen, elixir-format
msgid "Private matched chat"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:325
#, elixir-autogen, elixir-format
msgid "Quick answers"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:295
#, elixir-autogen, elixir-format
msgid "Read the safety rules"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:378
#, elixir-autogen, elixir-format
msgid "Ready to ask or help nearby?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:278
#, elixir-autogen, elixir-format
msgid "Reports and blocking"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:170
#, elixir-autogen, elixir-format
msgid "See nearby needs without exposing a home address"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:200
#, elixir-autogen, elixir-format
msgid "Share live location only by choice"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:310
#, elixir-autogen, elixir-format
msgid "Social activities are separate from urgent requests. Organizers approve participants, and exact meeting details stay inside the approved group."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:96
#, elixir-autogen, elixir-format
msgid "Start with urgent practical help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:150
#, elixir-autogen, elixir-format
msgid "The demo map is unavailable. The example steps remain available beside it."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:113
#, elixir-autogen, elixir-format
msgid "The medicine is already legally purchased or reserved for pickup."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:347
#, elixir-autogen, elixir-format
msgid "The medicine must already be legally purchased or reserved. The service does not prescribe, recommend, sell, or handle controlled substances."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:184
#, elixir-autogen, elixir-format
msgid "The public marker does not need to reveal an exact address."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:273
#, elixir-autogen, elixir-format
msgid "There is no unsolicited inbox between strangers."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:173
#, elixir-autogen, elixir-format
msgid "These three points are synthetic examples. Real public discovery follows each requester's location visibility choice."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:287
#, elixir-autogen, elixir-format
msgid "Verified reputation signals"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:99
#, elixir-autogen, elixir-format
msgid "What can you ask the community for?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:364
#, elixir-autogen, elixir-format
msgid "What if there is immediate danger?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:354
#, elixir-autogen, elixir-format
msgid "Who can see my exact address?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:357
#, elixir-autogen, elixir-format
msgid "You choose the visibility. Exact active coordinates can be limited to the matched helper and are removed when sharing stops."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:255
#, elixir-autogen, elixir-format
msgid "You stay in control of the match"
msgstr ""

View File

@ -24,7 +24,6 @@ msgstr ""
#: lib/who_need_help_web/components/layouts.ex:70
#: lib/who_need_help_web/components/layouts.ex:119
#: lib/who_need_help_web/controllers/page_html/home.html.heex:21
#: lib/who_need_help_web/live/request_live/new.ex:23
#, elixir-autogen, elixir-format
msgid "Ask for help"
@ -41,21 +40,6 @@ msgstr ""
msgid "Categories"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#, elixir-autogen, elixir-format
msgid "Fast, local, voluntary help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:8
#, elixir-autogen, elixir-format
msgid "Help can be closer than you think."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:25
#, elixir-autogen, elixir-format
msgid "Join the community"
msgstr ""
#: lib/who_need_help_web/components/layouts.ex:78
#: lib/who_need_help_web/components/layouts.ex:128
#: lib/who_need_help_web/controllers/user_registration_html/new.html.heex:9
@ -88,11 +72,6 @@ msgstr ""
msgid "Requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:17
#, elixir-autogen, elixir-format
msgid "See nearby requests"
msgstr ""
#: lib/who_need_help_web/components/layouts.ex:315
#, elixir-autogen, elixir-format
msgid "Something went wrong!"
@ -294,7 +273,7 @@ msgstr ""
msgid "Approved participants"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:80
#: lib/who_need_help_web/live/activity_live/new.ex:263
#: lib/who_need_help_web/live/request_live/new.ex:311
#, elixir-autogen, elixir-format
@ -357,11 +336,6 @@ msgstr ""
msgid "Blocked users"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:81
#, elixir-autogen, elixir-format
msgid "Both confirm and the helper enters a one-time code."
msgstr ""
#: lib/who_need_help_web/live/request_live/new.ex:123
#, elixir-autogen, elixir-format
msgid "Briefly describe the help you need"
@ -446,7 +420,7 @@ msgstr ""
msgid "Changing..."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:67
#: lib/who_need_help_web/controllers/page_html/home.html.heex:226
#, elixir-autogen, elixir-format
msgid "Choose a category, urgency, and safe location visibility."
msgstr ""
@ -706,7 +680,7 @@ msgstr ""
msgid "Enter handover code"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:53
#: lib/who_need_help_web/controllers/page_html/home.html.heex:82
#, elixir-autogen, elixir-format
msgid "Exact address after matching"
msgstr ""
@ -871,7 +845,9 @@ msgstr ""
msgid "Human decisions retained"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:56
#: lib/who_need_help_web/controllers/page_html/home.html.heex:54
#: lib/who_need_help_web/controllers/page_html/home.html.heex:86
#: lib/who_need_help_web/controllers/page_html/home.html.heex:395
#: lib/who_need_help_web/live/request_live/show.ex:875
#, elixir-autogen, elixir-format
msgid "I can help"
@ -1047,7 +1023,7 @@ msgstr ""
msgid "Mark completed"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#: lib/who_need_help_web/controllers/page_html/home.html.heex:231
#, elixir-autogen, elixir-format
msgid "Match and coordinate"
msgstr ""
@ -1064,12 +1040,12 @@ msgstr ""
msgid "Medicine is ready at the pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:43
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#, elixir-autogen, elixir-format
msgid "Medicine order is ready at the pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:40
#: lib/who_need_help_web/controllers/page_html/home.html.heex:68
#, elixir-autogen, elixir-format
msgid "Medicine pickup"
msgstr ""
@ -1223,7 +1199,7 @@ msgstr ""
msgid "None revealed yet."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:30
#: lib/who_need_help_web/controllers/page_html/home.html.heex:58
#, elixir-autogen, elixir-format
msgid "Not an emergency or medical service. In immediate danger, contact local emergency services."
msgstr ""
@ -1398,7 +1374,7 @@ msgstr ""
msgid "Podil, near the central pharmacy"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:65
#: lib/who_need_help_web/controllers/page_html/home.html.heex:224
#, elixir-autogen, elixir-format
msgid "Post a clear request"
msgstr ""
@ -1794,7 +1770,7 @@ msgstr ""
msgid "Signal updated."
msgstr ""
#: lib/who_need_help_web/components/layouts/root.html.heex:27
#: lib/who_need_help_web/components/layouts/root.html.heex:34
#, elixir-autogen, elixir-format
msgid "Skip to main content"
msgstr ""
@ -1959,7 +1935,7 @@ msgstr ""
msgid "The organizer has not approved your request yet."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:45
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#, elixir-autogen, elixir-format
msgid "The pharmacy closes soon and I cannot leave home. The item is already paid for."
msgstr ""
@ -2164,7 +2140,7 @@ msgstr ""
msgid "Use my current foreground location"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#: lib/who_need_help_web/controllers/page_html/home.html.heex:233
#, elixir-autogen, elixir-format
msgid "Use private chat and optional live location sharing."
msgstr ""
@ -2222,7 +2198,7 @@ msgstr ""
msgid "Verify handover"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:79
#: lib/who_need_help_web/controllers/page_html/home.html.heex:238
#, elixir-autogen, elixir-format
msgid "Verify the handover"
msgstr ""
@ -2270,11 +2246,6 @@ msgstr ""
msgid "What help do you need?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Who Need Help connects people who urgently need medicine pickup or safe roadside assistance with nearby volunteers who can help for free."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/safety.html.heex:8
#, elixir-autogen, elixir-format
msgid "Who Need Help coordinates voluntary help between adults. It cannot verify every person, request, item, route, or outcome and cannot guarantee safety."
@ -2555,7 +2526,7 @@ msgstr ""
msgid "unverified"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:41
#: lib/who_need_help_web/controllers/page_html/home.html.heex:69
#, elixir-autogen, elixir-format
msgid "urgent"
msgstr ""
@ -3667,3 +3638,321 @@ msgstr "Terms"
#, elixir-autogen, elixir-format
msgid "and"
msgstr "and"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:214
#, elixir-autogen, elixir-format
msgid "A clear handover"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:127
#, elixir-autogen, elixir-format
msgid "A flat tyre or another small roadside problem in a safe place."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:134
#, elixir-autogen, elixir-format
msgid "A puncture, broken chain, tyre problem, or similar practical help."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:191
#, elixir-autogen, elixir-format
msgid "Accept and open private coordination"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#: lib/who_need_help_web/controllers/page_html/home.html.heex:12
#: lib/who_need_help_web/controllers/page_html/home.html.heex:19
#, elixir-autogen, elixir-format, fuzzy
msgid "Approximate area · demo data"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:42
#, elixir-autogen, elixir-format
msgid "Ask a nearby volunteer to collect medicine that is already purchased or help with a safe roadside problem. There is no mandatory fee."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:328
#, elixir-autogen, elixir-format
msgid "Before you create a request"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:18
#, elixir-autogen, elixir-format
msgid "Bicycle chain help · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bicycle or motorcycle"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:240
#, elixir-autogen, elixir-format
msgid "Both confirm, the helper enters a one-time code, and reviews stay blind until both submit."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:118
#, elixir-autogen, elixir-format
msgid "Bring fuel"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:252
#, elixir-autogen, elixir-format
msgid "Built for safer coordination"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:344
#, elixir-autogen, elixir-format
msgid "Can a volunteer buy medicine for me?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:102
#, elixir-autogen, elixir-format
msgid "Choose a moderated category. Each one asks only for the details needed for that kind of help."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:111
#, elixir-autogen, elixir-format
msgid "Collect medicine"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:367
#, elixir-autogen, elixir-format
msgid "Contact the emergency service for your location. Who Need Help is for voluntary practical coordination, not emergencies."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:380
#, elixir-autogen, elixir-format
msgid "Create one account, choose your role for each situation, and keep control of what you share."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:202
#, elixir-autogen, elixir-format
msgid "Current coordinates are optional and deleted when sharing stops."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:153
#, elixir-autogen, elixir-format
msgid "Demo map with synthetic approximate help requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:182
#, elixir-autogen, elixir-format
msgid "Discover an approximate area"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:334
#, elixir-autogen, elixir-format
msgid "Do I have to pay a helper?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:160
#, elixir-autogen, elixir-format
msgid "Example data — not live requests"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Example request"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:316
#, elixir-autogen, elixir-format
msgid "Explore activities"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:307
#, elixir-autogen, elixir-format
msgid "Find company for coffee, cinema, a walk, or a hike"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Flat tyre help · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:33
#, elixir-autogen, elixir-format
msgid "Free, nearby, voluntary help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:217
#, elixir-autogen, elixir-format
msgid "From request to verified completion"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:289
#, elixir-autogen, elixir-format
msgid "Handover codes and unique completed matches matter more than raw totals."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:264
#, elixir-autogen, elixir-format
msgid "Help is voluntary. An external thank-you link is optional after completion."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:125
#, elixir-autogen, elixir-format
msgid "Help with a wheel"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:389
#, elixir-autogen, elixir-format
msgid "I need help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:158
#, elixir-autogen, elixir-format
msgid "Interactive demo"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:280
#, elixir-autogen, elixir-format
msgid "Leave a match, block a person, or send a scoped report when something feels wrong."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Medicine pickup · example"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:39
#, elixir-autogen, elixir-format
msgid "Need help nearby? Ask the community."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:262
#, elixir-autogen, elixir-format
msgid "No mandatory payment"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:337
#, elixir-autogen, elixir-format
msgid "No. Help has no mandatory fee. A helper may optionally publish an external thank-you link after a completed handover."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:304
#, elixir-autogen, elixir-format
msgid "Not only urgent help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:120
#, elixir-autogen, elixir-format
msgid "Only after people and the vehicle are away from active traffic danger."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:193
#, elixir-autogen, elixir-format
msgid "Only the matched requester and helper receive the private chat."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:167
#, elixir-autogen, elixir-format
msgid "Privacy by default"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:271
#, elixir-autogen, elixir-format, fuzzy
msgid "Private matched chat"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:325
#, elixir-autogen, elixir-format
msgid "Quick answers"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:295
#, elixir-autogen, elixir-format
msgid "Read the safety rules"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:378
#, elixir-autogen, elixir-format
msgid "Ready to ask or help nearby?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:278
#, elixir-autogen, elixir-format
msgid "Reports and blocking"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:170
#, elixir-autogen, elixir-format
msgid "See nearby needs without exposing a home address"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:200
#, elixir-autogen, elixir-format
msgid "Share live location only by choice"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:310
#, elixir-autogen, elixir-format
msgid "Social activities are separate from urgent requests. Organizers approve participants, and exact meeting details stay inside the approved group."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:96
#, elixir-autogen, elixir-format
msgid "Start with urgent practical help"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:150
#, elixir-autogen, elixir-format
msgid "The demo map is unavailable. The example steps remain available beside it."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:113
#, elixir-autogen, elixir-format
msgid "The medicine is already legally purchased or reserved for pickup."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:347
#, elixir-autogen, elixir-format
msgid "The medicine must already be legally purchased or reserved. The service does not prescribe, recommend, sell, or handle controlled substances."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:184
#, elixir-autogen, elixir-format
msgid "The public marker does not need to reveal an exact address."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:273
#, elixir-autogen, elixir-format
msgid "There is no unsolicited inbox between strangers."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:173
#, elixir-autogen, elixir-format
msgid "These three points are synthetic examples. Real public discovery follows each requester's location visibility choice."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:287
#, elixir-autogen, elixir-format
msgid "Verified reputation signals"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:99
#, elixir-autogen, elixir-format
msgid "What can you ask the community for?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:364
#, elixir-autogen, elixir-format
msgid "What if there is immediate danger?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:354
#, elixir-autogen, elixir-format
msgid "Who can see my exact address?"
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:357
#, elixir-autogen, elixir-format
msgid "You choose the visibility. Exact active coordinates can be limited to the matched helper and are removed when sharing stops."
msgstr ""
#: lib/who_need_help_web/controllers/page_html/home.html.heex:255
#, elixir-autogen, elixir-format
msgid "You stay in control of the match"
msgstr ""

View File

@ -24,7 +24,6 @@ msgstr "Действия"
#: lib/who_need_help_web/components/layouts.ex:70
#: lib/who_need_help_web/components/layouts.ex:119
#: lib/who_need_help_web/controllers/page_html/home.html.heex:21
#: lib/who_need_help_web/live/request_live/new.ex:23
#, elixir-autogen, elixir-format
msgid "Ask for help"
@ -41,21 +40,6 @@ msgstr "Пытаемся восстановить соединение"
msgid "Categories"
msgstr "Категории"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#, elixir-autogen, elixir-format
msgid "Fast, local, voluntary help"
msgstr "Быстрая, локальная, добровольная помощь"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:8
#, elixir-autogen, elixir-format
msgid "Help can be closer than you think."
msgstr "Помощь может быть ближе, чем кажется."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:25
#, elixir-autogen, elixir-format
msgid "Join the community"
msgstr "Присоединиться к сообществу"
#: lib/who_need_help_web/components/layouts.ex:78
#: lib/who_need_help_web/components/layouts.ex:128
#: lib/who_need_help_web/controllers/user_registration_html/new.html.heex:9
@ -88,11 +72,6 @@ msgstr "Регистрация"
msgid "Requests"
msgstr "Заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:17
#, elixir-autogen, elixir-format
msgid "See nearby requests"
msgstr "Заявки рядом"
#: lib/who_need_help_web/components/layouts.ex:315
#, elixir-autogen, elixir-format
msgid "Something went wrong!"
@ -305,7 +284,7 @@ msgstr "Чат одобренной группы"
msgid "Approved participants"
msgstr "Одобренные участники"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:80
#: lib/who_need_help_web/live/activity_live/new.ex:263
#: lib/who_need_help_web/live/request_live/new.ex:311
#, elixir-autogen, elixir-format
@ -373,12 +352,6 @@ msgstr "Заблокировать пользователя"
msgid "Blocked users"
msgstr "Блокированные пользователи"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:81
#, elixir-autogen, elixir-format
msgid "Both confirm and the helper enters a one-time code."
msgstr ""
"Оба участника подтверждают завершение, а помощник вводит одноразовый код."
#: lib/who_need_help_web/live/request_live/new.ex:123
#, elixir-autogen, elixir-format
msgid "Briefly describe the help you need"
@ -463,7 +436,7 @@ msgstr "Изменить роль"
msgid "Changing..."
msgstr "Изменение…"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:67
#: lib/who_need_help_web/controllers/page_html/home.html.heex:226
#, elixir-autogen, elixir-format
msgid "Choose a category, urgency, and safe location visibility."
msgstr ""
@ -740,7 +713,7 @@ msgstr "Название на английском"
msgid "Enter handover code"
msgstr "Введите код передачи"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:53
#: lib/who_need_help_web/controllers/page_html/home.html.heex:82
#, elixir-autogen, elixir-format
msgid "Exact address after matching"
msgstr "Точный адрес после назначения помощника"
@ -932,7 +905,9 @@ msgstr "Скрыть заявку"
msgid "Human decisions retained"
msgstr "Решения остаются за человеком"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:56
#: lib/who_need_help_web/controllers/page_html/home.html.heex:54
#: lib/who_need_help_web/controllers/page_html/home.html.heex:86
#: lib/who_need_help_web/controllers/page_html/home.html.heex:395
#: lib/who_need_help_web/live/request_live/show.ex:875
#, elixir-autogen, elixir-format
msgid "I can help"
@ -1131,7 +1106,7 @@ msgstr ""
msgid "Mark completed"
msgstr "Отметить завершённой"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#: lib/who_need_help_web/controllers/page_html/home.html.heex:231
#, elixir-autogen, elixir-format
msgid "Match and coordinate"
msgstr "Найдите помощника и согласуйте детали"
@ -1148,12 +1123,12 @@ msgstr "Помощник найден"
msgid "Medicine is ready at the pharmacy"
msgstr "Лекарство готово к получению в аптеке"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:43
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#, elixir-autogen, elixir-format
msgid "Medicine order is ready at the pharmacy"
msgstr "Заказ лекарств готов в аптеке"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:40
#: lib/who_need_help_web/controllers/page_html/home.html.heex:68
#, elixir-autogen, elixir-format
msgid "Medicine pickup"
msgstr "Доставка лекарств"
@ -1313,7 +1288,7 @@ msgstr "Ссылки на соцсети не добавлены."
msgid "None revealed yet."
msgstr "Пока ничего не открыто."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:30
#: lib/who_need_help_web/controllers/page_html/home.html.heex:58
#, elixir-autogen, elixir-format
msgid "Not an emergency or medical service. In immediate danger, contact local emergency services."
msgstr ""
@ -1498,7 +1473,7 @@ msgstr "Пожалуйста, проверьте отправленное соо
msgid "Podil, near the central pharmacy"
msgstr "Подол, рядом с центральной аптекой"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:65
#: lib/who_need_help_web/controllers/page_html/home.html.heex:224
#, elixir-autogen, elixir-format
msgid "Post a clear request"
msgstr "Опубликуйте понятную заявку"
@ -1921,7 +1896,7 @@ msgstr "Зарегистрироваться"
msgid "Signal updated."
msgstr "Сигнал обновлен."
#: lib/who_need_help_web/components/layouts/root.html.heex:27
#: lib/who_need_help_web/components/layouts/root.html.heex:34
#, elixir-autogen, elixir-format
msgid "Skip to main content"
msgstr "Пропустить основной контент"
@ -2086,7 +2061,7 @@ msgstr "Ссылка недействительна или просрочена.
msgid "The organizer has not approved your request yet."
msgstr "Организатор ещё не одобрил вашу заявку."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:45
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#, elixir-autogen, elixir-format
msgid "The pharmacy closes soon and I cannot leave home. The item is already paid for."
msgstr ""
@ -2304,7 +2279,7 @@ msgstr "Включить светлую тему"
msgid "Use my current foreground location"
msgstr "Использовать мою текущую геопозицию"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#: lib/who_need_help_web/controllers/page_html/home.html.heex:233
#, elixir-autogen, elixir-format
msgid "Use private chat and optional live location sharing."
msgstr ""
@ -2364,7 +2339,7 @@ msgstr "Подтвердить через GitHub"
msgid "Verify handover"
msgstr "Подтвердить передачу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:79
#: lib/who_need_help_web/controllers/page_html/home.html.heex:238
#, elixir-autogen, elixir-format
msgid "Verify the handover"
msgstr "Подтвердите передачу"
@ -2412,14 +2387,6 @@ msgstr "Какая категория помощи отсутствует?"
msgid "What help do you need?"
msgstr "Какая помощь вам нужна?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Who Need Help connects people who urgently need medicine pickup or safe roadside assistance with nearby volunteers who can help for free."
msgstr ""
"Who Need Help связывает людей, которым срочно нужно забрать лекарства или "
"получить безопасную помощь в дороге, с находящимися рядом волонтёрами, "
"готовыми помочь бесплатно."
#: lib/who_need_help_web/controllers/page_html/safety.html.heex:8
#, elixir-autogen, elixir-format
msgid "Who Need Help coordinates voluntary help between adults. It cannot verify every person, request, item, route, or outcome and cannot guarantee safety."
@ -2716,7 +2683,7 @@ msgstr "Уникальные люди"
msgid "unverified"
msgstr "не подтверждено"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:41
#: lib/who_need_help_web/controllers/page_html/home.html.heex:69
#, elixir-autogen, elixir-format
msgid "urgent"
msgstr "срочно"
@ -3828,3 +3795,321 @@ msgstr "Условия"
#, elixir-autogen, elixir-format
msgid "and"
msgstr "и"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:214
#, elixir-autogen, elixir-format
msgid "A clear handover"
msgstr "Понятная передача помощи"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:127
#, elixir-autogen, elixir-format
msgid "A flat tyre or another small roadside problem in a safe place."
msgstr "Проколотая шина или другая небольшая проблема в дороге в безопасном месте."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:134
#, elixir-autogen, elixir-format
msgid "A puncture, broken chain, tyre problem, or similar practical help."
msgstr "Прокол, сломанная цепь, проблема с шиной или похожая практическая помощь."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:191
#, elixir-autogen, elixir-format
msgid "Accept and open private coordination"
msgstr "Принять заявку и перейти к приватной координации"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#: lib/who_need_help_web/controllers/page_html/home.html.heex:12
#: lib/who_need_help_web/controllers/page_html/home.html.heex:19
#, elixir-autogen, elixir-format
msgid "Approximate area · demo data"
msgstr "Примерный район · демонстрационные данные"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:42
#, elixir-autogen, elixir-format
msgid "Ask a nearby volunteer to collect medicine that is already purchased or help with a safe roadside problem. There is no mandatory fee."
msgstr "Попросите волонтёра поблизости забрать уже купленное лекарство или помочь с безопасной проблемой в дороге. Обязательной оплаты нет."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:328
#, elixir-autogen, elixir-format
msgid "Before you create a request"
msgstr "Перед созданием заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:18
#, elixir-autogen, elixir-format
msgid "Bicycle chain help · example"
msgstr "Помощь с велосипедной цепью · пример"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bicycle or motorcycle"
msgstr "Велосипед или мотоцикл"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:240
#, elixir-autogen, elixir-format
msgid "Both confirm, the helper enters a one-time code, and reviews stay blind until both submit."
msgstr "Оба участника подтверждают передачу, помощник вводит одноразовый код, а отзывы остаются скрытыми, пока их не отправят оба."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:118
#, elixir-autogen, elixir-format
msgid "Bring fuel"
msgstr "Привезти топливо"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:252
#, elixir-autogen, elixir-format
msgid "Built for safer coordination"
msgstr "Создано для более безопасной координации"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:344
#, elixir-autogen, elixir-format
msgid "Can a volunteer buy medicine for me?"
msgstr "Может ли волонтёр купить мне лекарство?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:102
#, elixir-autogen, elixir-format
msgid "Choose a moderated category. Each one asks only for the details needed for that kind of help."
msgstr "Выберите модерируемую категорию. Каждая запрашивает только сведения, необходимые для этого вида помощи."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:111
#, elixir-autogen, elixir-format
msgid "Collect medicine"
msgstr "Забрать лекарство"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:367
#, elixir-autogen, elixir-format
msgid "Contact the emergency service for your location. Who Need Help is for voluntary practical coordination, not emergencies."
msgstr "Обратитесь в экстренную службу по месту нахождения. Who Need Help предназначен для добровольной практической координации, а не для экстренных ситуаций."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:380
#, elixir-autogen, elixir-format
msgid "Create one account, choose your role for each situation, and keep control of what you share."
msgstr "Создайте один аккаунт, выбирайте свою роль в каждой ситуации и контролируйте, чем делитесь."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:202
#, elixir-autogen, elixir-format
msgid "Current coordinates are optional and deleted when sharing stops."
msgstr "Текущие координаты передаются по желанию и удаляются после остановки."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:153
#, elixir-autogen, elixir-format
msgid "Demo map with synthetic approximate help requests"
msgstr "Демонстрационная карта с синтетическими примерными заявками о помощи"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:182
#, elixir-autogen, elixir-format
msgid "Discover an approximate area"
msgstr "Увидеть примерный район"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:334
#, elixir-autogen, elixir-format
msgid "Do I have to pay a helper?"
msgstr "Нужно ли платить помощнику?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:160
#, elixir-autogen, elixir-format
msgid "Example data — not live requests"
msgstr "Демонстрационные данные — не реальные заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:71
#, elixir-autogen, elixir-format
msgid "Example request"
msgstr "Пример заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:316
#, elixir-autogen, elixir-format
msgid "Explore activities"
msgstr "Посмотреть активности"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:307
#, elixir-autogen, elixir-format
msgid "Find company for coffee, cinema, a walk, or a hike"
msgstr "Найдите компанию для кофе, кино, прогулки или похода"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Flat tyre help · example"
msgstr "Помощь с проколотой шиной · пример"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:33
#, elixir-autogen, elixir-format
msgid "Free, nearby, voluntary help"
msgstr "Бесплатная добровольная помощь рядом"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:217
#, elixir-autogen, elixir-format
msgid "From request to verified completion"
msgstr "От заявки до подтверждённого завершения"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:289
#, elixir-autogen, elixir-format
msgid "Handover codes and unique completed matches matter more than raw totals."
msgstr "Одноразовые коды передачи и уникальные завершённые взаимодействия важнее простых итоговых чисел."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:264
#, elixir-autogen, elixir-format
msgid "Help is voluntary. An external thank-you link is optional after completion."
msgstr "Помощь добровольная. Внешняя ссылка для благодарности необязательна и доступна после завершения."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:125
#, elixir-autogen, elixir-format
msgid "Help with a wheel"
msgstr "Помочь с колесом"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:389
#, elixir-autogen, elixir-format
msgid "I need help"
msgstr "Мне нужна помощь"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:158
#, elixir-autogen, elixir-format
msgid "Interactive demo"
msgstr "Интерактивный пример"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:280
#, elixir-autogen, elixir-format
msgid "Leave a match, block a person, or send a scoped report when something feels wrong."
msgstr "Откажитесь от взаимодействия, заблокируйте человека или отправьте жалобу на конкретный объект, если что-то кажется небезопасным."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:4
#, elixir-autogen, elixir-format
msgid "Medicine pickup · example"
msgstr "Получение лекарства · пример"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:39
#, elixir-autogen, elixir-format
msgid "Need help nearby? Ask the community."
msgstr "Нужна помощь рядом? Обратитесь к сообществу."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:262
#, elixir-autogen, elixir-format
msgid "No mandatory payment"
msgstr "Без обязательной оплаты"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:337
#, elixir-autogen, elixir-format
msgid "No. Help has no mandatory fee. A helper may optionally publish an external thank-you link after a completed handover."
msgstr "Нет. Помощь не требует обязательной оплаты. После подтверждённой передачи помощник может по желанию указать внешнюю ссылку для благодарности."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:304
#, elixir-autogen, elixir-format
msgid "Not only urgent help"
msgstr "Не только срочная помощь"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:120
#, elixir-autogen, elixir-format
msgid "Only after people and the vehicle are away from active traffic danger."
msgstr "Только когда люди и транспорт находятся вне опасной зоны активного движения."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:193
#, elixir-autogen, elixir-format
msgid "Only the matched requester and helper receive the private chat."
msgstr "Приватный чат доступен только автору заявки и назначенному помощнику."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:167
#, elixir-autogen, elixir-format
msgid "Privacy by default"
msgstr "Приватность по умолчанию"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:271
#, elixir-autogen, elixir-format
msgid "Private matched chat"
msgstr "Приватный чат после совпадения"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:325
#, elixir-autogen, elixir-format
msgid "Quick answers"
msgstr "Короткие ответы"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:295
#, elixir-autogen, elixir-format
msgid "Read the safety rules"
msgstr "Прочитать правила безопасности"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:378
#, elixir-autogen, elixir-format
msgid "Ready to ask or help nearby?"
msgstr "Готовы попросить о помощи или помочь рядом?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:278
#, elixir-autogen, elixir-format
msgid "Reports and blocking"
msgstr "Жалобы и блокировка"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:170
#, elixir-autogen, elixir-format
msgid "See nearby needs without exposing a home address"
msgstr "Узнавайте о помощи поблизости, не раскрывая домашний адрес"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:200
#, elixir-autogen, elixir-format
msgid "Share live location only by choice"
msgstr "Делитесь геопозицией только по своему выбору"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:310
#, elixir-autogen, elixir-format
msgid "Social activities are separate from urgent requests. Organizers approve participants, and exact meeting details stay inside the approved group."
msgstr "Социальные активности отделены от срочных заявок. Организаторы одобряют участников, а точные сведения о встрече остаются внутри одобренной группы."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:96
#, elixir-autogen, elixir-format
msgid "Start with urgent practical help"
msgstr "Начните со срочной практической помощи"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:150
#, elixir-autogen, elixir-format
msgid "The demo map is unavailable. The example steps remain available beside it."
msgstr "Демонстрационная карта недоступна. Шаги примера остаются доступными рядом."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:113
#, elixir-autogen, elixir-format
msgid "The medicine is already legally purchased or reserved for pickup."
msgstr "Лекарство уже законно куплено или зарезервировано для получения."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:347
#, elixir-autogen, elixir-format
msgid "The medicine must already be legally purchased or reserved. The service does not prescribe, recommend, sell, or handle controlled substances."
msgstr "Лекарство должно быть заранее законно куплено или зарезервировано. Сервис не назначает, не рекомендует, не продаёт и не доставляет контролируемые вещества."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:184
#, elixir-autogen, elixir-format
msgid "The public marker does not need to reveal an exact address."
msgstr "Публичная отметка не обязана раскрывать точный адрес."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:273
#, elixir-autogen, elixir-format
msgid "There is no unsolicited inbox between strangers."
msgstr "Между незнакомыми людьми нет возможности писать без совпадения."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:173
#, elixir-autogen, elixir-format
msgid "These three points are synthetic examples. Real public discovery follows each requester's location visibility choice."
msgstr "Эти три точки — синтетические примеры. Отображение реальных заявок зависит от выбранной автором заявки видимости геопозиции."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:287
#, elixir-autogen, elixir-format
msgid "Verified reputation signals"
msgstr "Подтверждённые сигналы репутации"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:99
#, elixir-autogen, elixir-format
msgid "What can you ask the community for?"
msgstr "О чём можно попросить сообщество?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:364
#, elixir-autogen, elixir-format
msgid "What if there is immediate danger?"
msgstr "Что делать при непосредственной опасности?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:354
#, elixir-autogen, elixir-format
msgid "Who can see my exact address?"
msgstr "Кто увидит мой точный адрес?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:357
#, elixir-autogen, elixir-format
msgid "You choose the visibility. Exact active coordinates can be limited to the matched helper and are removed when sharing stops."
msgstr "Вы сами выбираете видимость. Точные текущие координаты можно показывать только назначенному помощнику; после остановки передачи они удаляются."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:255
#, elixir-autogen, elixir-format
msgid "You stay in control of the match"
msgstr "Вы контролируете взаимодействие"

View File

@ -24,7 +24,6 @@ msgstr "Дії"
#: lib/who_need_help_web/components/layouts.ex:70
#: lib/who_need_help_web/components/layouts.ex:119
#: lib/who_need_help_web/controllers/page_html/home.html.heex:21
#: lib/who_need_help_web/live/request_live/new.ex:23
#, elixir-autogen, elixir-format
msgid "Ask for help"
@ -41,21 +40,6 @@ msgstr "Спроба повторного з’єднання"
msgid "Categories"
msgstr "Категорії"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#, elixir-autogen, elixir-format
msgid "Fast, local, voluntary help"
msgstr "Швидка, місцева, добровільна допомога"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:8
#, elixir-autogen, elixir-format
msgid "Help can be closer than you think."
msgstr "Допомога може бути ближче, ніж здається."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:25
#, elixir-autogen, elixir-format
msgid "Join the community"
msgstr "Приєднуйтеся до спільноти"
#: lib/who_need_help_web/components/layouts.ex:78
#: lib/who_need_help_web/components/layouts.ex:128
#: lib/who_need_help_web/controllers/user_registration_html/new.html.heex:9
@ -88,11 +72,6 @@ msgstr "Зареєструватися"
msgid "Requests"
msgstr "Запити"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:17
#, elixir-autogen, elixir-format
msgid "See nearby requests"
msgstr "Переглянути заявки поруч"
#: lib/who_need_help_web/components/layouts.ex:315
#, elixir-autogen, elixir-format
msgid "Something went wrong!"
@ -305,7 +284,7 @@ msgstr "Чат схваленої групи"
msgid "Approved participants"
msgstr "Схвалені учасники"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:80
#: lib/who_need_help_web/live/activity_live/new.ex:263
#: lib/who_need_help_web/live/request_live/new.ex:311
#, elixir-autogen, elixir-format
@ -373,13 +352,6 @@ msgstr "Заблокувати користувача"
msgid "Blocked users"
msgstr "Заблоковані користувачі"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:81
#, elixir-autogen, elixir-format
msgid "Both confirm and the helper enters a one-time code."
msgstr ""
"Обидва учасники підтверджують завершення, а помічник вводить одноразовий "
"код."
#: lib/who_need_help_web/live/request_live/new.ex:123
#, elixir-autogen, elixir-format
msgid "Briefly describe the help you need"
@ -464,7 +436,7 @@ msgstr "Змінити роль"
msgid "Changing..."
msgstr "Зміна…"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:67
#: lib/who_need_help_web/controllers/page_html/home.html.heex:226
#, elixir-autogen, elixir-format
msgid "Choose a category, urgency, and safe location visibility."
msgstr ""
@ -740,7 +712,7 @@ msgstr "Назва англійською"
msgid "Enter handover code"
msgstr "Введіть код передачі"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:53
#: lib/who_need_help_web/controllers/page_html/home.html.heex:82
#, elixir-autogen, elixir-format
msgid "Exact address after matching"
msgstr "Точна адреса після призначення помічника"
@ -932,7 +904,9 @@ msgstr "Сховати запит"
msgid "Human decisions retained"
msgstr "Рішення залишаються за людиною"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:56
#: lib/who_need_help_web/controllers/page_html/home.html.heex:54
#: lib/who_need_help_web/controllers/page_html/home.html.heex:86
#: lib/who_need_help_web/controllers/page_html/home.html.heex:395
#: lib/who_need_help_web/live/request_live/show.ex:875
#, elixir-autogen, elixir-format
msgid "I can help"
@ -1127,7 +1101,7 @@ msgstr ""
msgid "Mark completed"
msgstr "Позначити завершеною"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#: lib/who_need_help_web/controllers/page_html/home.html.heex:231
#, elixir-autogen, elixir-format
msgid "Match and coordinate"
msgstr "Знайдіть помічника й узгодьте деталі"
@ -1144,12 +1118,12 @@ msgstr "Помічника знайдено"
msgid "Medicine is ready at the pharmacy"
msgstr "Ліки готові до отримання в аптеці"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:43
#: lib/who_need_help_web/controllers/page_html/home.html.heex:72
#, elixir-autogen, elixir-format
msgid "Medicine order is ready at the pharmacy"
msgstr "Замовлення ліків готове до отримання в аптеці"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:40
#: lib/who_need_help_web/controllers/page_html/home.html.heex:68
#, elixir-autogen, elixir-format
msgid "Medicine pickup"
msgstr "Доставка ліків"
@ -1309,7 +1283,7 @@ msgstr "Не додано соціальних посилань."
msgid "None revealed yet."
msgstr "Ще нічого не відкрито."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:30
#: lib/who_need_help_web/controllers/page_html/home.html.heex:58
#, elixir-autogen, elixir-format
msgid "Not an emergency or medical service. In immediate danger, contact local emergency services."
msgstr ""
@ -1493,7 +1467,7 @@ msgstr "Будь ласка, перевірте надіслане повідо
msgid "Podil, near the central pharmacy"
msgstr "Поділь, поблизу центральної аптеки."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:65
#: lib/who_need_help_web/controllers/page_html/home.html.heex:224
#, elixir-autogen, elixir-format
msgid "Post a clear request"
msgstr "Опублікуйте зрозумілу заявку"
@ -1916,7 +1890,7 @@ msgstr "Зареєструватися"
msgid "Signal updated."
msgstr "Сигнал оновлено."
#: lib/who_need_help_web/components/layouts/root.html.heex:27
#: lib/who_need_help_web/components/layouts/root.html.heex:34
#, elixir-autogen, elixir-format
msgid "Skip to main content"
msgstr "Перейти до головного вмісту"
@ -2081,7 +2055,7 @@ msgstr "Посилання недійсне або прострочене."
msgid "The organizer has not approved your request yet."
msgstr "Організатор ще не схвалив ваш запит."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:45
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#, elixir-autogen, elixir-format
msgid "The pharmacy closes soon and I cannot leave home. The item is already paid for."
msgstr ""
@ -2298,7 +2272,7 @@ msgstr "Увімкнути світлу тему"
msgid "Use my current foreground location"
msgstr "Використати мою поточну геопозицію"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:74
#: lib/who_need_help_web/controllers/page_html/home.html.heex:233
#, elixir-autogen, elixir-format
msgid "Use private chat and optional live location sharing."
msgstr ""
@ -2358,7 +2332,7 @@ msgstr "Підтвердити через GitHub"
msgid "Verify handover"
msgstr "Підтвердити передачу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:79
#: lib/who_need_help_web/controllers/page_html/home.html.heex:238
#, elixir-autogen, elixir-format
msgid "Verify the handover"
msgstr "Підтвердьте передачу"
@ -2406,14 +2380,6 @@ msgstr "Яка категорія допомоги відсутня?"
msgid "What help do you need?"
msgstr "Яка допомога вам потрібна?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Who Need Help connects people who urgently need medicine pickup or safe roadside assistance with nearby volunteers who can help for free."
msgstr ""
"Who Need Help з’єднує людей, яким терміново потрібно забрати ліки або "
"отримати безпечну допомогу в дорозі, з волонтерами поруч, готовими допомогти"
" безкоштовно."
#: lib/who_need_help_web/controllers/page_html/safety.html.heex:8
#, elixir-autogen, elixir-format
msgid "Who Need Help coordinates voluntary help between adults. It cannot verify every person, request, item, route, or outcome and cannot guarantee safety."
@ -2706,7 +2672,7 @@ msgstr "унікальні люди"
msgid "unverified"
msgstr "не підтверджено"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:41
#: lib/who_need_help_web/controllers/page_html/home.html.heex:69
#, elixir-autogen, elixir-format
msgid "urgent"
msgstr "терміново"
@ -3818,3 +3784,321 @@ msgstr "Умови"
#, elixir-autogen, elixir-format
msgid "and"
msgstr "та"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:214
#, elixir-autogen, elixir-format
msgid "A clear handover"
msgstr "Зрозуміла передача допомоги"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:127
#, elixir-autogen, elixir-format
msgid "A flat tyre or another small roadside problem in a safe place."
msgstr "Проколота шина або інша невелика дорожня проблема в безпечному місці."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:134
#, elixir-autogen, elixir-format
msgid "A puncture, broken chain, tyre problem, or similar practical help."
msgstr "Прокол, зламаний ланцюг, проблема з шиною чи подібна практична допомога."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:191
#, elixir-autogen, elixir-format
msgid "Accept and open private coordination"
msgstr "Прийняти заявку й перейти до приватної координації"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:5
#: lib/who_need_help_web/controllers/page_html/home.html.heex:12
#: lib/who_need_help_web/controllers/page_html/home.html.heex:19
#, elixir-autogen, elixir-format
msgid "Approximate area · demo data"
msgstr "Орієнтовний район · демонстраційні дані"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:42
#, elixir-autogen, elixir-format
msgid "Ask a nearby volunteer to collect medicine that is already purchased or help with a safe roadside problem. There is no mandatory fee."
msgstr "Попросіть волонтера поблизу забрати вже придбані ліки або допомогти з безпечною дорожньою проблемою. Обов’язкової оплати немає."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:328
#, elixir-autogen, elixir-format
msgid "Before you create a request"
msgstr "Перед створенням заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:18
#, elixir-autogen, elixir-format
msgid "Bicycle chain help · example"
msgstr "Допомога з велосипедним ланцюгом · приклад"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bicycle or motorcycle"
msgstr "Велосипед або мотоцикл"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:240
#, elixir-autogen, elixir-format
msgid "Both confirm, the helper enters a one-time code, and reviews stay blind until both submit."
msgstr "Обидва учасники підтверджують передачу, помічник вводить одноразовий код, а відгуки залишаються прихованими, доки їх не надішлють обоє."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:118
#, elixir-autogen, elixir-format
msgid "Bring fuel"
msgstr "Привезти пальне"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:252
#, elixir-autogen, elixir-format
msgid "Built for safer coordination"
msgstr "Створено для безпечнішої координації"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:344
#, elixir-autogen, elixir-format
msgid "Can a volunteer buy medicine for me?"
msgstr "Чи може волонтер купити мені ліки?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:102
#, elixir-autogen, elixir-format
msgid "Choose a moderated category. Each one asks only for the details needed for that kind of help."
msgstr "Оберіть модеровану категорію. Кожна запитує лише відомості, потрібні для цього виду допомоги."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:111
#, elixir-autogen, elixir-format
msgid "Collect medicine"
msgstr "Забрати ліки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:367
#, elixir-autogen, elixir-format
msgid "Contact the emergency service for your location. Who Need Help is for voluntary practical coordination, not emergencies."
msgstr "Зверніться до екстреної служби за місцем перебування. Who Need Help призначений для добровільної практичної координації, а не для надзвичайних ситуацій."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:380
#, elixir-autogen, elixir-format
msgid "Create one account, choose your role for each situation, and keep control of what you share."
msgstr "Створіть один обліковий запис, обирайте свою роль у кожній ситуації та контролюйте, чим ділитеся."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:202
#, elixir-autogen, elixir-format
msgid "Current coordinates are optional and deleted when sharing stops."
msgstr "Поточні координати передаються за бажанням і видаляються після зупинення."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:153
#, elixir-autogen, elixir-format
msgid "Demo map with synthetic approximate help requests"
msgstr "Демонстраційна карта із синтетичними орієнтовними заявками про допомогу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:182
#, elixir-autogen, elixir-format
msgid "Discover an approximate area"
msgstr "Побачити орієнтовний район"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:334
#, elixir-autogen, elixir-format
msgid "Do I have to pay a helper?"
msgstr "Чи потрібно платити помічнику?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:160
#, elixir-autogen, elixir-format
msgid "Example data — not live requests"
msgstr "Демонстраційні дані — не реальні заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:71
#, elixir-autogen, elixir-format
msgid "Example request"
msgstr "Приклад заявки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:316
#, elixir-autogen, elixir-format
msgid "Explore activities"
msgstr "Переглянути активності"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:307
#, elixir-autogen, elixir-format
msgid "Find company for coffee, cinema, a walk, or a hike"
msgstr "Знайдіть компанію для кави, кіно, прогулянки чи походу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:11
#, elixir-autogen, elixir-format
msgid "Flat tyre help · example"
msgstr "Допомога з проколотою шиною · приклад"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:33
#, elixir-autogen, elixir-format
msgid "Free, nearby, voluntary help"
msgstr "Безкоштовна добровільна допомога поруч"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:217
#, elixir-autogen, elixir-format
msgid "From request to verified completion"
msgstr "Від заявки до підтвердженого завершення"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:289
#, elixir-autogen, elixir-format
msgid "Handover codes and unique completed matches matter more than raw totals."
msgstr "Одноразові коди передачі й унікальні завершені взаємодії важливіші за прості підсумкові числа."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:264
#, elixir-autogen, elixir-format
msgid "Help is voluntary. An external thank-you link is optional after completion."
msgstr "Допомога добровільна. Зовнішнє посилання для подяки необов’язкове й доступне після завершення."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:125
#, elixir-autogen, elixir-format
msgid "Help with a wheel"
msgstr "Допомогти з колесом"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:51
#: lib/who_need_help_web/controllers/page_html/home.html.heex:389
#, elixir-autogen, elixir-format
msgid "I need help"
msgstr "Мені потрібна допомога"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:158
#, elixir-autogen, elixir-format
msgid "Interactive demo"
msgstr "Інтерактивний приклад"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:280
#, elixir-autogen, elixir-format
msgid "Leave a match, block a person, or send a scoped report when something feels wrong."
msgstr "Відмовтеся від взаємодії, заблокуйте людину або надішліть скаргу на конкретний об’єкт, якщо щось здається небезпечним."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:4
#, elixir-autogen, elixir-format
msgid "Medicine pickup · example"
msgstr "Отримання ліків · приклад"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:39
#, elixir-autogen, elixir-format
msgid "Need help nearby? Ask the community."
msgstr "Потрібна допомога поруч? Зверніться до спільноти."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:262
#, elixir-autogen, elixir-format
msgid "No mandatory payment"
msgstr "Без обов’язкової оплати"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:337
#, elixir-autogen, elixir-format
msgid "No. Help has no mandatory fee. A helper may optionally publish an external thank-you link after a completed handover."
msgstr "Ні. Допомога не потребує обов’язкової оплати. Після підтвердженої передачі помічник може за бажанням указати зовнішнє посилання для подяки."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:304
#, elixir-autogen, elixir-format
msgid "Not only urgent help"
msgstr "Не лише термінова допомога"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:120
#, elixir-autogen, elixir-format
msgid "Only after people and the vehicle are away from active traffic danger."
msgstr "Лише коли люди й транспорт перебувають поза небезпечною зоною активного руху."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:193
#, elixir-autogen, elixir-format
msgid "Only the matched requester and helper receive the private chat."
msgstr "Приватний чат доступний лише автору заявки й призначеному помічнику."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:167
#, elixir-autogen, elixir-format
msgid "Privacy by default"
msgstr "Приватність за замовчуванням"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:271
#, elixir-autogen, elixir-format
msgid "Private matched chat"
msgstr "Приватний чат після збігу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:325
#, elixir-autogen, elixir-format
msgid "Quick answers"
msgstr "Короткі відповіді"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:295
#, elixir-autogen, elixir-format
msgid "Read the safety rules"
msgstr "Прочитати правила безпеки"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:378
#, elixir-autogen, elixir-format
msgid "Ready to ask or help nearby?"
msgstr "Готові попросити про допомогу або допомогти поруч?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:278
#, elixir-autogen, elixir-format
msgid "Reports and blocking"
msgstr "Скарги й блокування"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:170
#, elixir-autogen, elixir-format
msgid "See nearby needs without exposing a home address"
msgstr "Дізнавайтеся про потреби поблизу, не розкриваючи домашню адресу"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:200
#, elixir-autogen, elixir-format
msgid "Share live location only by choice"
msgstr "Діліться геопозицією лише за власним вибором"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:310
#, elixir-autogen, elixir-format
msgid "Social activities are separate from urgent requests. Organizers approve participants, and exact meeting details stay inside the approved group."
msgstr "Соціальні активності відокремлені від термінових заявок. Організатори схвалюють учасників, а точні відомості про зустріч залишаються всередині схваленої групи."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:96
#, elixir-autogen, elixir-format
msgid "Start with urgent practical help"
msgstr "Почніть із термінової практичної допомоги"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:150
#, elixir-autogen, elixir-format
msgid "The demo map is unavailable. The example steps remain available beside it."
msgstr "Демонстраційна карта недоступна. Кроки прикладу залишаються доступними поруч."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:113
#, elixir-autogen, elixir-format
msgid "The medicine is already legally purchased or reserved for pickup."
msgstr "Ліки вже законно придбані або зарезервовані для отримання."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:347
#, elixir-autogen, elixir-format
msgid "The medicine must already be legally purchased or reserved. The service does not prescribe, recommend, sell, or handle controlled substances."
msgstr "Ліки мають бути заздалегідь законно придбані або зарезервовані. Сервіс не призначає, не рекомендує, не продає й не обробляє контрольовані речовини."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:184
#, elixir-autogen, elixir-format
msgid "The public marker does not need to reveal an exact address."
msgstr "Публічна позначка не повинна розкривати точну адресу."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:273
#, elixir-autogen, elixir-format
msgid "There is no unsolicited inbox between strangers."
msgstr "Між незнайомими людьми немає можливості писати без збігу."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:173
#, elixir-autogen, elixir-format
msgid "These three points are synthetic examples. Real public discovery follows each requester's location visibility choice."
msgstr "Ці три точки — синтетичні приклади. Відображення реальних заявок залежить від обраної автором заявки видимості геопозиції."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:287
#, elixir-autogen, elixir-format
msgid "Verified reputation signals"
msgstr "Підтверджені сигнали репутації"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:99
#, elixir-autogen, elixir-format
msgid "What can you ask the community for?"
msgstr "Про що можна попросити спільноту?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:364
#, elixir-autogen, elixir-format
msgid "What if there is immediate danger?"
msgstr "Що робити за безпосередньої небезпеки?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:354
#, elixir-autogen, elixir-format
msgid "Who can see my exact address?"
msgstr "Хто побачить мою точну адресу?"
#: lib/who_need_help_web/controllers/page_html/home.html.heex:357
#, elixir-autogen, elixir-format
msgid "You choose the visibility. Exact active coordinates can be limited to the matched helper and are removed when sharing stops."
msgstr "Ви самі обираєте видимість. Точні поточні координати можна показувати лише призначеному помічнику; після зупинення передавання вони видаляються."
#: lib/who_need_help_web/controllers/page_html/home.html.heex:255
#, elixir-autogen, elixir-format
msgid "You stay in control of the match"
msgstr "Ви контролюєте взаємодію"

View File

@ -7,7 +7,15 @@ defmodule WhoNeedHelpWeb.PageControllerTest do
document = LazyHTML.from_document(html)
[content_security_policy] = get_resp_header(conn, "content-security-policy")
assert html =~ "Help can be closer than you think."
assert html =~ "Need help nearby? Ask the community."
assert html =~ "I need help"
assert html =~ "I can help"
assert html =~ "What can you ask the community for?"
assert html =~ "Example data — not live requests"
assert html =~ "See nearby needs without exposing a home address"
assert html =~ "You stay in control of the match"
assert html =~ "Find company for coffee, cinema, a walk, or a hike"
assert html =~ "Before you create a request"
assert content_security_policy =~ "default-src 'self'"
assert content_security_policy =~ "script-src 'self'"
refute content_security_policy =~ "script-src 'self' 'unsafe-inline'"
@ -39,6 +47,13 @@ defmodule WhoNeedHelpWeb.PageControllerTest do
assert Enum.count(LazyHTML.query(document, "head link[rel='icon'][href='/images/logo.svg']")) ==
1
assert Enum.count(
LazyHTML.query(
document,
"#home-demo-map[role='region'][data-static-aid-map='true'][data-demo-map='true']"
)
) == 1
assert Enum.count(
LazyHTML.query(document, "head link[rel='apple-touch-icon'][sizes='180x180']")
) == 1
@ -76,7 +91,10 @@ defmodule WhoNeedHelpWeb.PageControllerTest do
test "GET / selects Russian locale", %{conn: conn} do
conn = get(conn, ~p"/?locale=ru")
assert html_response(conn, 200) =~ "Помощь может быть ближе, чем кажется."
html = html_response(conn, 200)
assert html =~ "Нужна помощь рядом? Обратитесь к сообществу."
assert html =~ "Демонстрационные данные — не реальные заявки"
end
test "health endpoints expose status without internal node names", %{conn: conn} do
@ -97,7 +115,10 @@ defmodule WhoNeedHelpWeb.PageControllerTest do
assert html_response(conn, 200) =~ "Правила безпеки"
conn = get(conn, ~p"/")
assert html_response(conn, 200) =~ "Допомога може бути ближче, ніж здається."
html = html_response(conn, 200)
assert html =~ "Потрібна допомога поруч? Зверніться до спільноти."
assert html =~ "Демонстраційні дані — не реальні заявки"
end
test "GET /safety", %{conn: conn} do