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.
