Aster

Changelog

What we shipped.
When we shipped it.

Reliability fixes, new features, performance wins, safety improvements. The plain-language log of every meaningful change.

  1. Marketing

    Marketing surface area — pricing, about, FAQ, glossary, comparisons, press, resources.

    Built out the public marketing pages from a single /welcome to the full /pricing + /about + /faq + /glossary + /contact + /press + /changelog + /resources hub + 4 comparison pages (Trackleaders, RaceMap, Strava Beacon, Garmin LiveTrack) + 4 long-form articles. Per-page social-share images so every link looks distinct in social previews. WebP photography pipeline shaving megabytes off marketing pages.

  2. Reliability

    Spectator trail handles pause and teleport without drawing fake straight lines.

    Selected-rider trails on the watch page now split at time gaps so a paused or signal-dropped rider doesn't get a straight line connecting their before-and-after positions. Same gap-splitting logic in free-ride watcher (commit bee9ff2). Leaderboard re-anchor logic now runs in the canonical query so WebSocket pushes and HTTP fetches agree on distance for every rider.

  3. Safety

    Rule 5 — anonymous spectator access for public + unlisted events is part of the free-tier offer.

    Surfaced a regression where /tracking/history was gated behind auth, breaking the historical-trail seed for incognito spectators. Fixed in commit 875f941 — the full live experience (map + leaderboard + rider trail + route polyline) is now anon-accessible for public/unlisted events. Rule 5 in CLAUDE.md pins the policy so it can't drift back.

  4. Reliability

    Rule 4 — pings are bounded by start and stop; the bounded set is canonical truth.

    Rewrote Rule 4 in CLAUDE.md and started shipping the hardening: server-side pre-Start cutoff on free-ride /pings (commit 1d5b922), leaderboard WS broadcast reading from the canonical bounded-ping query (commit e5d617c). Every surface that reports on a ride — rider summary, spectator polyline, leaderboard distance + time — now computes from a single query over the bounded set so the rider, spectator, and leaderboard see the same number.

  5. Marketing

    Stripped "free for 2027" / "Year 1 free" claims from every customer-facing surface.

    Found and pulled the unintentional "free for 2027" promise from the /for-organisers hero, the /welcome organiser card, the investor deck BUSINESS MODEL footer, the organiser deck lime YEAR 1 FREE banner, and the comparison-table footnote (commit 94a4fec). Pricing now consistent: £3 / rider / event capped at £6,000 for organisers; Free Ride free for athletes always.

  6. Feature

    Point-to-point checkpoint system shipped end-to-end.

    Phase 1 schema + CRUD endpoints (commit 7ad28b7), Phase 2 + 3 organiser editor + tracking detection + spectator rendering (commit cd5eb23). Drag-to-reorder checkpoint rows, map-picker for placement, visually distinct start + finish rows, explainer callout on the editor. Point-to-point events now run with checkpoint coords driving start/finish detection without requiring a GPX.

  7. Reliability

    Race events #105 — pre-gun pings no longer pollute top-speed stats.

    Pings collected before actual_start_time were inflating top-speed calculations at race start. Server-side gate (commit bdbc0d6) drops any ping with timestamp earlier than the gun. This is the fix that Rule 4 later generalised to TT gate-crossings and free-ride/grand-depart tap-Start.

  8. Marketing

    Domain cutover — astertrack.app is the canonical home.

    Swapped all vercel.app references over to astertrack.app and added a cutover runbook (commits 19162d5 + 366d71a). Search Console, social links, and outbound email signatures all point at the proper domain.

  9. Marketing

    "Grand Départ" renamed to "Point-to-point adventure" across the app + marketing.

    The grand-départ framing tested confusingly outside the bikepacking-ultra audience. Renamed to "Point-to-point adventure" everywhere — app navigation, marketing pages, persona language, organiser flows (commits f207b14, f82c5dd, 8bbc9a7).

  10. Marketing

    Investor deck — 5 weakest body slides rewritten + SEIS + EIS tax-position slide added.

    INSIGHT, PRODUCT, BRAND, TRACTION, TEAM slides rewritten for tighter typographic hierarchy and sharper claims (commit d4c40f3). New 17/20 slide quantifying the UK SEIS + EIS tax position for investors (commit 5bd4667). Decorative italics stripped across all four decks (commit 14eb67a).

  11. Reliability

    Spectator Phase 1 — real-time-feel position updates with WebSocket catch-up.

    Spectator-side redesign (commit ad2364a): visibility/WebSocket catch-up so a tab returning to focus snaps to the current state, health surface for connection state, retry on dropped connection, raised LIMIT on history fetch. Real-time-feel update cadence with position animation and tighter intervals (commit 23d728b).

  12. Reliability

    Free-ride watcher polyline + distance no longer keep growing after WebSocket drops.

    Incident on ride 3ced3199: when the watcher's WebSocket connection dropped, the rendered polyline and reported distance kept extending using stale state instead of pausing. Fixed in commit 9287455.

  13. Reliability

    Late-drain ping symmetry — web and native paths agree.

    Web /pings + native /pings-native now share the same late-arrival semantics with cutoff filtering and ON CONFLICT dedup (commits 7a28d36 + d89225c). intended_ended_at persists across retries so a /stop that fires hours later doesn't backdate or extend the ride.

  14. Reliability

    Android P0 crash hotfix triple — gms-location dependency pinning.

    Crash storm on Android 16 traced to a gms-location version mismatch. Stack of three commits to pin tslocationmanager to 4.1.5 + force-pin gms-location to 21.0.1 + drop the force-pin once upstream caught up (5eeba09, bd86155, 115fc03). Track.tsx reverted to a known-good state during the storm and re-stabilised afterwards.

  15. Safety

    SOS push + broadcast restricted to event admins only.

    SOS alerts and the linked WebSocket broadcast now only reach the event's admin set, not every connected user with /api access (commit b25bb89). Tightened the surface for sensitive emergency content.

  16. Safety

    Free-ride SOS hardening — rate-limit, dedup, atomic fan-out.

    PR5 (commit ea9a9d0): rate-limited the SOS endpoint, deduped repeat alerts within a window, made the watcher fan-out atomic so a half-sent broadcast can't leave watchers in inconsistent states. Paused-rider "I'm OK" handled in the same change.

  17. Marketing

    Brand colour system — dark primary, lime global, red restricted to SOS + Sign Out.

    Repointed the primary brand colour to dark, surfaced lime globally as the accent, and restricted the loud red to safety-critical actions (SOS, Sign Out) so its meaning stays sharp (commit ff2b709).

  18. Reliability

    Free-ride rides INSERT — atomic lazy-create + race-safe.

    Rule 4 hardening: rides.INSERT path now atomic so two near-simultaneous /start requests can't both create a row, and lazy-create from /pings (when pings land before /start due to offline queueing) closes any pre-existing open ride before opening a new one (commits 64d0ac2 + ce956cb).

  19. Safety

    Crash-SOS delivery — surface failure, retry, fallback prompt.

    When a crash-triggered SOS fails to deliver (network, server, or client error), the rider sees an explicit failure surface with a retry button and a fallback to call emergency services manually (commit 4d78d23). The silent-failure mode where a rider thinks the SOS went out and it didn't is closed.

  20. Feature

    Initial release — Watch the Dot PWA, Free Ride, crash detection, SOS.

    First commit of the platform (0ab6bab): GPS tracking PWA, Free Ride mode (standalone tracking without an event), crash detection with next-of-kin alerts, SOS chat, shareable watch links (commit 71bd357).

Want to be on the next entry?

Tell us what would change your race day. The roadmap is a conversation.