🆕 Private crew chat, end to end (MLS)
- Crews now get a real encrypted group chat: RFC 9420 MLS through our own
  self-hosted coordinator. Open a crew → "Private chat". Founders create it and
  approve join requests; members tap "Ask to join". Roughly a second to join.
- Send photos, copy the group link to open the same chat in Cordn or Staircase,
  and your messages stay between members. The coordinator routes ciphertext and
  metadata only — it never sees what you write.

🔒 Our infrastructure, not someone else's
- The community relay and photo/media storage now run on our own servers, so
  your spots, crews and photos no longer depend on a third party. Same data,
  faster and more independent.

🛒 Marketplace: close the deal in-app
- Accept an offer and pay right there (NWC / WebLN / Cashu), with the invoice
  amount verified so you can't be overcharged.
- Escrow now uses the mint the seller advertises, and confirmation is safer.

🛡 Trust you can steer
- Mute an account and it disappears everywhere (NIP-51 list).
- "Alerts" flags accounts you follow that trusted people reported.
- Choose your trust provider in Settings → Trust, and every badge says who
  decided.

🗺 Map & weather
- Search now suggests spots and places as you type.
- Spots show a 6-day forecast with a colour legend, sunrise/sunset, and a
  manual refresh.

🧵 New in The Lab
- Clothing Designer joins the craft roles.

🛠 Fixes & polish
- Long menus scroll properly, and the language picker is searchable.
- Spot cards are tappable across the whole card again.
- Deleted spots no longer flash back from cache after a refresh.
- Lighter on first load (CJK fonts download only if you pick that language).

---

🌍 Ten new languages
- Simplified Chinese, Traditional Chinese, Ukrainian, Turkish, Vietnamese,
  Indonesian, Swedish, Czech, Romanian and Greek are now selectable — full
  coverage, not partial. (And North/South Korean stay separate, as before.)
- Locales lazy-load, so picking a language only downloads that language.

💸 A proper support page
- New /donate — three honest rails: ⚡ Lightning, 🕵️ private on-chain (silent
  payments) and ⛓ Angor. Each with a clear purpose, so you pick what fits you.
- The Supporters wall now thanks backers with amounts, tiers and on-chain proof.

🛹 Fixes
- Top Shops shows real skateshops again (the community relay is shared, so other
  apps' shops no longer leak in).
- The Monday newsletter reminder no longer covers the map on phones.
- New comments appear immediately, and event tickets verify properly at the door.

🔧 Under the hood
- A full bug + UI/UX audit pass: safer payments, stricter verification, fewer
  mobile layout rough edges.

---

📍 The map, cleaner
- Fixed the search bar sitting on top of the map's zoom buttons.
- The "Offline — showing saved spots" banner now appears only when your device
  is actually offline (not just when one relay is slow), and you can dismiss it.
- The "you are here" dot shows your own profile picture.

✅ Spots are verified by real skaters
- Community confidence now counts what other skaters actually do here: photos,
  status reports, comments, reactions, zaps, saves, links from crews and Lab
  pros. Cheap signals count for less, a zap or a crew link counts for a lot.
- The spot page explains itself ("2 photos · 1 crew · 3 comments") and nudges
  you to help confirm a new spot.

🪪 More than one handle
- Crews, shops and your profile can each carry up to 5 NIP-05 handles, each with
  a live verified check.

🔐 Private things stay private
- Stash backups can now be password-protected (with a strength meter) — the
  exported file is no longer plain text.
- Marketplace payments verify the invoice amount; private messages verify the
  sender's signature.

✨ Smaller fixes
- Crew form tidied into groups (Advanced tucked away), with a "Check" button for
  a custom chat coordinator and "Sasquatch · Pro" naming.
- Stash and the marketplace listing form now fit narrow phone screens — the
  header, item rows and condition buttons no longer overlap.
- The Lab's "Offer" menu is now a tidy, scrollable list (small colour chips
  instead of a wall of coloured buttons), with "Get Rider Card" pinned at the
  bottom.
