Loading post…
Loading Detroit Meets…
Loading post…
A stability, subtraction, and plumbing release. The app no longer crashes on the iOS 27 beta. iOS Live Activities are gone — Lock Screen and Dynamic Island countdowns are removed along with the tokens and server records behind them, while leave-by reminders keep working on their own schedule. Leave-by alerts are now scheduled the moment your device reports a drive time instead of waiting on a frequent poller. The map got retinted so it stops looking like a stock basemap. And there's a new public API so other apps can list meets or hand us submissions.
iOS Live Activities. No more Lock Screen or Dynamic Island countdown for a saved meet. The ActivityKit paths on the client, the push-to-start and per-activity update tokens, and the server session table that stored them are all deleted. Widgets are unaffected — Home Screen and Lock Screen widgets still read your saved meets on-device.
The background location permission. The drive-time refresh was the only thing that used it, so the iOS app no longer declares a location background mode at all. It can read your location only while you have the app open.
Leave-by alerts, scheduled instead of polled. When your device reports a drive-time estimate, we now schedule the early and urgent alerts right then as one-shot deliveries. Practically: the same two alerts you already got, timed off a fresher ETA, with an hourly reconciliation pass as the safety net.
A public API. /api/v1/meets lists upcoming published meets, /api/v1/meets/{id} returns one, and /api/v1/meets/search?q= searches the catalog. /api/v1/submissions lets a partner file a meet the same way the submit form does, and check its status afterward. No API key, no signup — just per-IP rate limits. Docs and copy-paste examples live at /developers.
A map that matches the app. CARTO's blue-gray water and label tint is stripped down to neutrals, the bottom chrome no longer collides with the tab bar, and tapping a pin gives you a richer sheet.
Blog in the menu. The blog is now a menu shortcut instead of something you had to know the URL for.
iOS 27 beta: fixed. If you are on the iOS 27 beta, the app crashed. It does not anymore — launch and normal use are stable. The project now builds against Xcode's recommended deployment target for the current SDK and declares its app icon explicitly, and the background-task identifier the leave-by refresh uses is declared where the newer OS expects it. You need app version 4.4 (23) or later — earlier builds still crash on the iOS 27 beta, so update from the App Store before reporting it.
Render purity. Several components read map refs and Date.now() during render, which is exactly the kind of thing that produces "works until it doesn't" hydration bugs. Those now read at the right time, and native-shell detection goes through one shared hook instead of ad-hoc checks.
Production offline config. The iOS and Android sync:prod steps now reliably write the offline config with the production host, so a synced native build can't ship pointed at the wrong origin.
Native version drift. iOS build and Android version code are back in step with the web version.
Leave-by delivery moved onto QStash: the drive-echo endpoint publishes delayed one-shot jobs to a signature-verified deliver route, replacing the frequent cron poller so the database can scale to zero between meets. Message ids are stored per target (0033) so a rescheduled alert cancels the old one. The Live Activity session table is dropped (0032).
On the API side, submission create and status lookup moved into one shared server module, so the /submit form and /api/v1/submissions cannot drift apart on validation, honeypot handling, or rate limiting. Catalog reads get their own per-IP bucket; search shares the existing one with the website.
Both changed on August 30 — worth an actual read this time.
The Privacy Policy drops everything about Live Activity tokens and session records, describes leave-by reminders and the drive-time refresh on their own terms, and documents the public API: what the catalog endpoints expose (only already-public listing fields) and what partners must do before sending someone's name or contact.
The Terms gain a new Section 6a covering the API — what you may do with meet data you pull from it, attribution, rate-limit and scraping rules, and the fact that endpoints can change or disappear without notice. If you submit on someone else's behalf, you now have to have their consent.
Detroit Meets on the App Store · @alex.30mm on Instagram
(Android is coming soon TM, I promise...)