Nominate a local food source. WXL:FOOD reviews it before it becomes part of the public map.
{verifiedCount}verified {verifiedCount === 1 ? 'source' : 'sources'} on the map
How the registry works
People closest to the work keep the map honest.
Anyone in the network can nominate a pantry, fridge, farm, kitchen, church, school program, market, or mutual-aid group. A coordinator confirms the source, its hours, and what it can actually offer.
01Nominate a source
02Verify the details
03Connect it to requests
Add to the network
Nominate a food source
{nominated.length > 0 &&
{nominated[0]} is in the review queue.
}
>
-}
diff --git a/wxl/src/main.tsx b/wxl/src/main.tsx
deleted file mode 100644
index fa793d2..0000000
--- a/wxl/src/main.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import App from './App'
-import './styles.css'
-
-const root = document.getElementById('root')
-
-if (!root) throw new Error('Root element #root was not found')
-
-createRoot(root).render(
-
-
- ,
-)
diff --git a/wxl/src/vite-env.d.ts b/wxl/src/vite-env.d.ts
deleted file mode 100644
index ede8f6d..0000000
--- a/wxl/src/vite-env.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-///
-
-declare const __WXL_BUILD_ID__: string
diff --git a/wxl/.env.example b/yuhm/.env.example
similarity index 96%
rename from wxl/.env.example
rename to yuhm/.env.example
index c14977f..ac40780 100644
--- a/wxl/.env.example
+++ b/yuhm/.env.example
@@ -22,6 +22,6 @@ LOCATION_ENCRYPTION_KEY=
# Server-only Netlify Functions. RESEND_API_KEY must support audience access.
RESEND_API_KEY=
-WXL_RESEND_AUDIENCE_ID=
+YUHM_RESEND_AUDIENCE_ID=
EMAIL_FROM=
EMAIL_TO_OPS=
diff --git a/wxl/DEPLOY.md b/yuhm/DEPLOY.md
similarity index 78%
rename from wxl/DEPLOY.md
rename to yuhm/DEPLOY.md
index 7c6e177..3f6ca67 100644
--- a/wxl/DEPLOY.md
+++ b/yuhm/DEPLOY.md
@@ -1,19 +1,20 @@
-# WXL:FOOD deployment
+# yuhm deployment
## Target
-- Host: `wxl.handprotocol.org`
-- Netlify site: `wxl-food`, id `56ee91bf-bf15-472d-8c1c-d6c30af05d6c`
-- Netlify base directory: `wxl`
+- Host: `yuhm.handprotocol.org`
+- Legacy host: `wxl.handprotocol.org` stays a domain alias on the site and 301-redirects to `yuhm.handprotocol.org` via `public/_redirects` (renamed from WXL:FOOD on 2026-08-24)
+- Netlify site: `yuhm-network`, id `56ee91bf-bf15-472d-8c1c-d6c30af05d6c`
+- Netlify base directory: `yuhm`
- Build command: `npm run build`
- Publish directory: `dist`
## How deploys actually happen
-The `wxl-food` Netlify site is **not linked to the GitHub repository** (verified 2026-08-11: `build_settings.repo_url` is empty). Pushing to `main` does not deploy WXL. Every production deploy is a CLI publish:
+The `yuhm-network` Netlify site is **not linked to the GitHub repository** (verified 2026-08-11: `build_settings.repo_url` is empty). Pushing to `main` does not deploy yuhm. Every production deploy is a CLI publish:
```bash
-cd wxl
+cd yuhm
npm ci && npm run build
netlify deploy --prod --site 56ee91bf-bf15-472d-8c1c-d6c30af05d6c --dir dist --message " ()"
```
@@ -21,33 +22,33 @@ netlify deploy --prod --site 56ee91bf-bf15-472d-8c1c-d6c30af05d6c --dir dist --m
Deploy from a clean checkout of `main`, not a working tree with unrelated changes. Security headers ship via `public/_headers` (copied into `dist`), because `[[headers]]` in `netlify.toml` is not applied on CLI `--dir` deploys. Verify after deploying:
```bash
-curl -sI https://wxl.handprotocol.org/ | grep -i content-security-policy
+curl -sI https://yuhm.handprotocol.org/ | grep -i content-security-policy
```
## Environment
-Set these variables on the WXL:FOOD Netlify site:
+Set these variables on the yuhm Netlify site:
```text
VITE_SUPABASE_URL=https://.supabase.co
VITE_SUPABASE_ANON_KEY=
```
-The browser receives only the anon key. The service-role key stays in the HAND Command Center and is never added to WXL:FOOD.
+The browser receives only the anon key. The service-role key stays in the HAND Command Center and is never added to yuhm.
-In the HAND Supabase dashboard, open **Authentication > Sign In / Providers > Email** and turn off **Confirm email**. WXL signup expects `signUp` to return a session immediately. The client then opens `/app/`; standard `username`, `new-password`, and form-submit metadata lets the member's browser offer to save the credentials locally.
+In the HAND Supabase dashboard, open **Authentication > Sign In / Providers > Email** and turn off **Confirm email**. yuhm signup expects `signUp` to return a session immediately. The client then opens `/app/`; standard `username`, `new-password`, and form-submit metadata lets the member's browser offer to save the credentials locally.
In **Authentication > URL Configuration**, set:
```text
-Site URL: https://wxl.handprotocol.org
-Redirect URL: https://wxl.handprotocol.org/app/?mode=recovery
+Site URL: https://yuhm.handprotocol.org
+Redirect URL: https://yuhm.handprotocol.org/app/?mode=recovery
Redirect URL: http://localhost:5173/app/?mode=recovery
```
The production recovery URL must appear exactly in the redirect allowlist. Otherwise Supabase can fall back to its default Site URL, which is commonly `http://localhost:3000`.
-If the recovery email template was customized, keep `{{ .ConfirmationURL }}` as the link target. A manually constructed link must use `{{ .RedirectTo }}`, not `{{ .SiteURL }}`, so the `redirectTo` value supplied by WXL is preserved.
+If the recovery email template was customized, keep `{{ .ConfirmationURL }}` as the link target. A manually constructed link must use `{{ .RedirectTo }}`, not `{{ .SiteURL }}`, so the `redirectTo` value supplied by yuhm is preserved.
The `FOOD IS HERE!` operations email hook also reads these server-side values:
@@ -55,21 +56,21 @@ The `FOOD IS HERE!` operations email hook also reads these server-side values:
RESEND_API_KEY
EMAIL_FROM
EMAIL_TO_OPS
-WXL_RESEND_AUDIENCE_ID
+YUHM_RESEND_AUDIENCE_ID
```
-`EMAIL_FROM` should use the existing verified `handprotocol.org` domain, for example `WXL:FOOD `. The function falls back to HAND's existing `RESEND_NOTIFY_FROM`, `RESEND_NOTIFY_TO`, and `RESEND_FORWARD_TO` names when present. Do not add a Resend key to any `VITE_` variable.
+`EMAIL_FROM` should use the existing verified `handprotocol.org` domain, for example `yuhm `. The function falls back to HAND's existing `RESEND_NOTIFY_FROM`, `RESEND_NOTIFY_TO`, and `RESEND_FORWARD_TO` names when present. Do not add a Resend key to any `VITE_` variable.
-The email-only WXL updates form uses `RESEND_API_KEY` and `WXL_RESEND_AUDIENCE_ID` to add contacts to a Resend audience without creating Supabase accounts. If `WXL_RESEND_AUDIENCE_ID` is absent, it falls back to `RESEND_AUDIENCE_ID`. Use a WXL-specific audience when available so platform updates and future offerings can be managed separately. Audience emails must retain Resend's unsubscribe link. Each newly added updates subscriber is also sent through HAND's shared feedback notification path. Successful WXL account creation uses that same path. Keep `EMAIL_TO_OPS=handprotocol@gmail.com` on the HAND Netlify site so both notices reach operations. Set `HAND_FEEDBACK_ENDPOINT` on WXL only to override the shared endpoint for local or staging use.
+The email-only yuhm updates form uses `RESEND_API_KEY` and `YUHM_RESEND_AUDIENCE_ID` to add contacts to a Resend audience without creating Supabase accounts. If `YUHM_RESEND_AUDIENCE_ID` is absent, it falls back to `RESEND_AUDIENCE_ID`. Use a yuhm-specific audience when available so platform updates and future offerings can be managed separately. Audience emails must retain Resend's unsubscribe link. Each newly added updates subscriber is also sent through HAND's shared feedback notification path. Successful yuhm account creation uses that same path. Keep `EMAIL_TO_OPS=handprotocol@gmail.com` on the HAND Netlify site so both notices reach operations. Set `HAND_FEEDBACK_ENDPOINT` on yuhm only to override the shared endpoint for local or staging use.
The feedback panel posts to `https://handprotocol.org/.netlify/functions/feedback` by default. That HAND site function writes the durable Command Center record and sends the operations notification. Keep `EMAIL_TO_OPS=handprotocol@gmail.com` on the HAND Netlify site. `VITE_FEEDBACK_ENDPOINT` may override the shared endpoint for local or staging tests.
-If WXL does not have its own Resend variables, the function forwards the authenticated alert to HAND's shared feedback endpoint. That endpoint provides the existing Command Center, Telegram, and Resend notification fan-out without exposing a key to WXL.
+If yuhm does not have its own Resend variables, the function forwards the authenticated alert to HAND's shared feedback endpoint. That endpoint provides the existing Command Center, Telegram, and Resend notification fan-out without exposing a key to yuhm.
## Routing
-- `/` is the WXL landing page.
-- `/app/` is the WXL:FOOD command center.
+- `/` is the yuhm landing page.
+- `/app/` is the yuhm command center.
- The SPA fallback is defined in `netlify.toml` and `public/_redirects`.
## Database
@@ -97,7 +98,7 @@ Apply these migrations to the HAND Supabase project in order, then add `command`
../command/supabase/migrations/041_wxl_hardening.sql
```
-After migration 026, verify that no auth account is missing the profile row required by WXL food-record foreign keys:
+After migration 026, verify that no auth account is missing the profile row required by yuhm food-record foreign keys:
```sql
select users.id, users.email
@@ -200,4 +201,4 @@ Inventory code does not yet provide automated expiry, recall quarantine, lot tra
## Domain
-The Netlify site `wxl-food` is configured with `wxl.handprotocol.org` as its primary custom domain. Netlify provisioned SSL and manages the DNS record for the existing `handprotocol.org` zone. The current deployment is live at `https://wxl.handprotocol.org`.
+The Netlify site `yuhm-network` is configured with `yuhm.handprotocol.org` as its primary custom domain. Netlify provisioned SSL and manages the DNS record for the existing `handprotocol.org` zone. The current deployment is live at `https://yuhm.handprotocol.org`.
diff --git a/yuhm/DESIGN.md b/yuhm/DESIGN.md
new file mode 100644
index 0000000..bead9d2
--- /dev/null
+++ b/yuhm/DESIGN.md
@@ -0,0 +1,51 @@
+# DESIGN.md — yuhm
+
+Derived from `src/styles.css` (live code) and `docs/WXLOVE-THEME-OPTIMIZATION.md` (token
+decision). The landing/public entry is the **brand** surface; the dashboard is **product**.
+
+## Color
+
+| Token | Value | Role |
+|---|---|---|
+| ink | `#20342a` / `#173f31` (headings) | Primary text on cream |
+| muted | `#50675a` · `#5b6e62` · `#62766a` | Secondary text |
+| paper | `#fbf8ef` (landing) · `#fffefa` (cards) | Base surfaces |
+| forest | `#2d6b50` / `#285a46` | Primary accent: icons chips, actions, links |
+| forest-fill | `#eaf3e8` | Selected/tinted fill (find-food card) |
+| coral | `#d45f43` (landing heart) · `#ef9877` (dark) | Brand signature only — heart/wordmark, never UI chrome |
+| coral-fill | `#f7dfd3` | Contributor icon chip |
+| amber | `#d97706` | HAND family marker + kicker dot + focus outline; ≤5% of screen |
+| warm glow | `#f6dfb9` | Hero radial wash on the landing |
+
+Landing is warm cream with forest structure; coral is precious. Dot-grid texture
+(`#b8c9b7` at 24px) fades down the page.
+
+## Typography
+
+- **Space Grotesk** — display: h1 (clamp 3.5–7.5rem, -.07em tracking, .9 line), card titles.
+- **DM Sans** — body/UI.
+- **DM Mono** — eyebrows/kickers/metadata, uppercase, wide tracking, 9–10px.
+
+## Layout
+
+- Content column `min(1180px, 100% - 64px)`; 32px gutters under 760px.
+- Landing: nav → hero intro (left-aligned, max 790px) → three entry-path cards → notes → footer.
+- Cards: 18px radius, 1px `#d9e2d8` border, soft green-tinted shadow.
+
+## Motion
+
+- Base tokens: `--ease-out: cubic-bezier(0.23,1,0.32,1)`, `--duration-dialog: 250ms`.
+- Library: `motion/react` (v12) — already a dependency; `useReducedMotion` is the codebase
+ convention for gating.
+- Landing (brand surface) may use springs for playful entrances and hovers: gentle
+ overshoot (bounce ≤ 0.35), staggered reveals, hover lift/tilt. Dashboard keeps the calm
+ ease-out posture.
+- Every animation honors `prefers-reduced-motion` (fade-only or none).
+
+## Components (landing)
+
+- `landing-nav` brand + language toggle + feedback + sign-in + HAND link.
+- `landing-kicker` amber dot + DM Mono uppercase label.
+- `entry-path` cards (food = forest fill, contributor = coral chip, gather = paper) with
+ icon chip, small/strong/span copy stack, arrow action row.
+- Focus: 3px amber outline, 4px offset — never removed.
diff --git a/wxl/HANDOFF.md b/yuhm/HANDOFF.md
similarity index 82%
rename from wxl/HANDOFF.md
rename to yuhm/HANDOFF.md
index ae861e1..f4ba836 100644
--- a/wxl/HANDOFF.md
+++ b/yuhm/HANDOFF.md
@@ -1,18 +1,46 @@
-# WXL:FOOD Handoff
+# yuhm Handoff
-Last updated: 2026-08-11
+Last updated: 2026-08-24
-This is the working orientation document for `wxl/`. Read it before changing the app. The root repository handoff covers HAND Protocol as a whole. This file focuses on WXL:FOOD, its current behavior, what is real, what is illustrative, and what should be built next.
+> **Renamed 2026-08-24.** This product was WXL:FOOD ("W Xtra Love") until 2026-08-24, when it became **yuhm** (the yuhm network) — yum with the om at its center, Austin's regenerative food network. The live host moved from `wxl.handprotocol.org` to `yuhm.handprotocol.org` (the old host 301-redirects). Applied Supabase migrations keep their historical `NNN_wxl_*` filenames, historical plans keep their `plans/00X-wxl-*` names, and docs dated before the rename may still say WXL.
+
+This is the working orientation document for `yuhm/`. Read it before changing the app. The root repository handoff covers HAND Protocol as a whole. This file focuses on yuhm, its current behavior, what is real, what is illustrative, and what should be built next.
Public-facing product behavior and safety boundaries are maintained in `docs/LIVING-DOCS.md`. Keep it current when a feature promise or workflow changes. It is intended to become the source for a future HTML documentation page.
+## Living-map world experience, 2026-08-24 (now the default app)
+
+An immersive "cooperative living world" surface that is now the **default app experience**: bare `/app/` and `/app/?mode=anonymous` open it on every viewport (`mode=world` is an explicit alias that also overrides a saved advanced preference). It presents yuhm as a living neighborhood food ecosystem rather than pins on a map. The focused flows keep their URLs: `intent=food` still opens the zero-friction classic finder (command-bar map on phones), `intent=contribute/gather/request` are unchanged, auth modes are unchanged, and `mode=advanced`/`workspace=` (or the persisted `yuhm:experience-mode`) still open the dashboard. The world links back out through a "More ways to take part" block (Find food, Contribute, Gather, Requests, Sign in) and a "Classic food finder" note on the map. Note: successful login redirects to `/app/`, so signed-in members without the advanced preference now land in the world.
+
+- **Where it lives.** Everything is in `src/world/`: `WorldExperience.tsx` (shell, routing between panels), `WorldMap.tsx` (Leaflet living map), `WorldSheet.tsx` (draggable mobile sheet, docked desktop panel), `panels.tsx` (discover, spot, mission, pool, run), `views.tsx` (onboarding, pulse, profile, gratitude), `worldData.ts` (sample world), `worldStrings.ts` (bilingual EN/ES chrome copy), `world.css` (scoped tokens from the yuhm palette: cacao `#493128`, garden green `#52734D`, tomato coral `#E96545`, sweet corn `#F2C14E`, herb mint `#A9C98B`, warm oat `#FFF3DC`). The chunk lazy-loads; `App.tsx` routes `mode=world` ahead of the mobile map.
+- **Honesty boundary (load-bearing).** The world merges two data kinds: the real public directory listings from `foodLocations.ts` (rendered activity-free, with verified/community labels, confirm-hours note, and a real directions link) and an invented sample circle ("Eastside Circle": six invented spots, six invented neighbors, missions, one pool, one run). Every sample record carries `sample: true` and the interface labels it Sample; the map carries a persistent "Demo world" note. Do not attach sample activity to real listings and do not present the demo loop as live network movement.
+- **The loop.** Onboarding (find your yuhm, pick a role, on-device-only location choice, circle reveal with one first invitation) leads into Discover, Join, Coordinate, Complete, a gratitude overlay with a thank-you note and a wave of light along the route, and a regenerate nudge (compost return). Progress is sessionStorage-only (`yuhm:world-progress`), the intro choice is localStorage (`yuhm:world-intro`), and mission completion locally bumps the Yuhm Pulse view. Nothing writes to Supabase.
+- **Resonance system.** Pulse rings on active spots, a dashed circle halo around the neighborhood, flowing coral route dashes, a soil-dotted compost return leg, and a corn wave sweep on completion; all Leaflet vector layers are guarded by `L.Browser.svg` (jsdom lacks vector rendering) and every animation collapses under `prefers-reduced-motion`.
+- **Lenses do real work.** The layer chips (Everything, Grow, Make, Share, Move, Commons) refit the camera to the lens's spots, filter the discover panel's missions and spot lists, and explain themselves with a lens line. Move previews the Saturday run route; Commons becomes the real public directory view with no sample missions. Lens definitions live in `worldData.ts` (`layerKinds`).
+- **Terminology.** Yuhm Circle, Yuhm Spot, Yuhm Pool, Yuhm Run, Yuhm Drop, Yuhm Commons, Yuhm Pulse are introduced on this surface only.
+- **Tests.** `src/world/World.test.tsx` covers the full loop, the skip path, the real-listing honesty boundary, and Spanish onboarding. Suite is 105 tests. Note: a populated `.env.local` flips `foodDbConfigured` and breaks App.test's database-gate assertions; run `VITE_SUPABASE_URL= VITE_SUPABASE_ANON_KEY= npm test` when one is present.
+- **Open follow-ups.** Sample world data (spot names, mission stories) is English-only; the sheet drag could add a focus trap; consider whether signed-in members should get a member-shaped default instead of the world.
+
+## Playful landing pass ("yuhmmy"), 2026-08-24
+
+The public landing (`src/LandingPage.tsx`) was rebuilt around the new yuhm brand direction, with spring animations via the already-installed `motion` package:
+
+- **Brand assets.** `yuhm-logo.png` and `yuhm-playful-ref.png` at this directory root are the reference images (the logo PNG has a baked-in checkerboard, do not embed it). The bowl-network mark was recreated as an animatable inline SVG in `src/LandingDecor.tsx` (`BowlMark`), alongside sticker-style produce SVGs, the rolling-hills divider, and two environment-safe hooks (`usePrefersReducedMotion`, `useInViewOnce` — both guard for jsdom, which lacks `matchMedia` and `IntersectionObserver`; do NOT stub `matchMedia` in `testSetup.ts`, the app's viewport hook falls back to `innerWidth` and a stub breaks the mobile-map test).
+- **Type.** `Baloo 2` (added to `index.html` fonts) carries landing display type; the wordmark is brown `#4a332a`. Dashboard typography untouched.
+- **Motion.** Hero choreography: headline words spring in, a tomato-coral scribble encircles the last title line, the bowl mark draws itself and its nodes pop, produce stickers spring-scatter then idle-bob with cursor parallax; path cards spring in on scroll and wiggle their icon chips on hover. Everything gates on `prefers-reduced-motion` (fade-free static render).
+- **Layout.** Hero is a two-column grid (copy left, illustration right); an SVG hills divider leads into a sage `entry-band` holding the three path cards (now a true 3-across via `.entry-path-list-three` override — the base `.entry-path-list` 2-column rule used to win). Landing v2 styles live at the end of `src/styles.css`; note the nav `.brand-mark` name was already taken by the dashboard, the landing uses `.yuhm-mark`.
+- **i18n.** New `landing.flow.*` keys (Grow · Pool · Move · Share strip) in EN and ES.
+- `PRODUCT.md` and `DESIGN.md` at this root were derived from repo docs for design-tool context.
+
+Verification: 101 tests, build clean. Deploy remains manual CLI (`DEPLOY.md`).
+
## One live food-finding loop, 2026-08-11
Plan `plans/003-wxl-food-network-upgrade.md` Phase 1 landed:
- **Live data everywhere.** The simple finder, the mobile map, and the dashboard Overview all load `food_spots` and merge them with the bundled directory. The Overview schematic CSS map is retired; the real Leaflet map is the only map.
- **Alerts reach food seekers.** FOOD IS HERE alerts render as a countdown banner on the simple finder and the mobile map (realtime inserts included), not just the coordinator dashboard. `src/lib/useFoodAlerts.ts` is the one subscription path; `src/FoodAlertBanner.tsx` is the public signal.
-- **Bilingual EN/ES.** `src/i18n.tsx` holds the full string catalog, browser-language detection, and the persisted globe toggle (`wxl:lang`). Landing, simple experience, mobile map, prompts, and core login run in both languages. The coordinator dashboard remains English for now.
+- **Bilingual EN/ES.** `src/i18n.tsx` holds the full string catalog, browser-language detection, and the persisted globe toggle (`yuhm:lang`). Landing, simple experience, mobile map, prompts, and core login run in both languages. The coordinator dashboard remains English for now.
- **Real router.** `src/router.tsx` provides history-based navigation with working back button and no full page loads; the URL contract (`/app`, `?mode=`, `?intent=`, `?workspace=`) is preserved and dashboard views deep-link via `?workspace=`. `src/AuthProvider.tsx` replaced the three duplicated session effects. `App.tsx` is a thin route shell; the six embedded components moved to their own files.
- **Honest Overview.** The network summary shows live counts (active alerts, mapped places, open requests, public drop-offs). Dead controls removed: Impact reports nav item, unbound topbar search, basket/impact-report toast buttons. The sidebar request badge and Partner network verified count are computed, not literals.
- **One vocabulary.** All three food-finding surfaces share the same filter set: All · Verified · Community reports · Food here now.
@@ -51,18 +79,18 @@ On 2026-07-29, the command bar became the preferred lab direction. It is now the
## Orient in one paragraph
-WXL:FOOD is a local food coordination app for Austin. It is intended to help neighbors, community groups, food sources, volunteers, and coordinators see available food, publish needs, offer help, nominate sources, and organize rescue and harvest activity. The current app is a Vite, React, and TypeScript prototype with a polished landing page and command-center interface. It uses the HAND Supabase project for authentication and a small set of persisted workflows. Much of the dashboard is still illustrative. The immediate product task is to turn the strongest prototype flows into honest, complete, persisted workflows without implying that placeholder data is live network activity.
+yuhm is a local food coordination app for Austin. It is intended to help neighbors, community groups, food sources, volunteers, and coordinators see available food, publish needs, offer help, nominate sources, and organize rescue and harvest activity. The current app is a Vite, React, and TypeScript prototype with a polished landing page and command-center interface. It uses the HAND Supabase project for authentication and a small set of persisted workflows. Much of the dashboard is still illustrative. The immediate product task is to turn the strongest prototype flows into honest, complete, persisted workflows without implying that placeholder data is live network activity.
-## WXLove prototype checkpoint, 2026-07-26
+## yuhm prototype checkpoint, 2026-07-26
-The user is exploring `WXLove` as the public name for WXL:FOOD and asked for a prototype, a theme-reasoning pass, an interactive architecture diagram, and a record of OpenRouter credit use. This is still exploration. The application has not been renamed, the live domain remains `wxl.handprotocol.org`, and no product behavior or database identifier changed.
+The user is exploring `yuhm` as the public name for yuhm and asked for a prototype, a theme-reasoning pass, an interactive architecture diagram, and a record of OpenRouter credit use. This is still exploration. The application has not been renamed, the live domain remains `yuhm.handprotocol.org`, and no product behavior or database identifier changed.
### Artifacts created
-- `docs/WXLOVE-THEME-OPTIMIZATION.md`: draft theme decision. It keeps forest green as the working UI color, coral as the wordmark and heart signature, and HAND amber as a limited family marker. It retains DM Sans, Space Grotesk, DM Mono, and the existing motion tokens.
+- `docs/yuhm-THEME-OPTIMIZATION.md`: draft theme decision. It keeps forest green as the working UI color, coral as the wordmark and heart signature, and HAND amber as a limited family marker. It retains DM Sans, Space Grotesk, DM Mono, and the existing motion tokens.
- `public/architecture/index.html`: standalone interactive architecture map, published at `/architecture/`. It shows the client, Netlify functions, active `command.food_*` data, the built but gated coordination protocol, inactive services, and external dependencies. Nodes open a detail panel and toolbar controls filter by layer. The page is intentionally reachable only by direct URL and is not linked from the landing page or app navigation.
-- `docs/WXLOVE-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md`: full model-attempt and cost record.
-- `../.hermes/plans/2026-07-25_wxlove-rebrand-and-coordination-redesign.md`: proposed rebrand and coordination-redesign plan. It is a planning artifact, not approval to execute the rename.
+- `docs/yuhm-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md`: full model-attempt and cost record.
+- `../.hermes/plans/2026-07-25_yuhmove-rebrand-and-coordination-redesign.md`: proposed rebrand and coordination-redesign plan. It is a planning artifact, not approval to execute the rename.
The architecture map was approved for standalone publication on 2026-07-27. The theme decision, session record, and rebrand plan remain review artifacts and should not be published as product changes without explicit approval.
@@ -110,11 +138,11 @@ Verified in headless Chrome at 1,440 by 1,100 and 390 by 844:
- Every visual layer matched a filter.
- `git diff --check` passed.
-Keep this as a standalone documentation prototype. Do not apply its dark technical palette to the WXLove product.
+Keep this as a standalone documentation prototype. Do not apply its dark technical palette to the yuhm product.
## Current desktop checkpoint, 2026-07-25
-The shared centered-dialog motion plan is complete and pushed to `main` in commit `5fa66ebfb` (`feat(wxl): add shared dialog motion`).
+The shared centered-dialog motion plan is complete and pushed to `main` in commit `5fa66ebfb` (`feat(yuhm): add shared dialog motion`).
- `src/useDialogMotion.ts` now holds dialogs in the tree through their exit transition and provides a 300 ms safety fallback.
- Centered `.modal-backdrop` and `.access-backdrop` surfaces use a 250 ms strong ease-out treatment.
@@ -134,7 +162,7 @@ The completed implementation plan remains at `../plans/001-wxl-shared-dialog-mot
Start the next desktop pass in a new context. Read this file, the root `AGENTS.md`, `PRODUCT.md`, and `DESIGN.md`, then run:
```text
-$find-animation-opportunities audit wxl desktop Advanced workspace only. Treat plans/001-wxl-shared-dialog-motion.md as completed. Exclude centered dialogs unless a regression is found. Prioritize navigation, workspace transitions, data-state changes, and interaction feedback. Produce recommendations only.
+$find-animation-opportunities audit yuhm desktop Advanced workspace only. Treat plans/001-wxl-shared-dialog-motion.md as completed. Exclude centered dialogs unless a regression is found. Prioritize navigation, workspace transitions, data-state changes, and interaction feedback. Produce recommendations only.
```
After reviewing those recommendations, choose one bounded target and use `$improve-animations plan `. Execute only the selected plan. This sequence is preferred because the previous context was dominated by the completed dialog implementation and no longer improves the next discovery pass.
@@ -163,7 +191,7 @@ After reviewing those recommendations, choose one bounded target and use `$impro
| Browser client | `@supabase/supabase-js` |
| Database schema | `command` |
| Hosting | Netlify |
-| Live domain | `https://wxl.handprotocol.org` |
+| Live domain | `https://yuhm.handprotocol.org` |
| Build | `npm run build` |
| Main UI | `src/App.tsx` |
| Styles | `src/styles.css` |
@@ -175,9 +203,10 @@ After reviewing those recommendations, choose one bounded target and use `$impro
| Route | Current behavior |
|---|---|
-| `/` | WXL landing page |
-| `/app/` | Default public app; phones open the command-bar food map, while larger screens retain the existing public layout |
-| `/app/?mode=anonymous` | Explicit browse entry; phones open the command-bar food map and a valid Supabase session still determines write access |
+| `/` | yuhm landing page |
+| `/app/` | The living-map world experience on every viewport (a saved advanced preference opens the dashboard instead) |
+| `/app/?mode=anonymous` | Same living-map world; a valid Supabase session still determines write access on other surfaces |
+| `/app/?mode=world` | Explicit world entry; also overrides a saved advanced preference |
| `/app/?mode=login` | Email and password login |
| `/app/?mode=login&signup=1` | Account creation |
| `/app/?mode=reset` | Request a password-reset email |
@@ -233,7 +262,7 @@ On phones, the food intent opens the complete Austin map without an interruption
- The account control shows identity from Supabase user metadata or a readable email fallback.
- Authenticated members can sign out from the account menu and immediately return to browse-only access.
- Authentication errors and success notices are shown in the login card.
-- Visitors can join the WXL email updates list with only an email address. This does not create a Supabase account or grant write access.
+- Visitors can join the yuhm email updates list with only an email address. This does not create a Supabase account or grant write access.
### Public request loading
@@ -341,15 +370,15 @@ On phones, the food intent opens the complete Austin map without an interruption
### Feedback, experiments, and testing
-- A persistent bottom-right bell opens two panels on every WXL surface: email alerts and feedback.
-- Email alerts join the dedicated WXL Resend audience without creating an account.
+- A persistent bottom-right bell opens two panels on every yuhm surface: email alerts and feedback.
+- Email alerts join the dedicated yuhm Resend audience without creating an account.
- Feedback posts to HAND's shared feedback endpoint, so notes continue into Command Center, Telegram, and the Resend operations inbox at `handprotocol@gmail.com`.
- The advanced-workspace sidebar opens the same shared feedback panel. Failed notes queue locally and retry on focus or reconnection.
- The command CTA runs a stable two-variant test, `map_first` or `rescue_first`, stored in local storage.
- Click progress persists locally for every visitor. Authenticated interaction events batch to `command.food_engagement_events` every ten interactions.
- Admins can query `command.food_engagement_leaderboard`; invoker row-level security keeps it internal.
- Vitest covers landing links, anonymous write gates, FOOD IS HERE visibility and navigation, feedback, the mobile navigation drawer, client-side routing with the back button, Spanish detection and the language toggle, live consumer alerts, and mocked database contracts. Run `npm test`.
-- `.github/workflows/wxl-ci.yml` runs tests and the production build for WXL pull requests, relevant pushes to `main`, and manual dispatches.
+- `.github/workflows/yuhm-ci.yml` runs tests and the production build for yuhm pull requests, relevant pushes to `main`, and manual dispatches.
### Mobile navigation
@@ -360,30 +389,30 @@ On phones, the food intent opens the complete Austin map without an interruption
### Navigation and identity handoff, 2026-07-16
-This pass reworked the WXL navigation and wordmark together. The goal was to make the X visibly carry the meaning of "with xtra love," give the command interface a stronger sense of place, and connect WXL to the HAND Protocol visual family without turning the product UI into a copy of the campaign site.
+This pass reworked the yuhm navigation and wordmark together. The goal was to make the X visibly carry the meaning of "with xtra love," give the command interface a stronger sense of place, and connect yuhm to the HAND Protocol visual family without turning the product UI into a copy of the campaign site.
#### Visual source and adaptation
The sidebar now adapts elements from the mobile menu on the HAND Protocol landing page in `../web/index.html` and `../web/foundation-campaign/style.css`:
-- The traced network-hand illustration is reproduced as inline SVG in WXL so it inherits local colors, scales cleanly, and does not add an asset request.
+- The traced network-hand illustration is reproduced as inline SVG in yuhm so it inherits local colors, scales cleanly, and does not add an asset request.
- Teal hand lines, amber nodes, a softer coral outline, and restrained radial color fields echo the HAND menu artwork.
- The small illuminated brand dot comes from the HAND navigation wordmark treatment.
-- The HAND menu's layered depth and motion inform the sidebar atmosphere. WXL keeps a solid product surface because the sidebar remains visible for long working sessions.
+- The HAND menu's layered depth and motion inform the sidebar atmosphere. yuhm keeps a solid product surface because the sidebar remains visible for long working sessions.
- Motion is slow and low-amplitude. The global reduced-motion rule collapses these animations for people who request it.
-The source paths are intentionally local to WXL. Future changes to the HAND landing-page SVG will not automatically change the app. If the shared hand artwork evolves, compare both implementations deliberately before syncing them.
+The source paths are intentionally local to yuhm. Future changes to the HAND landing-page SVG will not automatically change the app. If the shared hand artwork evolves, compare both implementations deliberately before syncing them.
#### X identity
-The X is now the signature WXL element:
+The X is now the signature yuhm element:
- The landing-page X uses coral, sits slightly larger than the W and L, and carries an intersection ring plus a small heart.
- The command-center sidebar starts with a circular X mark rather than a generic W tile.
-- The X inside `WXL:FOOD` uses the same coral accent.
+- The X inside `yuhm` uses the same coral accent.
- The small landing-header wordmark also accents the X.
-Keep the X treatment consistent anywhere a new WXL wordmark appears. Coral identifies the X. Amber is reserved for its smaller love or network signals. Do not return to an all-one-color `WXL` wordmark unless the context is strictly monochrome.
+Keep the X treatment consistent anywhere a new yuhm wordmark appears. Coral identifies the X. Amber is reserved for its smaller love or network signals. Do not return to an all-one-color `yuhm` wordmark unless the context is strictly monochrome.
#### Desktop navigation behavior
@@ -391,7 +420,7 @@ Keep the X treatment consistent anywhere a new WXL wordmark appears. Coral ident
- Active destinations use a complete pale-green surface and full border. There is no colored side stripe.
- Each destination has an icon container, label, and optional count.
- The collapse control sits inside the sidebar header instead of floating over the content boundary.
-- Collapsed state is 76px wide, keeps destination icons accessible, exposes labels through native button titles, and remains stored in `localStorage` under `wxl:sidebar-collapsed`.
+- Collapsed state is 76px wide, keeps destination icons accessible, exposes labels through native button titles, and remains stored in `localStorage` under `yuhm:sidebar-collapsed`.
- Decorative hand artwork is hidden in collapsed state so the icon rail stays legible.
#### Mobile navigation behavior
@@ -408,7 +437,7 @@ Keep the X treatment consistent anywhere a new WXL wordmark appears. Coral ident
The top bar is a location breadcrumb, not a product slogan. Its desktop form is:
-`Directory / WXL:FOOD / Current page`
+`Directory / yuhm / Current page`
The final segment updates from the active `View` state and currently supports:
@@ -418,7 +447,7 @@ The final segment updates from the active `View` state and currently supports:
- Community requests
- Partner network
-The labels are centralized in `viewLabels` near the top of `src/App.tsx`. Add new destinations there when extending the `View` union. On small screens, the leading `Directory /` segment is hidden to preserve room for alerts and the primary action, while `WXL:FOOD / Current page` remains visible when space allows.
+The labels are centralized in `viewLabels` near the top of `src/App.tsx`. Add new destinations there when extending the `View` union. On small screens, the leading `Directory /` segment is hidden to preserve room for alerts and the primary action, while `yuhm / Current page` remains visible when space allows.
#### Implementation map
@@ -435,10 +464,10 @@ The labels are centralized in `viewLabels` near the top of `src/App.tsx`. Add ne
- The decorative hand has `aria-hidden="true"`, and its SVG cannot receive focus.
- The current destination exposes `aria-current="page"`.
- Icon-only controls retain explicit accessible labels.
-- The landing-page visual letters are hidden from assistive technology, while the heading itself carries `aria-label="WXL"`.
+- The landing-page visual letters are hidden from assistive technology, while the heading itself carries `aria-label="yuhm"`.
- The mobile scrim is an actual button labeled `Close navigation`, so keyboard and assistive-technology users can dismiss the drawer.
- The drawer test changes `window.innerWidth` to 390px and opens navigation through the top-bar button.
-- The full WXL:FOOD sidebar title is a labeled button that returns to Overview and closes the mobile drawer.
+- The full yuhm sidebar title is a labeled button that returns to Overview and closes the mobile drawer.
#### Verification and follow-up
@@ -485,7 +514,7 @@ Migrations `024_wxl_food.sql` through `040_wxl_food_dropoffs.sql` define:
- owner-checked database functions for offer decisions, withdrawals, and request status changes
- database triggers that maintain request activity counts and status history
-The browser receives only the Supabase anonymous key. Never add a service-role key to WXL.
+The browser receives only the Supabase anonymous key. Never add a service-role key to yuhm.
## What is still illustrative or incomplete
@@ -533,16 +562,16 @@ The app should not claim these boards are ready until they contain functional wo
- Harvest-run assignment enforces capacity, lifting, vehicle, run class, equipment, and validity dates. Service-area and schedule fit require an explicit coordinator confirmation because those fields remain human-readable rather than normalized availability calendars.
- Rescue notifications, overdue escalation, access-history auditing, retention, partial acceptance, and reassignment after incident review remain incomplete.
- Auditable impact reporting has no front-end repository. Food alerts now have a focused notification repository and interface.
-- Source nominations are not loaded into a coordinator review queue in WXL.
+- Source nominations are not loaded into a coordinator review queue in yuhm.
- There is no profile setup or editable account settings flow.
## Important auth and database risks to verify
1. Confirm that Supabase Email authentication is enabled, password login is allowed, and **Confirm email** is turned off.
2. Add the production and local callback URLs to the Supabase redirect allowlist:
- - `https://wxl.handprotocol.org/app/?mode=recovery`
+ - `https://yuhm.handprotocol.org/app/?mode=recovery`
- `http://localhost:5173/app/?mode=recovery`
- Set the Supabase Site URL to `https://wxl.handprotocol.org`; leaving the default `http://localhost:3000` causes password-recovery links to open localhost when the callback is rejected or omitted.
+ Set the Supabase Site URL to `https://yuhm.handprotocol.org`; leaving the default `http://localhost:3000` causes password-recovery links to open localhost when the callback is rejected or omitted.
3. Test immediate signup login, browser password-save behavior, login, logout, reset request, recovery, and expired recovery links on the live domain.
4. Migrations 026 through 039 are applied. Complete the remaining live multi-role, retry, concurrency, and operational verification before broad access.
5. Confirm that the `command` schema is exposed through the Supabase API.
@@ -650,12 +679,12 @@ The build and all 72 automated tests were passing on 2026-07-25 after the shared
## Deployment
-- Netlify site: `wxl-food`
+- Netlify site: `yuhm-network`
- Site id: `56ee91bf-bf15-472d-8c1c-d6c30af05d6c`
-- Base directory: `wxl`
+- Base directory: `yuhm`
- Build command: `npm run build`
- Publish directory: `dist`
-- Production domain: `https://wxl.handprotocol.org`
+- Production domain: `https://yuhm.handprotocol.org`
- SPA fallback: `netlify.toml` and `public/_redirects`
See `DEPLOY.md` for the concise deployment guide.
@@ -771,9 +800,9 @@ Before calling the current auth and community flow production-ready, verify:
## Food-first onboarding and geolocation pass, 2026-07-18
-Implementation commit: `d9335850c` (`feat(wxl): add food-first onboarding and location step`).
+Implementation commit: `d9335850c` (`feat(yuhm): add food-first onboarding and location step`).
-- Replaced the broad WXL splash and access modal with a focused `/W XTRA ♥` food entry.
+- Replaced the broad yuhm splash and access modal with a focused `/W XTRA ♥` food entry.
- Made `I need food` and `I am a Contributor` the two primary choices. The first opens Overview; the second opens Volunteer Command.
- Added `intent=food`, `intent=request`, and `intent=contribute` initial-workspace routing. Intent never changes session-based write access.
- Added optional geolocation after the food choice. Permission is requested only from the explicit `Use my location` button.
@@ -811,7 +840,7 @@ Known geolocation limitation:
## Shared dialog motion pass, 2026-07-25
-Implementation commit: `5fa66ebfb` (`feat(wxl): add shared dialog motion`).
+Implementation commit: `5fa66ebfb` (`feat(yuhm): add shared dialog motion`).
- Added one shared React presence hook for centered dialogs instead of duplicating timers and close-state logic.
- Applied the same 250 ms entry and exit language across account, location, community, rescue, harvest-run, and inventory dialogs.
diff --git a/yuhm/PRODUCT.md b/yuhm/PRODUCT.md
new file mode 100644
index 0000000..92f5793
--- /dev/null
+++ b/yuhm/PRODUCT.md
@@ -0,0 +1,41 @@
+# PRODUCT.md — yuhm
+
+register: brand (public landing + food-finding entry) / product (coordinator dashboard)
+
+## What it is
+
+yuhm (yum with the om at its center) is Austin's regenerative food network — a local food
+coordination app under HAND Protocol. Neighbors, community groups, food sources, volunteers,
+and coordinators use it to see available food, publish needs, offer help, and organize rescue,
+harvest, and gathering activity. Live at yuhm.handprotocol.org. Formerly WXL:FOOD (renamed
+2026-08-24).
+
+## Users
+
+- **Food seekers** — often on a phone, possibly in a hard moment. Zero-friction, no-account
+ browsing of public food locations is a hard requirement. Bilingual EN/ES.
+- **Contributors** — offer food, drive routes, help with storage, join volunteer runs.
+- **Gatherers** — community meals, neighborhood tables.
+- **Coordinators** — operator dashboard (product register, English-only for now).
+
+## Brand and tone
+
+- Name is lowercase **yuhm**; the wordmark carries a coral heart (♥). The heart is the brand's
+ emotional signature, inherited from the WXL coral X.
+- Voice: warm, neighborly, plainspoken, dignified. Never charity-speak, never SaaS-speak.
+ "Food, shared full circle." Nothing good goes to waste — what is left returns to the soil.
+- Playful is on-brand for the public surface: yuhm is literally "yum." Food joy, appetite,
+ abundance. Playfulness must never undercut dignity for someone arriving hungry.
+- Family membership: "Part of HAND Protocol" appears once (footer/header), amber-marked, small.
+
+## Anti-references
+
+- Food-bank institutional gray; pity-toned nonprofit sites.
+- Delivery-app clichés (DoorDash red urgency, cartoon burger mascots).
+- SaaS hero-metric landing templates.
+
+## Strategic principles
+
+- Public food info open to everyone; account only to post or coordinate.
+- Honest surfaces: never imply placeholder data is live network activity.
+- Accessibility survives every flourish: reduced-motion, focus-visible, 200% zoom, touch.
diff --git a/wxl/_handoff-2026-08-11-network-upgrade.md b/yuhm/_handoff-2026-08-11-network-upgrade.md
similarity index 100%
rename from wxl/_handoff-2026-08-11-network-upgrade.md
rename to yuhm/_handoff-2026-08-11-network-upgrade.md
diff --git a/wxl/docs/COORDINATION-PROTOCOL.md b/yuhm/docs/COORDINATION-PROTOCOL.md
similarity index 90%
rename from wxl/docs/COORDINATION-PROTOCOL.md
rename to yuhm/docs/COORDINATION-PROTOCOL.md
index e80b8b8..1da0637 100644
--- a/wxl/docs/COORDINATION-PROTOCOL.md
+++ b/yuhm/docs/COORDINATION-PROTOCOL.md
@@ -1,4 +1,4 @@
-# WXL:FOOD coordination protocol
+# yuhm coordination protocol
Last updated: 2026-07-18
@@ -6,7 +6,7 @@ Status: non-SMS implementation complete and production schema deployed. Operatio
## Purpose
-WXL:FOOD is becoming a channel-independent coordination network. Web, SMS, voice, HAND agents, and approved external agents must operate on the same records and use the same command and policy boundary.
+yuhm is becoming a channel-independent coordination network. Web, SMS, voice, HAND agents, and approved external agents must operate on the same records and use the same command and policy boundary.
Three lanes remain separately governed:
@@ -43,7 +43,7 @@ The TypeScript Coordination API implements scoped REST resources, remote MCP, A2
The Python worker uses OR-Tools for hard-filtered min-cost allocation and capacity-aware vehicle routing. Separate supervised workers process payments, potluck planning, and retention. Five-minute match holds, worker leases, retries, Stripe event reconciliation, mandate ceilings, and location releases execute through database functions.
-The WXL web application includes a Coordination protocol workspace for canonical needs, supplies, matching requests, commitments, and potlucks.
+The yuhm web application includes a Coordination protocol workspace for canonical needs, supplies, matching requests, commitments, and potlucks.
## Deliberately deferred
@@ -51,7 +51,7 @@ SMS remains the next scope. No Messaging webhook, A2P campaign, SMS consent work
## Production gates
-The implementation does not make WXL:FOOD ready for live automated dispatch. The following remain operationally unapproved:
+The implementation does not make yuhm ready for live automated dispatch. The following remain operationally unapproved:
- live multi-role, retry, and concurrency verification, safety approval, and tabletop exercises
- provider account onboarding and live Stripe mode
diff --git a/wxl/docs/DELIVERY-READINESS.md b/yuhm/docs/DELIVERY-READINESS.md
similarity index 93%
rename from wxl/docs/DELIVERY-READINESS.md
rename to yuhm/docs/DELIVERY-READINESS.md
index d9f92df..d33f1bc 100644
--- a/wxl/docs/DELIVERY-READINESS.md
+++ b/yuhm/docs/DELIVERY-READINESS.md
@@ -1,23 +1,23 @@
-# WXL:FOOD delivery readiness
+# yuhm delivery readiness
Last updated: 2026-07-18
-Status: operating plan. This document defines what must be true before WXL:FOOD coordinates real food pickup and delivery. It is not evidence that those gates have already passed. The protocol foundation is documented in `COORDINATION-PROTOCOL.md`.
+Status: operating plan. This document defines what must be true before yuhm coordinates real food pickup and delivery. It is not evidence that those gates have already passed. The protocol foundation is documented in `COORDINATION-PROTOCOL.md`.
## Release principle
-WXL:FOOD should expand through controlled operating stages. A polished screen is not a readiness signal. Each stage needs named ownership, recorded evidence, a rollback path, and a completed rehearsal.
+yuhm should expand through controlled operating stages. A polished screen is not a readiness signal. Each stage needs named ownership, recorded evidence, a rollback path, and a completed rehearsal.
1. **Directory:** public, source-backed resource discovery only.
2. **Signals:** reviewed community pins, requests, and time-limited public alerts.
3. **Partner pilot:** a small set of approved food sources, receiving groups, coordinators, and trained Contributors complete supervised runs.
4. **Austin network:** more partners and volunteers join only after pilot incidents, waste, timing, and fulfillment data have been reviewed.
-The current production product is between Directory and Signals. Migrations 024 through 041 are deployed and verified at the schema and privilege level, but the rescue, Contributor-readiness, harvest-run, inventory, and coordination workflows are not operationally approved. WXL:FOOD is not ready for unsupervised delivery dispatch.
+The current production product is between Directory and Signals. Migrations 024 through 041 are deployed and verified at the schema and privilege level, but the rescue, Contributor-readiness, harvest-run, inventory, and coordination workflows are not operationally approved. yuhm is not ready for unsupervised delivery dispatch.
## Public-health and food-safety gate
-Austin Public Health treats nonprofit meal delivery programs and organizations that solicit, warehouse, or redistribute edible food as Charitable Feeding Organizations in applicable cases. The operating entity must confirm its category and receive required approval before WXL coordinates handling. Time and temperature controlled food, prepared food, open food handling, storage, and redistribution have stricter requirements than sealed shelf-stable goods or whole uncut produce.
+Austin Public Health treats nonprofit meal delivery programs and organizations that solicit, warehouse, or redistribute edible food as Charitable Feeding Organizations in applicable cases. The operating entity must confirm its category and receive required approval before yuhm coordinates handling. Time and temperature controlled food, prepared food, open food handling, storage, and redistribution have stricter requirements than sealed shelf-stable goods or whole uncut produce.
Authoritative starting points:
@@ -32,7 +32,7 @@ Required evidence before the partner pilot:
|---|---|---|
| Regulatory classification | Written determination of the operating model, jurisdiction, required registration or permit, and permitted food categories | Operations lead |
| Partner eligibility | Permit or registration status, public-health contact, food categories, handling limits, and expiration dates recorded per partner | Partner coordinator |
-| Training | Current food-handler or food-manager credentials where required, plus WXL run training completion | Safety lead |
+| Training | Current food-handler or food-manager credentials where required, plus yuhm run training completion | Safety lead |
| Handling plan | Approved pickup, inspection, packaging, separation, temperature control, transport, handoff, rejection, and disposal procedures | Safety lead |
| Equipment | Calibrated thermometers, clean food-grade containers, cold and hot holding equipment where needed, sanitation supplies, and vehicle checklists | Run coordinator |
| Traceability | Source, food description, quantity, preparation or receipt date, lot or label details when available, pickup time, handoff time, and responsible people | Run coordinator |
@@ -68,7 +68,7 @@ Exceptional paths must include `released`, `cancelled`, `rejected`, `expired`, a
## Dispatch and volunteer gate
-Before a Contributor can claim a run, WXL needs:
+Before a Contributor can claim a run, yuhm needs:
- verified email and accepted volunteer agreement
- emergency contact stored privately
diff --git a/wxl/docs/FOOD-SOURCE-AGENT.md b/yuhm/docs/FOOD-SOURCE-AGENT.md
similarity index 97%
rename from wxl/docs/FOOD-SOURCE-AGENT.md
rename to yuhm/docs/FOOD-SOURCE-AGENT.md
index 8ccacb9..42a601b 100644
--- a/wxl/docs/FOOD-SOURCE-AGENT.md
+++ b/yuhm/docs/FOOD-SOURCE-AGENT.md
@@ -1,4 +1,4 @@
-# WXL:FOOD source-intelligence agent boundary
+# yuhm source-intelligence agent boundary
Last updated: 2026-08-11
@@ -8,7 +8,7 @@ Status: boundary document. The source-intelligence agent described here does not
Austin's food-source directory decays without constant attention: hours change, pantries pause, refrigerators move, phone numbers go stale. The source-intelligence agent exists to reduce that maintenance burden by collecting evidence about food sources — published hours, service changes, community reports, closure notices — and organizing it for human review.
-The agent proposes. Deterministic checks and human coordinators decide. This is the same rule the coordination protocol applies everywhere else in WXL:FOOD.
+The agent proposes. Deterministic checks and human coordinators decide. This is the same rule the coordination protocol applies everywhere else in yuhm.
## Human-review requirement
@@ -21,7 +21,7 @@ Every agent output that could change what the public sees goes through a human r
## What the first useful agent does
-1. Collects evidence about existing and nominated sources: published schedules, service announcements, community reports already inside WXL.
+1. Collects evidence about existing and nominated sources: published schedules, service announcements, community reports already inside yuhm.
2. Scores freshness and flags contradictions — for example, a source marked open whose published schedule says closed.
3. Files proposals into a human review queue with the evidence attached.
4. Records reviewer decisions so its precision can be measured over time.
diff --git a/wxl/docs/LIVING-DOCS.md b/yuhm/docs/LIVING-DOCS.md
similarity index 89%
rename from wxl/docs/LIVING-DOCS.md
rename to yuhm/docs/LIVING-DOCS.md
index a5bab07..a1c0534 100644
--- a/wxl/docs/LIVING-DOCS.md
+++ b/yuhm/docs/LIVING-DOCS.md
@@ -1,14 +1,14 @@
---
-title: WXL:FOOD Living Documentation
-description: Current product behavior, community workflows, safety boundaries, and development status for WXL:FOOD.
+title: yuhm Living Documentation
+description: Current product behavior, community workflows, safety boundaries, and development status for yuhm.
status: living
last_updated: 2026-08-11
canonical_path: /docs/
---
-# WXL:FOOD living documentation
+# yuhm living documentation
-WXL:FOOD is a local food coordination app for Austin, Texas. It helps neighbors, community groups, food sources, volunteers, and coordinators see public food resources, share current availability, publish needs, and organize support.
+yuhm is a local food coordination app for Austin, Texas. It helps neighbors, community groups, food sources, volunteers, and coordinators see public food resources, share current availability, publish needs, and organize support.
This document describes what the product does now, what remains experimental, and what the community can expect next. It is written as the future source for a public HTML documentation page.
@@ -16,18 +16,18 @@ This document describes what the product does now, what remains experimental, an
## Quick links
-- [Open WXL:FOOD](https://wxl.handprotocol.org)
+- [Open yuhm](https://yuhm.handprotocol.org)
- [Open WaterDrop](https://waterdrop.handprotocol.org)
- [Visit HAND Protocol](https://handprotocol.org)
- [Read the development handoff](../HANDOFF.md)
- [Read the food-source agent boundary](FOOD-SOURCE-AGENT.md)
- [Read the delivery-readiness plan](DELIVERY-READINESS.md)
-## What WXL:FOOD is for
+## What yuhm is for
Food already moves through Austin every day. It moves through pantries, farms, community refrigerators, kitchens, mutual-aid groups, neighborhood centers, restaurants, volunteers, and informal relationships.
-WXL:FOOD is intended to make that movement easier to see and coordinate without replacing the people and organizations who already hold it together.
+yuhm is intended to make that movement easier to see and coordinate without replacing the people and organizations who already hold it together.
The public interface organizes the product around four immediate intents, with operational coordination available as an opt-in advanced workspace:
@@ -66,7 +66,7 @@ Status labels used throughout this document:
| Community food pins | Live | Authenticated members can submit public food spots and produce details. |
| `FOOD IS HERE!` alerts | Live | Authenticated members can send six-hour app-wide alerts that appear on Overview, in the alert workspace, and in the alert center. |
| Alert email hook | Live | A validated Netlify Function sends a best-effort operations alert through Resend or HAND's shared notification endpoint. |
-| Alerts and feedback widget | Live | A bottom-right bell opens email-alert signup and feedback panels on every WXL surface. Alerts join the WXL Resend audience. Feedback enters HAND Command Center and the operations email inbox, with offline retry. |
+| Alerts and feedback widget | Live | A bottom-right bell opens email-alert signup and feedback panels on every yuhm surface. Alerts join the yuhm Resend audience. Feedback enters HAND Command Center and the operations email inbox, with offline retry. |
| A/B testing | Live | Assigns a stable CTA-order variant and records authenticated interactions. |
| Interaction leaderboard | Needs migration | Provides an internal, admin-only aggregate view. |
| Food drop-off log | Ready to deploy | Members can record a completed food drop-off by community-site address, map pin, or both, with a short note, optional amount, and internal or public visibility. Migration 040 is applied. |
@@ -81,15 +81,15 @@ Status labels used throughout this document:
Anyone can browse public food information and public community requests.
-Visitors who only want to follow WXL can join the updates list with one email address. This email-only path does not create a Supabase account, ask for a password, or grant access to posting and coordination. Updates cover meaningful platform development and future offerings, and every message must include an unsubscribe option. Each new updates signup sends a best-effort notice through HAND's existing operations-email path.
+Visitors who only want to follow yuhm can join the updates list with one email address. This email-only path does not create a Supabase account, ask for a password, or grant access to posting and coordination. Updates cover meaningful platform development and future offerings, and every message must include an unsubscribe option. Each new updates signup sends a best-effort notice through HAND's existing operations-email path.
-The bottom-right bell keeps this signup available throughout WXL. Its second panel accepts public product feedback without requiring an account. Feedback is sent to HAND Command Center and the HAND operations inbox. If the shared feedback service cannot be reached, the note stays in the current browser and retries after reconnection or focus.
+The bottom-right bell keeps this signup available throughout yuhm. Its second panel accepts public product feedback without requiring an account. Feedback is sent to HAND Command Center and the HAND operations inbox. If the shared feedback service cannot be reached, the note stays in the current browser and retries after reconnection or focus.
The public entry presents three starting choices: find food, contribute, or gather. On phones, Find food opens the full-screen command-bar map. Its Menu sheet keeps Find food, Contribute, Gather, Requests, account state, and Advanced mode reachable without permanently consuming map space. Contribute keeps food drafts, delivery-run previews, compost-return guidance, and Contributor setup prompts in its focused mobile layout. Gather uses the same focused pattern for shared meals. Requests has a short privacy-aware composer and a readable list of open needs. These remaining intents will move into the shared mobile shell incrementally. Drafts survive the sign-in handoff in the current browser session. Intent parameters select the public experience only and never grant write access.
The public interface is the default, including at `/app/`. The mobile Menu includes an explicit **Advanced mode** entry for coordination, routes, inventory, and reports. The advanced interface labels itself clearly and includes a **Use simple mode** control that clears the remembered advanced preference. Legacy links with a specific `workspace` parameter still open the requested operational tool directly.
-Location sharing remains optional. On phones, WXL asks only after the visitor presses Locate in the command bar. When allowed, WXL centers the map and sorts matching listings by distance. The visitor's coordinates remain in browser memory for that calculation and are not written to Supabase, local storage, an account, or an engagement event. Denial, timeout, or ignoring Locate leaves the complete Austin map available.
+Location sharing remains optional. On phones, yuhm asks only after the visitor presses Locate in the command bar. When allowed, yuhm centers the map and sorts matching listings by distance. The visitor's coordinates remain in browser memory for that calculation and are not written to Supabase, local storage, an account, or an engagement event. Denial, timeout, or ignoring Locate leaves the complete Austin map available.
An authenticated account is required to:
@@ -111,19 +111,19 @@ Write access always follows the active Supabase session. A query parameter does
New accounts do not require an email-confirmation step. A successful signup starts the member session, sends a best-effort notice through HAND's existing operations-email path, and returns to the relevant simple intent when one was provided, otherwise it opens Find food. The signup fields use standard password-manager metadata so the browser can offer to save the password locally. Whether that prompt appears is controlled by the member's browser and password-manager settings.
-Password-reset emails return to `https://wxl.handprotocol.org/app/?mode=recovery`, where the member chooses a new password. After a successful update, WXL ends the recovery session and opens the login page so the member can sign in with the new password. The production callback must remain in the Supabase redirect allowlist.
+Password-reset emails return to `https://yuhm.handprotocol.org/app/?mode=recovery`, where the member chooses a new password. After a successful update, yuhm ends the recovery session and opens the login page so the member can sign in with the new password. The production callback must remain in the Supabase redirect allowlist.
The command center waits for Supabase session restoration before deciding whether write actions are available. Authenticated members see their current account identity and can sign out from the navigation account menu. Signing out keeps public browsing open and removes write access.
## Languages
-WXL:FOOD serves Austin in English and Spanish. The landing page, the simple experience, the mobile map, and sign-in follow the visitor's browser language and offer a persistent globe toggle. The coordinator dashboard currently remains English.
+yuhm serves Austin in English and Spanish. The landing page, the simple experience, the mobile map, and sign-in follow the visitor's browser language and offer a persistent globe toggle. The coordinator dashboard currently remains English.
## Austin food map
The public Find food experience uses a real interactive Austin map. It shows the bundled public directory plus live community-submitted spots, and every food-finding surface shares one filter vocabulary: All, Verified, Community reports, and Food here now. Visitors can pan, zoom, select food markers, and move between a marker and its listing details. On phones, a full-screen command bar provides Menu, search, and Locate. A floating List control follows the adaptive result sheet as it moves between peek, half, and full detents. Selecting a marker opens its place details at peek. The map remains interactive in place and list modes. On larger screens, the existing map and scrollable listing panel remain side by side.
-The map uses OpenStreetMap tiles through Leaflet and keeps the required OpenStreetMap contributor attribution visible. WXL does not prefetch maps for offline use. Only public listings with reviewed coordinates receive a marker. A listing without confirmed coordinates remains in the result shelf with its pending-location label.
+The map uses OpenStreetMap tiles through Leaflet and keeps the required OpenStreetMap contributor attribution visible. yuhm does not prefetch maps for offline use. Only public listings with reviewed coordinates receive a marker. A listing without confirmed coordinates remains in the result shelf with its pending-location label.
Each verified listing has a **Navigate** button. It opens Apple Maps on Apple devices and Google Maps on other platforms, using reviewed coordinates when available and the public address as a fallback.
@@ -138,7 +138,7 @@ Always confirm hours and eligibility before traveling:
The selected listing card exposes the public source category, known center hours or access notes, and a navigation link when the location is directory-listed.
-South Oak Baptist food pantry appears as a community report, not a verified directory listing. The report says the pantry is open Thursdays from 9 to 11 AM and uses one form without requiring ID. Its exact public location and current access details still require coordinator confirmation before WXL:FOOD treats it as verified.
+South Oak Baptist food pantry appears as a community report, not a verified directory listing. The report says the pantry is open Thursdays from 9 to 11 AM and uses one form without requiring ID. Its exact public location and current access details still require coordinator confirmation before yuhm treats it as verified.
### Community pins
@@ -165,7 +165,7 @@ Drop-off visibility is chosen per record:
Every submission requires the member to confirm that the destination is a community-facing site, not a private home. Household addresses, household names, private contact details, and private delivery instructions remain prohibited even when the record is internal. Assigned delivery-run tools remain the correct place for exact household stops.
-The recognition board ranks Contributors by completed drop-off count. Signed-in members can view the complete internal board. Public recognition is a separate, reversible account choice and is off by default. The public board includes only Contributors who opt in. Public map records from a non-opted-in Contributor use the generic name `WXL Contributor`.
+The recognition board ranks Contributors by completed drop-off count. Signed-in members can view the complete internal board. Public recognition is a separate, reversible account choice and is off by default. The public board includes only Contributors who opt in. Public map records from a non-opted-in Contributor use the generic name `yuhm Contributor`.
## `FOOD IS HERE!` alerts
@@ -214,7 +214,7 @@ If a submission cannot reach the server, it is stored locally and retried when t
## Experiments and interaction progress
-WXL:FOOD currently tests two CTA orders:
+yuhm currently tests two CTA orders:
- `map_first`
- `rescue_first`
@@ -240,7 +240,7 @@ Mobile product requirements:
## Privacy and safety boundaries
-WXL:FOOD coordinates public resources. It is not a suitable place for sensitive household information.
+yuhm coordinates public resources. It is not a suitable place for sensitive household information.
Do not publish:
@@ -256,7 +256,7 @@ Food availability can change quickly. A map pin or alert is a coordination signa
## Data and security model
-WXL:FOOD uses the HAND Supabase project and the `command` schema.
+yuhm uses the HAND Supabase project and the `command` schema.
The browser receives only the public Supabase anonymous key. Service-role credentials must never be exposed through a `VITE_` environment variable or committed to the repository.
@@ -293,7 +293,7 @@ Community-site drop-offs, privacy-scoped feed functions, and opt-in recognition
command/supabase/migrations/040_wxl_food_dropoffs.sql
```
-Profile readiness for WXL foreign keys is defined in:
+Profile readiness for yuhm foreign keys is defined in:
```text
command/supabase/migrations/026_wxl_profile_readiness.sql
@@ -359,13 +359,13 @@ The function:
4. Sends a best-effort operations email through Resend.
5. Leaves the in-app alert intact if email delivery is unavailable.
-If the WXL site does not have Resend variables, the function forwards the authenticated alert to HAND's shared feedback endpoint. The shared endpoint provides the existing Command Center, Telegram, and Resend notification fan-out.
+If the yuhm site does not have Resend variables, the function forwards the authenticated alert to HAND's shared feedback endpoint. The shared endpoint provides the existing Command Center, Telegram, and Resend notification fan-out.
The database remains the source of truth. Email is an additional notification channel.
## Local development
-From the `wxl` directory:
+From the `yuhm` directory:
```bash
npm install
@@ -428,7 +428,7 @@ Current automated coverage includes:
GitHub Actions configuration lives at:
```text
-.github/workflows/wxl-ci.yml
+.github/workflows/yuhm-ci.yml
```
It runs tests and a production build for relevant pull requests, relevant pushes to `main`, and manual dispatches.
@@ -560,13 +560,13 @@ When this document becomes HTML, preserve the headings and anchors so existing l
- Expanded the public-source set with City neighborhood centers, added selected-node hours, access notes, source links, and directions.
- Added a schematic volunteer node with routes to anonymous household clusters, keeping exact home locations off the public map.
- Added South Oak Baptist as a clearly labeled community report pending public-source confirmation.
-- Made the sidebar WXL:FOOD title return to Overview.
-- Adapted the HAND Protocol landing-page menu's traced hand, network nodes, and brand-dot language into WXL navigation.
-- Changed the top location trail to `Directory / WXL:FOOD / Current page` with a view-aware final segment.
-- Made the X the signature WXL mark across the landing page and command-center navigation.
+- Made the sidebar yuhm title return to Overview.
+- Adapted the HAND Protocol landing-page menu's traced hand, network nodes, and brand-dot language into yuhm navigation.
+- Changed the top location trail to `Directory / yuhm / Current page` with a view-aware final segment.
+- Made the X the signature yuhm mark across the landing page and command-center navigation.
- Replaced the mobile icon rail with a full-width layout and off-canvas navigation drawer.
- Changed signup to create an immediate session without an email-confirmation step and added browser password-manager metadata.
-- Pinned password-reset callbacks to the WXL recovery screen and documented the required Supabase URL configuration.
+- Pinned password-reset callbacks to the yuhm recovery screen and documented the required Supabase URL configuration.
- Created the living documentation source.
- Documented the East Austin food map and community-pin review state.
- Documented `FOOD IS HERE!`, realtime alerts, expiry, and abuse controls.
diff --git a/wxl/docs/WXLOVE-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md b/yuhm/docs/WXLOVE-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md
similarity index 100%
rename from wxl/docs/WXLOVE-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md
rename to yuhm/docs/WXLOVE-SESSION-CREDITS-AND-ACCOMPLISHMENTS.md
diff --git a/wxl/docs/WXLOVE-THEME-OPTIMIZATION.md b/yuhm/docs/WXLOVE-THEME-OPTIMIZATION.md
similarity index 100%
rename from wxl/docs/WXLOVE-THEME-OPTIMIZATION.md
rename to yuhm/docs/WXLOVE-THEME-OPTIMIZATION.md
diff --git a/wxl/index.html b/yuhm/index.html
similarity index 64%
rename from wxl/index.html
rename to yuhm/index.html
index cb2045f..db8d4b5 100644
--- a/wxl/index.html
+++ b/yuhm/index.html
@@ -6,14 +6,14 @@
- W Xtra Love | Find or contribute food in Austin
+ yuhm network | Find or contribute food in Austin
diff --git a/wxl/netlify.toml b/yuhm/netlify.toml
similarity index 78%
rename from wxl/netlify.toml
rename to yuhm/netlify.toml
index 5f72b05..7349bc4 100644
--- a/wxl/netlify.toml
+++ b/yuhm/netlify.toml
@@ -1,8 +1,15 @@
-# WXL:FOOD deployment, intended for wxl.handprotocol.org.
+# yuhm deployment, intended for yuhm.handprotocol.org.
[build]
command = "npm run build"
publish = "dist"
+# Legacy hostname: wxl.handprotocol.org permanently moved to yuhm.handprotocol.org.
+[[redirects]]
+ from = "https://wxl.handprotocol.org/*"
+ to = "https://yuhm.handprotocol.org/:splat"
+ status = 301
+ force = true
+
[[redirects]]
from = "/*"
to = "/index.html"
diff --git a/wxl/netlify/functions/food-alert.mjs b/yuhm/netlify/functions/food-alert.mjs
similarity index 93%
rename from wxl/netlify/functions/food-alert.mjs
rename to yuhm/netlify/functions/food-alert.mjs
index 5ca92c7..032d427 100644
--- a/wxl/netlify/functions/food-alert.mjs
+++ b/yuhm/netlify/functions/food-alert.mjs
@@ -38,7 +38,7 @@ async function forwardToHand(alert) {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
- source: 'WXL:FOOD Alert',
+ source: 'yuhm Alert',
title: `FOOD IS HERE · ${alert.neighborhood}`,
path: '/app/',
text: `${alert.title}\n\n${alert.message}\n\nNeighborhood: ${alert.neighborhood}`,
@@ -85,7 +85,7 @@ export async function handler(event) {
const apiKey = process.env.RESEND_API_KEY
const to = process.env.EMAIL_TO_OPS || process.env.RESEND_NOTIFY_TO || process.env.RESEND_FORWARD_TO
- const from = process.env.EMAIL_FROM || process.env.RESEND_NOTIFY_FROM || 'WXL:FOOD '
+ const from = process.env.EMAIL_FROM || process.env.RESEND_NOTIFY_FROM || 'yuhm '
if (!apiKey || !to) {
const forwarded = await forwardToHand(alert)
return json(202, { status: 'saved', notification: forwarded ? 'forwarded-to-hand' : 'unavailable' })
@@ -98,11 +98,11 @@ export async function handler(event) {
from,
to: String(to).split(',').map((address) => address.trim()).filter(Boolean),
subject: `FOOD IS HERE · ${alert.neighborhood}`,
- text: `${alert.title}\n\n${alert.message}\n\nNeighborhood: ${alert.neighborhood}\nVisible in WXL:FOOD until ${new Date(alert.expires_at).toLocaleString('en-US', { timeZone: 'America/Chicago' })}.`,
+ text: `${alert.title}\n\n${alert.message}\n\nNeighborhood: ${alert.neighborhood}\nVisible in yuhm until ${new Date(alert.expires_at).toLocaleString('en-US', { timeZone: 'America/Chicago' })}.`,
}),
})
if (!sent.ok) {
- console.warn('[wxl-food-alert] Resend failed', sent.status, (await sent.text()).slice(0, 300))
+ console.warn('[yuhm-network-alert] Resend failed', sent.status, (await sent.text()).slice(0, 300))
const forwarded = await forwardToHand(alert)
return json(202, { status: 'saved', email: 'failed', notification: forwarded ? 'forwarded-to-hand' : 'unavailable' })
}
diff --git a/wxl/netlify/functions/subscribe-updates.mjs b/yuhm/netlify/functions/subscribe-updates.mjs
similarity index 84%
rename from wxl/netlify/functions/subscribe-updates.mjs
rename to yuhm/netlify/functions/subscribe-updates.mjs
index 8ba6c7e..791fd72 100644
--- a/wxl/netlify/functions/subscribe-updates.mjs
+++ b/yuhm/netlify/functions/subscribe-updates.mjs
@@ -40,11 +40,11 @@ async function notifyHandOfUpdatesSignup(email) {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
- source: 'WXL:FOOD Email Updates',
- title: 'New WXL email-updates signup',
+ source: 'yuhm Email Updates',
+ title: 'New yuhm email-updates signup',
path: '/app/?mode=login&updates=1',
text: `Email: ${email}`,
- tags: ['wxl', 'email-updates', 'signup'],
+ tags: ['yuhm', 'email-updates', 'signup'],
name: '',
website: '',
ts: Date.now(),
@@ -80,9 +80,9 @@ export async function handler(event) {
}
const apiKey = process.env.RESEND_API_KEY
- const audienceId = process.env.WXL_RESEND_AUDIENCE_ID || process.env.RESEND_AUDIENCE_ID
+ const audienceId = process.env.YUHM_RESEND_AUDIENCE_ID || process.env.RESEND_AUDIENCE_ID
if (!apiKey || !audienceId) {
- console.error('[wxl-updates] Missing RESEND_API_KEY or audience id')
+ console.error('[yuhm-updates] Missing RESEND_API_KEY or audience id')
return json(503, { error: 'Updates signup is not configured' })
}
@@ -98,9 +98,9 @@ export async function handler(event) {
const data = await response.json().catch(() => ({}))
if (response.ok) {
- console.info('[wxl-updates] Subscriber added', { id: data.id })
+ console.info('[yuhm-updates] Subscriber added', { id: data.id })
const notified = await notifyHandOfUpdatesSignup(email)
- if (!notified) console.warn('[wxl-updates] HAND notification failed')
+ if (!notified) console.warn('[yuhm-updates] HAND notification failed')
return json(200, { status: 'subscribed' })
}
@@ -109,10 +109,10 @@ export async function handler(event) {
return json(200, { status: 'already_subscribed' })
}
- console.error('[wxl-updates] Resend rejected contact', { status: response.status, name: data.name })
+ console.error('[yuhm-updates] Resend rejected contact', { status: response.status, name: data.name })
return json(502, { error: 'Subscribe service rejected the request' })
} catch (error) {
- console.error('[wxl-updates] Resend request failed', error)
+ console.error('[yuhm-updates] Resend request failed', error)
return json(502, { error: 'Could not reach subscribe service' })
}
}
diff --git a/wxl/package-lock.json b/yuhm/package-lock.json
similarity index 99%
rename from wxl/package-lock.json
rename to yuhm/package-lock.json
index 0d167d3..9f0d5db 100644
--- a/wxl/package-lock.json
+++ b/yuhm/package-lock.json
@@ -1,11 +1,11 @@
{
- "name": "wxl-food",
+ "name": "yuhm-network",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "wxl-food",
+ "name": "yuhm-network",
"version": "0.1.0",
"dependencies": {
"@supabase/supabase-js": "^2.106.0",
diff --git a/wxl/package.json b/yuhm/package.json
similarity index 98%
rename from wxl/package.json
rename to yuhm/package.json
index c496f62..b9fd08c 100644
--- a/wxl/package.json
+++ b/yuhm/package.json
@@ -1,5 +1,5 @@
{
- "name": "wxl-food",
+ "name": "yuhm-network",
"version": "0.1.0",
"private": true,
"type": "module",
diff --git a/wxl/public/_headers b/yuhm/public/_headers
similarity index 100%
rename from wxl/public/_headers
rename to yuhm/public/_headers
diff --git a/yuhm/public/_redirects b/yuhm/public/_redirects
new file mode 100644
index 0000000..5567897
--- /dev/null
+++ b/yuhm/public/_redirects
@@ -0,0 +1,3 @@
+# Legacy hostname: wxl.handprotocol.org permanently moved to yuhm.handprotocol.org
+https://wxl.handprotocol.org/* https://yuhm.handprotocol.org/:splat 301!
+/* /index.html 200
diff --git a/wxl/public/architecture/architecture.js b/yuhm/public/architecture/architecture.js
similarity index 97%
rename from wxl/public/architecture/architecture.js
rename to yuhm/public/architecture/architecture.js
index 557cc18..e2760c0 100644
--- a/wxl/public/architecture/architecture.js
+++ b/yuhm/public/architecture/architecture.js
@@ -2,35 +2,35 @@ const DATA = {
"client-simple": {
eyebrow: "Client · Live", status: "status-live",
title: "Simple public shell",
- path: "wxl/src/App.tsx",
+ path: "yuhm/src/App.tsx",
desc: "Mobile-first default experience. Four persistent destinations: Find food, Contribute, Gather, Requests. This is what most visitors see; Advanced workspace is opt-in and remembered per browser.",
bullets: ["Geolocation prompt is optional, in-memory only", "Drafts survive the sign-in handoff", "Anonymous write attempts open an account prompt"]
},
"client-advanced": {
eyebrow: "Client · Live", status: "status-live",
title: "Advanced workspace",
- path: "wxl/src/{RescueBoard,HarvestRunBoard,InventoryBoard,ContributorBoard}.tsx",
+ path: "yuhm/src/{RescueBoard,HarvestRunBoard,InventoryBoard,ContributorBoard}.tsx",
desc: "Coordinator-facing operational boards. Explicit opt-in setting, not the default. Each board is a real persisted workflow, not a mockup.",
bullets: ["Rescue Ops: submission, review, claim, checkpoints", "Volunteer Command: readiness + training approval", "Harvest Runs: multi-stop dispatch", "Inventory: lot custody + ledger"]
},
"client-map": {
eyebrow: "Client · Live", status: "status-live",
title: "Austin food map",
- path: "wxl/src/FoodMap.tsx",
+ path: "yuhm/src/FoodMap.tsx",
desc: "Real Leaflet map over OpenStreetMap tiles. Directory-listed locations (City of Austin, Central Texas Food Bank) plus reviewed community pins.",
bullets: ["Only reviewed coordinates get a marker", "Navigate button opens Apple/Google Maps by platform", "No offline tile caching"]
},
"client-auth": {
eyebrow: "Client · Live", status: "status-live",
title: "Authentication",
- path: "wxl/src/lib/auth.ts",
+ path: "yuhm/src/lib/auth.ts",
desc: "Email + password via Supabase Auth. No magic links. Signup starts a session immediately, no email confirmation step required.",
bullets: ["Password reset via recovery email", "Session drives all write-gating, never a query param", "Redirect allowlist must include /app/?mode=recovery"]
},
"client-protocol-board": {
eyebrow: "Client · Needs API config", status: "status-needs-migration",
title: "Coordination protocol workspace",
- path: "wxl/src/ProtocolBoard.tsx",
+ path: "yuhm/src/ProtocolBoard.tsx",
desc: "Exposes the deeper protocol (needs, supplies, matching requests, commitments, potlucks) to the web app when the separate Coordination API is configured. Not the default experience.",
bullets: ["Depends on services layer being reachable", "Distinct from the simple Requests flow"]
},
@@ -38,7 +38,7 @@ const DATA = {
eyebrow: "Netlify Function · Live", status: "status-live",
title: "food-alert.mjs",
path: "netlify/functions/food-alert.mjs",
- desc: "Validates the Supabase access token, re-reads the newly created alert through the authenticated API, then sends a best-effort Resend email. Falls back to HAND's shared feedback endpoint if WXL-specific Resend vars are missing.",
+ desc: "Validates the Supabase access token, re-reads the newly created alert through the authenticated API, then sends a best-effort Resend email. Falls back to HAND's shared feedback endpoint if yuhm-specific Resend vars are missing.",
bullets: ["Rate limited: 5 alerts / account / 15 min", "Database remains source of truth; email is additive"]
},
"fn-subscribe": {
@@ -149,21 +149,21 @@ const DATA = {
"svc-api": {
eyebrow: "Service · Built, not activated", status: "status-built-inactive",
title: "Coordination API",
- path: "wxl/services/coordination-api/",
+ path: "yuhm/services/coordination-api/",
desc: "TypeScript service exposing scoped REST resources, remote MCP, A2A task history, OAuth protected-resource metadata, and signed Stripe/Twilio webhook intake.",
bullets: ["No external agent gets commit/payment/location authority pre-certification"]
},
"svc-worker": {
eyebrow: "Service · Built, not activated", status: "status-built-inactive",
title: "Matching worker",
- path: "wxl/services/matching-worker/",
+ path: "yuhm/services/matching-worker/",
desc: "Python + OR-Tools for hard-filtered min-cost allocation and capacity-aware vehicle routing. Recommended next step: run in shadow mode against a nonproduction Supabase branch to gather comparison data before any live matching.",
bullets: []
},
"svc-other": {
eyebrow: "Service · Built, not activated", status: "status-built-inactive",
title: "Payment · potluck · retention workers",
- path: "wxl/services/",
+ path: "yuhm/services/",
desc: "Supervised workers for Stripe reconciliation, potluck planning, and data retention. None are running against production yet.",
bullets: []
},
diff --git a/wxl/public/architecture/index.html b/yuhm/public/architecture/index.html
similarity index 98%
rename from wxl/public/architecture/index.html
rename to yuhm/public/architecture/index.html
index 8988a58..0f4c69d 100644
--- a/wxl/public/architecture/index.html
+++ b/yuhm/public/architecture/index.html
@@ -3,7 +3,7 @@
-WXLove Architecture: Interactive Map
+yuhm Architecture: Interactive Map