- Marketplace reputation no longer shows a stuck "Loading…".

---

v1.5.10

🧭 Directions, rebuilt for a phone
- Search a new destination right in the app: skate spots, skate shops and
  Bitcoin merchants (no Google/Apple Maps handoff).
- The map is much bigger and the vehicle picker moved below it.
- Following is smoother — it re-centres only when you actually move, so GPS
  jitter no longer twitches the map.

🪙 Mints, with the info that matters
- Tap a mint for community rating, reliability, uptime, location and a liveness
  audit — plus copy/open/terms. Ratings come from the community MintRadar data.

🤝 Haggling: counter-offers + barter
- Offers are now a real back-and-forth: accept, decline, withdraw, or counter
  with a new amount — either side, any number of rounds.
- Swapping instead of buying? Offer an item ("my 8.25 deck") instead of, or
  alongside, sats. Barter counts for reputation exactly like a sale.
- New Trades tab in the notification bell, plus notifications for every step:
  new offer, counter, accepted, declined, and confirm-a-trade requests.

✨ Smaller fixes
- Crews: one tidy type control (no more horizontally-scrolling chips).
- Spot sheet: single close button.
- Map controls float over the map so the map fills the screen.

---
v1.5.9

🗣️ Navigation you can actually follow
- Directions now talks: a prompt at 150 m and again at 40 m before each turn,
  plus "You've arrived". It's your phone's own voice — offline, no account,
  nothing sent anywhere.
- The screen stays awake while you're following, so guidance doesn't die
  mid-route.
- The map gets bigger when you hit Start, and the step list steps aside. Mute
  anytime with the speaker button.

🗺️ A bigger map on the home screen
- The map controls now float over the map instead of taking a bar above it, so
  the map fills the screen — especially on a phone.

---
v1.5.8

🛰️ Pick your own group-chat coordinator
- New Settings -> Coordinator: point SkateSpots at a Cordn coordinator you choose,
  see whether it's up, copy or scan its link, and share it on your profile so
  people can add it in one tap.

📱 Run one — even on a phone
- A coordinator can live on an old phone, a Raspberry Pi, or any small box you
  leave on. We hand you the doorway (the Cordn app, or a one-line Docker
  command), and your crew can route its encrypted chat through it. Crew founders
  get a "Use my coordinator" button.

👤 Edit Profile got a face
- See how you actually look — banner, avatar, handle, bio and badges — before you
  save, plus a short "finish your profile" list instead of guesswork.

🔎 Coordinators are discoverable
- If someone runs their own coordinator, their profile now shows it with an Add
  button instead of a bare link.

---
v1.5.7

⏰ Event reminders
- RSVP "going" or "interested" to an event and your phone nudges you an hour
  before it starts — even when SkateSpots is closed. It's an alarm the device
  holds, not a server, so nothing leaves your phone.
- Turn it on in Settings -> Notifications (Android app).

---
v1.5.6

🛹 The map is quicker off the mark
- Pins no longer rebuild themselves several times while the map loads, and they
  stream in instead of freezing the screen in a busy city. Same map, less
  waiting.

🔔 Notifications (opt-in)
- Turn them on in Settings -> Notifications and your phone can buzz for DMs,
  crew invites and join requests, zaps, replies and mentions, and new newsletter
  drops.
- Privacy first: nothing new is sent anywhere, and direct-message alerts never
  unlock your messages — so an Amber user is never asked to approve one just to
  be told a message arrived.
- Honest limits: alerts come from the device while the app is running. A fully
  closed app can't be reached without a push server, which SkateSpots doesn't
  run — we'd rather say that than pretend otherwise.

🏷️ Badges on your profile
- A free name@skate-spots.org handle now shows the SkateSpots badge, and you can
  list your own badges (Cordn, Cashu, NWC, Amber, BTCMap…) as clickable chips.

