Loading postβ¦
Loading Detroit Meetsβ¦
Loading postβ¦
The home feed gets editorial picks when something's worth your attention. The saved-meets screen gets a week planner and an ICS export. Meet detail pages get a route preview map, a status history, and sunset / golden hour times. Leave-by push alerts no longer require a Live Activity to be running. And the menu is now a menu instead of a scroll of doom.
Editorial Spotlight. When a meet is worth calling out specifically β big venue, notable host, last-minute addition, whatever β it now appears as a full-bleed spotlight card at the top of the home feed with a short blurb. Curated by hand, never algorithmic. If your meet doesn't show up here, it probably just means we didn't know about it β tell us.
Saved meets β week planner view. Open your saved meets and the list now groups upcoming events by day with Today / Tomorrow labels. Easier to scan when you've got three meets in a week and need to figure out which ones overlap.
Download saved meets as a calendar file. Tap the calendar icon in saved meets and you get an .ics file for everything you've saved β drop it into Apple Calendar, Google Calendar, whatever you use. Each event includes title, venue, address, start and end times, and a link back to the meet detail page. It's a one-time download, not a live subscription β re-export when your list changes.
Route preview map on meet detail. Every meet detail page now has a small venue map so you know where it is before you commit to Apple Maps or Waze. Rendered with the same MapLibre tile stack as the main map β no Google, no tracking.
Meet status history. If a meet has been postponed, rescheduled, or updated since it was first published, there's now a public status timeline on the detail page. You can see exactly when it changed and what changed. Useful when the organizer quietly moved a meet to a new venue and you want to know if that happened before or after you saved it.
Sunset and golden hour times. Below the weather row on every meet detail page, a small line shows the day's sunset time and golden hour window (the 47 minutes before sunset). Computed on-device from the venue's coordinates β no extra network request. Only shows for meets during daylight hours; hidden for overnight or pre-dawn events.
Leave-by push alerts β no Live Activity required. Previously, leave-by push alerts only reached you if a Live Activity was already running for that meet. Now they fire for any saved meet with a push token β no Lock Screen activity necessary. If you've saved a meet, granted notification permission, and have the iOS app installed, we'll push you when it's time to leave. Timing is traffic-aware when a Live Activity is active; otherwise it goes off based on the published start time.
Menu β actually organized now. The menu grew a lot over the past few releases and it showed. It's been restructured into proper sections: Devices & sync (sync ID, cloud status), Look & feel (theme, OLED), Storage (offline map cache), and on iOS β Alerts & navigation, Sharing, Data on this device, and Version & support. Much easier to find things. The site links and legal items moved to dedicated Activity, Help, and About groups at the bottom.
Duplicate Live Activities on app relaunch. Force-closing and reopening the app was sometimes producing two Live Activities for the same meet β one orphaned, one new. Fixed: on launch the app now reads what ActivityKit actually has running, deduplicates by meet ID, and reuses or updates the existing activity instead of starting a second one.
Cloud sync errors under fast tapping. Rapidly saving and un-saving meets (or opening the app on two devices simultaneously) was occasionally producing a silent "Failed query" error from a unique constraint race. Fixed with server-side advisory locking and client-side serialization so sync operations queue cleanly instead of fighting each other.
Error and empty states. The map, saved-meets, and inbox screens all had different β and sometimes broken β error UIs. They're now unified: a consistent empty state when there's nothing to show, a consistent error card when something goes wrong, with a retry button that actually works.
leaveByPushTarget table joins anonSavedMeetEntry and pushDevice so the leave-by dispatcher can fire without an active Live Activity session. Swift StartGate actor serializes per-meetId Live Activity starts so there's no race between the JS layer and ActivityKit at launch. listActiveLiveActivitiesFromDevice hydrates the JS scheduled-activity map from the native source of truth on boot, with retries for Capacitor readiness. Drizzle schema exports are now CI-guarded so drizzle-kit.ts can't drift from index.ts again. Advisory lock on pushSavedState serializes concurrent installs. dedupeSavedEntriesByMeetId handles client-side batches with duplicate meet IDs.
Material updates effective June 2, 2026 β corrected the leave-by alerts section to reflect that alerts can fire without a Live Activity, and disclosed the saved-meets ICS download endpoint. Same deal as always: no ads, no profiling, no sale of your data. Full diff on Privacy Policy.
Detroit Meets on the App Store Β· @alex.30mm on Instagram
(Android is coming soon TM, I promise...)