App store links - #4
Open
flockhopper3 wants to merge 219 commits into
Open
Conversation
* fix iframe * remove redundant isEmbed checks
* use pmtiles byte range without cf workers * update tiles url * remove unrealted changes * hardcode for now
fixed map loading issues "failed to initialize" + minor UI tweaks
Replace the old promo component with FlockHopperStoreButtons and FlockHopperLearnMore from FlockHopperCTA. The empty state now displays a concise tagline, store buttons, and learn-more link. Remove the obsolete FlockHopperAppPromo component. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
calculateRoutes captured origin/destination at call start but wrote results unconditionally on resolve. If the user swapped, changed, or map-picked a new endpoint while the request was in flight, the stale result overwrote the fresh state. Guard both the success and error paths with a get() re-check against the captured origin/destination, resetting isCalculating to false so FloatingRouteCard's auto-calc effect can re-fire for the new endpoints.
…ns route status Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…te survives tab switches Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…flow Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fix dropdown's search action row to show during in-flight fetches - Update intro paragraph to reflect new How-it-works affordances Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- flag button above the layers control switches camera datasets; Canada loads lazily on first select and persists via ?country=ca - US-only modes (Route/Analysis/Network) dim and auto-return to Map when Canada is active - mobile drawer shows a live cameras-in-view count and swipe-up hint in map mode - mobile de-bloat: hide zoom buttons, merge layers+geolocate into one group, move attribution to bottom-left - fix stale spatial-grid cache that kept serving the previous country's data after a switch - worker: register cameras-ca.geojson.gz fetcher (Overpass ISO3166-1=CA) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EvaJ843Vj8tnEoxroYaMeq
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EvaJ843Vj8tnEoxroYaMeq
Big number per route with camera/time/distance inline beside it, verdict moved into the footer strip with watermark and a shortened Edit action. Card marked data-route-scoreboard so the route fit measures it and centers the line below (mobile pins it across the top of the map); fitBounds padding derives from the measured card instead of a fixed 80. (Work from a concurrent session in this checkout, committed as found.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Suppress the retry pill in geojson/heatmap mode (avoids a misleading pill and pill stacking); refresh stale GeoJSON-fallback wording in store field docs and tile-error logs; drop a JSDoc em dash. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…path New cameraIndexService consumes the hourly FHIX index built alongside the tile archives (columnar int32 lat/lng microdegrees + uint8 brandId, ~1MB for the US): background-fetched after map load, decoded straight into typed arrays, bucketed into a 0.5-degree CSR grid. Counting a viewport is sub-millisecond at any zoom, so the in-view counter updates live during the gesture (throttled ~8Hz) like the old geojson grid did. This replaces queryRenderedFeatures as the primary counter in unfiltered tiles mode. That path was both the zoomed-out drag jank (~112k features deserialized per gesture) and simply wrong at city zoom: measured 117k on a fresh z12 load and 6.2k after a nudge for a viewport whose true content is ~600. The index count matches geometry-derived ground truth within 0.1% in e2e against the live CF artifacts. The query path remains as fallback (filter-tiles mode, index unavailable) with the stale-count heuristic. Once the index is in, a persistent map-idle recount keeps the value self-healing: one-shot corrections proved flaky when a boot-time count landed against half-loaded tiles. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The hourly manifest and filter TileJSON are served with 24h edge caching and expire independently, so a user can receive the pair from two different builds (observed 12.6h vs 2.8h old entries on 2026-07-18). The build-pairing check then reports mismatch and filters degrade to showing all cameras — the "filters stopped working" report. On mismatch the store now refetches both files once with a cache-busting param, which pulls a coherent pair from origin past any stale edge entry. Only a fresh pair that still mismatches degrades. Server-side follow-up tracked separately: shorter TTLs on the paired artifacts + purge on publish, like the index files already have. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sheet rendered a grab handle but never wired drag. Drag now starts from the handle/header via useDragControls; releasing past 80px or a fast flick dismisses, upward drag stays locked, and the scrollable body keeps its own touch gestures. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
portalOnly now defaults off so the whole network is visible; non-portal selections compute no arcs until the new flag is on. Gate lives in one helper used by selection, adjacency backfill, and the toggle. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Warning card with inline enable button while gated, inferred-connections info banner when unlocked, no-ring legend row, and an Inferred Connections switch with sub-labels in options. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The mt-11 was reserving room for a search facade that no longer exists; mt-3 matches every other peek. Portal agencies now show their transparency-portal link without expanding the sheet. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
onMove reverts to countInBounds (O(cells) interior fast path); the per-member tally and stats derivation run only in the idle recount, and the store write is gated on value equality so identical stats never cause a React commit. The breakdown lags the gesture by design. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stale is liveCount vs stats.total disagreement, a boolean selector that flips twice per gesture; the live total moves into its own span so 8Hz ticks re-render nothing else. Approved treatment C from mockups. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Matches the route peek's CTA idiom and fills the card's dead bottom space. Tightened margins so the bar fits inside UNIFORM_PEEK_HEIGHT; the sheet height is unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a Layers control with States/Counties/Municipalities switches that render the boundaries-us vector tileset beneath the camera layers. The vector source mounts lazily, so no boundary tiles are requested until a level is enabled. Hovering a boundary highlights it and shows a name/context card; clicking pins that card (works as tap on mobile). Replaces the dormant GeoJSON boundary overlay (boundaryDataService plus the mapModeStore overlay slice), which had no live consumers. Camera state filtering (stateFilterService) is unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cloudflare Worker and tile-pipeline changes from the camera-tiles refactor: per-country camera fetchers, retry-with-backoff, dependency-free safety guards, email alerting, CORS tweaks, and overpass fetcher updates, with accompanying tests and a local-testing guide. Refresh the flockhopper-tiles build script and wrangler config. Committed on behalf of the concurrent worker-side work sharing this checkout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ra count Country switch (MapStyleControl) now renders only on map + Explore, where switching countries is meaningful. On mobile, the "N in view" camera count no longer shows on Network — that view has its own "agencies in view" count. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Camera tiles refactor
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix flockhopper links