📍 "Closest spot to me"
- Ask the Sasquatch where to skate and it can sort by what's nearest — worked
  out on your device, without sending your location anywhere.

⚡ Keep the map free
- The Supporters page now has a one-tap way to chip in (zap publicly, or pay
  quietly), if you want to.

---
v1.5.5

🗺️ The map works offline now
- The basemap you've already looked at is cached on your device, so the map still
  draws when the signal drops at the park — no more blank grid.

🖼️ A dead image host no longer leaves a blank spot
- Photos upload to two hosts, and if one goes down the app quietly loads the copy
  from the other. Same for avatars and gear pics.

💬 Past conversations actually show up now
- Messages reads your real DM inbox relays, so older threads appear instead of
  the "No messages yet" screen. And if something genuinely can't be decrypted,
  the app says so rather than pretending your inbox is empty.

✅ Free `name@skate-spots.org`
- Pick a handle when you sign up — free, optional, changeable any time — and it
  shows a verified badge on your profile.

---

v1.5.4

🧹 Keeping the map real
- Every new spot now needs at least one photo — the cheapest defence against
  test entries and off-topic pins ("test of secret island airport").
- Spots only say "Community verified" when another skater has contributed (a
  photo or a status report). Until then they are labelled "Unverified" instead
  of looking endorsed.
- The weather score is now labelled "Conditions · weather only". It was never a
  verdict on whether a place is a real spot.
- One-tap "Not a skate spot" for off-topic pins (test entries, airports, malls,
  private land), plus an admin review queue that surfaces them for a human.
- The queue also weighs mapper trust, whether any skater has reported on the
  spot, and whether anyone has added a community photo — and a review can now
  **Confirm** a spot as well as hide it (a staff-vouched spot gets a badge).
- Moderation is **reversible**: Hide and Confirm can both be undone, returning the
  spot to neutral without hiding or vouching for it.
- **Reports now reach a human**: the review queue surfaces reported spots at the
  very top, above the automated signals — so "not a skate spot" actually lands.
- **Adding a spot warns you if one already exists** within 60 m, and links you
  straight to it instead of letting you create a duplicate.
- **If a moderator hides or vouches for your spot, you're told** — right there on
  the spot page (your own spots stay visible to you either way).
- **A photo is now strongly recommended, not required.** No picture on hand right
  now? Publish anyway — the spot just stays marked Unverified until one lands.
- **Empty map? It now says so and offers to fix it**: "No spots mapped yet — be
  the first to map your park", with a one-tap Add spot.
