Newsletter: add Drop #003 (geolocation saga + Spot Status Reports)

New issue covering everything shipped this session, written funny:
- Near Me crash fix (Kotlin 2.1 alignment)
- Parallel first-fix GPS strategy that works on GrapheneOS / no Play Services
- "Locating you…" / "Found you" progress feedback
- "You are here" user-location pin
- Community Spot Status Reports (active/bust/skate-stopped/closed/gone)
- Gone spots hidden from map markers
- Defensive native geolocation hardening

Also updated the masthead tagline to lean into the "weekly newsletter,
shipped whenever the f*** we want" bit. Includes ready-to-post nostrText
for Drop #003.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
shakespeare.diy 2026-07-25 01:06:24 +07:00
parent 58aaeb7b16
commit 35c7283970

View file

@ -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() {
<span className="text-white">SPOTS</span>
</h1>
<p className="text-gray-500 text-xs uppercase tracking-widest">
The community newsletter
A weekly newsletter · shipped whenever the f*** we want
</p>
</div>