diff --git a/src/pages/NewsletterPage.tsx b/src/pages/NewsletterPage.tsx index 5329833..43cf135 100644 --- a/src/pages/NewsletterPage.tsx +++ b/src/pages/NewsletterPage.tsx @@ -100,6 +100,65 @@ export interface NewsletterIssue { // Newest first. The first item is always "latest". export const NEWSLETTER_ISSUES: NewsletterIssue[] = [ + { + number: 3, + date: '2026-07-25', + vibe: "A 'weekly' newsletter that shows up whenever the f*** we want. This drop: we spent an unholy amount of time teaching one Android phone where it is on planet Earth — and won. Plus spots can now tell you when they've been knobbed into oblivion.", + updates: [ + { + icon: 'fix', + title: "The 'Near Me' button no longer nukes the app", + tag: 'Android', + body: "Tapping Near Me used to grant location permission, think about it for a second, and then yeet you straight back to the app store as the whole app died. Turns out the native geolocation plugin was compiled against a newer Kotlin than our build spoke — a NoClassDefFoundError blowing up on the main thread, which no amount of JavaScript try/catch can catch. Aligned the Android build to Kotlin 2.1, and the crash is dead. RIP little bug, you will not be missed.", + }, + { + icon: 'feature', + title: 'GPS that actually finds you (even on GrapheneOS)', + tag: 'Map', + body: "Once it stopped crashing, it just... timed out forever. The old code politely asked GPS for one perfect satellite fix and gave up after a few seconds — useless indoors, and extra useless on de-Googled phones with no fused-location shortcut. Rewrote it to run high- and low-accuracy location watches in parallel, grab the FIRST real fix that comes back, and wait a proper 60 seconds for a cold GPS lock instead of rage-quitting. Google Maps energy, no Google required.", + }, + { + icon: 'ux', + title: "'Locating you…' instead of a frozen spinner of despair", + tag: 'Map', + body: "Because a cold GPS lock can genuinely take up to a minute, the app now tells you it's working — a 'Locating you…' banner while it hunts, then a 'Found you' when it locks. No more staring at a spinner wondering if the app died again. (It didn't. Probably.)", + }, + { + icon: 'feature', + title: 'You now have a pin — and it\'s a whole personality', + tag: 'Map', + body: "Near Me used to just slide the map over and leave you guessing which blob was you. Now you get a proper 'you are here' marker: the SkateSpots logo in a circular badge with a pulsing halo, sitting exactly where you're standing, riding on top of every other pin. Google's boring blue dot could never.", + }, + { + icon: 'community', + title: 'Spot Status Reports — snitch on knobbed spots', + tag: 'Community', + body: "Spots change. Ledges get knobbed, plazas get demolished, chill spots go full bust overnight — and the person who mapped it is rarely the one who finds out. So now ANYONE can report a spot's current state: 🟢 Active, 🟡 Bust, 🟠 Skate-stopped, ⚪ Closed, or 🔴 Gone. The app blends recent reports — weighted by how fresh they are and how trusted the reporter is — into one consensus badge on the spot. No ballot-stuffing, no single grumpy local nuking a good spot.", + }, + { + icon: 'ux', + title: "Demolished spots quietly leave the party", + tag: 'Map', + body: "When the community agrees a spot is 🔴 Gone, it disappears from the map markers so you're not skating 20 minutes to a parking lot. It still shows up (dimmed, with the Gone badge) in the list, because Nostr never forgets and neither should the history books. Pour one out.", + }, + { + icon: 'fix', + title: 'Native geolocation can no longer crash us, ever', + tag: 'Android', + body: "Beyond the Kotlin fix, we hardened the whole path: the app now verifies the geolocation plugin is genuinely registered before touching it, falls back gracefully instead of exploding, and surfaces the real underlying error on-screen when something goes wrong — so we never have to debug blind again. Belt, suspenders, and a second belt.", + }, + ], + spotOfTheWeek: undefined, + communityNote: + "Shipped straight to ZapStore this week (several times, because versioning is a contact sport). If Near Me still can't find you on a de-Googled phone, flip on Network Location in your OS settings or step toward a window — GPS needs a peek at the sky. Everything syncs through wss://goskatespots.nostr1.com as always.", + nostrText: `🛹 SkateSpots Drop #003 + +Our "weekly" newsletter, arriving precisely whenever we feel like it. This drop: we beat a native crash, taught the app to actually find you on a de-Googled phone (60s cold GPS lock, first-fix-wins), gave you a pulsing "you are here" pin, and shipped Spot Status Reports so anyone can flag a spot as bust, skate-stopped or straight-up gone. Demolished spots now quietly vanish from the map. + +https://skate-spots.org/#/newsletter + +#skateboarding #nostr #skatespots #spotr #newsletter #skatespotsnews`, + }, { number: 2, date: '2026-07-23', @@ -757,7 +816,7 @@ export default function NewsletterPage() { SPOTS

- The community newsletter + A weekly newsletter · shipped whenever the f*** we want