- The admin review queue now covers **shops, events, tours, gear, crews and Lab
  profiles** too, not just spots — and has a **report inbox** (every report, with
  the reported item resolved, not just whatever's already flagged) plus **bulk
  undo** for clearing old verdicts.

🛍 App Shop — a new section (empty on purpose, with free printables)
- Free to print, no sats needed: a 55 × 86 mm "DO YOU EVEN SKATE BRO?" sticker
  and an A3 poster, both print-ready vector files with a working QR.
- Merch is coming, and it'll be paid in sats: Lightning or Cashu, your choice.
  No cards, no accounts, no processor skimming the drop.
- To be clear: we hold no stock and nothing is for sale yet. No pre-orders, no
  countdown timers, no fake scarcity — the teasers are labelled "not for sale
  yet" and there are no prices anywhere.

✉️ Direct messages actually arrive now
- Your DM inbox relays were being forgotten every time the app loaded, so
  messages were sent to your normal relays instead of the ones the other person
  actually reads — which is why DMs looked like they never arrived. Your DM
  relays, local relays and relay blocklist now persist properly.
- Sending and loading DMs no longer stall or break because of one dead or
  login-only relay in your list; they now run in parallel.

🧭 Directions look and feel like a navigation screen
- A much bigger map, with a metric scale bar, and the plan at a glance:
  distance, time, arrival, step count and the average speed the route assumes.
- The map stays put while the details scroll, and Start/Stop is pinned at the
  bottom where your thumb already is.

📰 Newsletter reader
- Issue intros render as proper italics instead of showing literal underscores.

---

v1.5.3

🧭 Real navigation, not just a route preview
- Travel modes finally give genuinely different answers: walking 13 min, biking
  5, driving 2 on the same trip. Before, every mode showed the same number.
- Route steps — the actual turns and street names. Tap a step to jump to it on
  the map, and use "Whole route" to zoom back out.
- Tap Start and it follows you: your dot moves, the current step highlights, and
  it shows the next turn plus how far is left. (Still no voice guidance.)
- Arrival time ("arrive ~08:10 PM"), and it remembers the mode you picked last.
- Going somewhere first? "From → Choose on map" sets your start point instead of
  routing from where you're standing.
- Lose signal mid-route and it keeps showing your last route, clearly marked as
  saved, instead of going blank.
- Skating gets its own honest estimate ("~6 min cruise on a board") next to the
  walking time, and moto is labelled as using driving roads.

🔔 Amber stays out of the way
- Amber now only opens for real signed actions: log in / sign up, messages, your
  Stash, marketplace trades, invites, publishing. Browsing and moving between
  sections no longer trigger a signer prompt — the app's encrypted cross-device
  data stays local-only on Amber instead of decrypting on every screen.

---

v1.5.2

🛒 Marketplace, levelled up
- Every listing lives in one hub now: Browse, Selling (your own listings with
  one-tap Mark sold), your Trades, and Reputation.
- Rate a trade 1–10 skateboard decks when you confirm it. Ratings show on both
  profiles with an honest average — and every confirmation is with a real
  person, so two accounts can't pump each other's rep.

🧭 Directions actually work now
- Fixed the route map never drawing (you'd get an empty dialog and "no route").
  Routes now show your position, the spot, and the line between them.
- Opens instantly from your last known location; "Near Me" sorts by distance.

📱 Nav fixes
- The desktop "More" menu no longer vanishes when you pin Marketplace.
- Marketplace is now in the phone menu (☰) — pin it to the bottom bar too.

🪙 Mints loads in the app again
- The mints list was showing a JSON error on phones; it's fixed.

📰 Newsletter
- Fixed a bug that pegged your CPU on the newsletter page.
- Issues and subscriptions now publish to the community relay so everyone sees
  the drops.

✨ Smoother everywhere
- Amber only pops for things that need a signature — no more prompts just for
  reading your notifications.
- Logo no longer crowds the nav.

---

v1.5.1

🦧 Sasquatch — the AI guide, levelled up
- Ask real questions and get answers streamed as they're written.
- Sasquatch Pro unlocks AI answers plus personal actions (drafting posts &
  listings, your Stash/Crews in chat). Pay with Lightning — from 7 days.
- Free, always: trick & term lookups, and finding spots, events, crews, shops,
  tours and gear straight from the relays.
- Your Pro balance shows right in the guide.

🚇 Directions that stay in the app
- Route to any spot by public transport, bike, moto or car — drawn on our own
  map, no bouncing out to Google or Apple Maps. Pick a mode, see the line.

🧑🎨 New in The Lab: Barbers & Hairstylists
- Cuts, fades, beard trims and colour — shop chair or mobile. Find a fresh trim
  on the scene.

✨ Smoother everywhere
- The app shell no longer rebuilds on every screen, so the Sasquatch chat and
  your scroll position survive navigation.
- Directions opens instantly now (it draws from your last known location first).
- The signer only pops for things that need it — log in, messages, your Stash,
  the marketplace and publishing. No more prompts just from moving between tabs.
- Mints is now in the phone nav; tidier tab labels.

---

v1.4.5

🔄 Cross-device sync
- Your read state (notifications, messages, crew chat, newsletter) and app
  preferences now sync across devices via encrypted NIP-78 app data.

🔒 Security hardening
- Amber signatures are verified, and trust scores verify event signatures
  before they're used.
- Cashu wallet seed is stored in the native Keychain/Keystore with a mandatory
  first-time backup.
- The agent (CVM) server only serves signature-verified events.

🗺️ Map & spots
- Crisp map pins with spot-type and shelter glyphs, plus smoother loading.
- New "Shelter" (weather protection) field.
- Better spot dedupe across geohash/city and name variants.
- Faster cold-start: query persistence, optimistic geolocation, skeleton pins.

📅 Tours & events
- Tour countdown badges, session times on scheduled local tours, and calendar
  export. Polished Create Tour flow.

🐿️ Sasquatch
- Faster answers via a local fast-path, honest spot counts, deduped results,
  and no more empty/typo dead-ends.

🎨 Polish & accessibility
- Lighter onboarding, shared empty states, improved contrast, a skip-to-content
  link, and live-region announcements.
- Relay list UI polish with live connection indicators.
- Mobile fix: detail-page grids no longer overflow horizontally on narrow screens.

---

v1.3.3

📡 NEW — Local Relay (Citrine) · Android
Run a private Nostr relay right on your phone with the free Citrine app, then
flip it on in Settings → Relays. When it's connected you get:
- Instant reads — the map, spots, crews and messages load from your device
- Works offline — browse (and queue posts) at a spot with no signal
- On-device backup — a durable local copy of your own events
It's opt-in, Android-only, and your Stash and messages stay end-to-end
encrypted exactly as before — the local relay only speeds things up.

🛹 Reliability & polish across the app
- Events/Tours: month calendar view with a list⇄calendar toggle
- Notifications: RSVP/update alerts now open the event, not the sender
- Map: fixed trusted-first sorting and stash card borders
- Crews: fixed roster edits clobbering each other on rapid changes
- Lab/Market/Stash: always show the newest revision of a profile
- Wallet: clear warning (with the exact sats at risk) before removing a mint
- Spot claims: cleaner ownership history
- Newsletter: recurring issue titles no longer overwrite older issues
- Messages: group chats no longer leak into your 1:1 conversations

---

v1.2.14

🔒 Security hardening (payments & trust signals)
- Auto-pay now verifies every Lightning invoice's amount before paying (zaps,
  crew zaps, listing fee). A server can no longer return an inflated invoice to
  overcharge your wallet.
- Pro access is granted only by a verifiable, provider-issued zap receipt (plus
  platform owners). Self-signed receipts no longer grant Pro.
- "Verified payment" badges on featured listings now require a provider-issued
  zap receipt — self-published receipts can't fake verification.
- Crew funding goals tally only real invoice-backed zaps, so totals can't be
  inflated with fake zap receipts.

Plus the delete diagnostics from 1.2.13 to pinpoint the signing/publish step.

---

v1.2.10

🛠️ Fixes a startup crash (black screen) introduced in the previous build and
keeps the Amber signing fix: signing now opens Amber the same reliable way
login does, so delete / accept invite / zap complete instead of hanging.

After updating, log OUT and log back IN once.

---

v1.2.8

🛠️ Amber finally pops up — signing works (the real fix)
The big one. On some Android setups (notably GrapheneOS), tapping delete,
accepting a crew invite, sending a zap, or editing your profile would spin
forever and Amber never appeared.

Root cause: the app's browser layer was silently dropping the request that
opens Amber, so the approval screen never launched. We added a native hand-off
so signing requests now open Amber directly — exactly like login already does.

Now every signing/encryption action launches Amber, you approve, and the
action completes. If Amber genuinely doesn't respond you get a clear message
in seconds instead of an endless spinner.

IMPORTANT: after updating, log OUT and log back IN once. Then delete, accept
invite, zap, and profile edits will just work.

🔔 Notification bell "Mark read" actually clears the badge
Marking notifications read now clears the count for crew items too, while
your pending invites and requests stay visible in the Crews tab until you
act on them.

🧹 Housekeeping
Behind-the-scenes reliability fixes across the signing and notification flows.
