Loading post…
Loading Detroit Meets…
Loading post…
Same deal as May and April: every month I publish a plain-language log of what changed on the data and platform side — what we collect, what we removed, who we rely on, and any government or legal request we received (this month: none). If a number or a third party shows up that should not be there, you will see it here first.
June was the v4.2 month — one concentrated ship on June 2 (git 26f8558 and the same-day companion commits), then a quiet rest of the month. The Privacy Policy got a material update the same day; this report is the companion piece. Nothing after that commit landed in June on the product path (July work is next month’s report).
leave_by_push_target (0029).POST /api/calendar/saved and get a one-time .ics file back. No installation id, account, or personal fields in that request — rate-limited to 30 / minute / IP.editorialPick + short editorialBlurb, migration 0028). Presentation-only; no new visitor PII category.This is the month in ship order — useful if you are diffing the repo against last month’s report. Scope starts at 26f8558 (June 2) as the v4.2 product baseline after the May report.
| Date | Ship |
|---|---|
| June 2 | v4.2 — editorial spotlight, saved-meets week planner + ICS export, route preview map, public status history, sun/golden-hour card, leave-by without Live Activity (leave_by_push_target + /api/push/leave-by/echo-drive-eta), menu reorg, sync advisory locking / Live Activity dedupe, Privacy Policy update (f8be783 … 26f8558; migrations 0028–0030). |
| June 3 – June 30 | No further product commits on this line. Dependabot bumps existed on side branches only and were not merged into the app in June. |
Everything from the May report still applies unless noted below. There is still no anonymous telemetry beacon and no third-party analytics SDK.
Leave-by push target rows. When leave-by remote push runs without (or alongside) a Live Activity session, we may store a row keyed by installation id + meet id: optional last drive-minutes (integer), echo/alert/suppression timestamps. Used only to time and de-dupe leave-by APNs. Schema: src/server/db/schema/leave-by-push.ts (leave_by_push_target). No coordinates, email, or name.
Drive-minutes echo for leave-by (non–Live Activity path). POST /api/push/leave-by/echo-drive-eta accepts installation id, meet id, drive-minutes integer, and optional likelyEnRoute — same integer-only pattern as the Live Activity echo. Rate-limited like other push register endpoints. Coordinates stay on device.
Saved-meets ICS export requests. Your browser or app may POST a list of public meet IDs (capped at 50) to /api/calendar/saved. The server looks up public listing fields and returns an ICS attachment. Access logs may still see your IP like any other HTTP request; the body does not carry an installation id.
Editorial pick fields on meets. editorialPick (boolean) and optional editorialBlurb (≤160 chars) on the public meet row — curator copy for the home spotlight rail. Visible on the public site when set; not a visitor identifier.
Anonymous sync on by default. Current builds treat anonymous cloud sync as enabled unless env explicitly sets the feature flag to "false". Data shape unchanged: saved meets, reminders, prefs, inbox, drafts keyed by opaque installation id.
Migration 0030 drops the DB foreign key from anon_saved_meet_entry to the meets table so sync rows can survive meet deletes/recreates without cascading failures. No change to what we store — only referential constraint behavior.
April’s deletion of runtime Nominatim geocoding on map/home is still in force. June did not bring that back. No analytics SDK, no ad network, no new render-path third party.
26f8558)leave_by_push_target (0029) — server state for leave-by APNs when no Live Activity session exists; pairs with /api/push/leave-by/echo-drive-eta.POST /api/calendar/saved — on-demand ICS for saved meet IDs; 30 req/min/IP.0028) — editorialPick / editorialBlurb; home spotlight rail; staff-gated in admin.Material update the same day as v4.2: corrected leave-by wording (alerts without Live Activity) and disclosed the saved-meets ICS download. Accordion history on the Privacy Policy page.
Full list as of June 30, 2026. Render path = what loads when a typical visitor browses meets, map, or detail without submitting a form or opting into extra features.
On the render path (unchanged from May unless noted):
detmeets.com.*.basemaps.cartocdn.com. Direct tile fetch from your device; we do not pass installation or sync ids to CARTO.Off the render path — only when you take a specific action:
/api/address-suggest when you type in submit or the admin meet form; one-shot geocode at organizer publish; not on map/home page load.instagram.com) — our server fetches public post HTML/images when you use paste-from-link prefill (your IP is not sent to Meta; our server IP is).We do not use:
If we receive any of the above in a future month, the next report will say so. If we are ever gagged from saying so, the canary block above will simply not be repeated.
POST /api/calendar/saved capped at 30 requests / minute / IP.reportError / reportEvent JSON lines to Vercel function logs only; not shipped to Sentry or any vendor.If you find a security issue, message @alex.30mm on Instagram.
0028–0030)./api/calendar/saved, /api/push/leave-by/echo-drive-eta.May promised the tile-provider commitment and the Live Activity / prefill machinery. June was quieter and more operational: leave-by alerts that work without a Live Activity, an honest ICS download for your saved list, and a clearer Privacy Policy for both — all still with no ads, no analytics SDKs, no new render-path vendors.
If something is wrong, missing, or you want a category tracked next month, message @alex.30mm on Instagram.
Effective: June 30, 2026 · Period covered: June 1 – June 30, 2026 (product baseline 26f8558 and after; no post-26f8558 product commits in June)
Privacy Policy · Terms · May 2026 Transparency Report · Detroit Meets on the App Store
MeetSunCard) — no extra third-party call. Weather still goes through our Open-Meteo proxy (optional window/endAt for richer cards; still meet coordinates only).FEATURE_SYNC_ANON / NEXT_PUBLIC_FEATURE_SYNC_ANON default "true"). Operators can still disable via env. Same opaque installation-id model as before./api/weather may accept endAt for a bounded hourly window (still Open-Meteo, still meet coordinates only, still server-proxied).drizzle-kit.ts cannot drift from index.ts.RATE_LIMIT_DURABLE defaulted on in env schema (Postgres buckets when the DB path is used; in-memory fallback remains).