Axiomancer

Explorer

Score any H3 cell on the map with live intelligence panels alongside it — POIs, permits, demographics, and signal contributions for fast territory evaluation.

The Explorer is where you go from "scan the country" to "score this exact location." The default layout puts the map next to an Intelligence Rail — a live feed of alerts, top movers, your monitored portfolio, and a market-pulse snapshot for the focused metro — so you don't lose dashboard context when you drill in.

Rendering diagram…
Explorer workflow: hard filter gates qualify cells, a weight vector ranks survivors via the /api/cells/rank endpoint, and the resulting Fit score drives the map heatmap, Best-locations rail, and hover card in lockstep.

The Explorer and the dashboard render the same map core (UnifiedMap), so the H3 grid, heatmap palettes, and hover behavior are identical between the two surfaces — the dashboard runs it in a read-only preview mode and the Explorer runs it in explorer mode with the full filter, ranking, hover, and selection loop wired in.

Filters and weights

The Explorer uses a hybrid filter model: hard gates decide which cells qualify for the current metro, and a weight vector across the eight signal groups ranks the survivors. Both live in the filter/weight panel — dragging any slider re-runs the ranking and repaints the map, the Best-locations rail, and the hover card together.

Filters — gates to qualify

Each of the eight signal groups (Business, Momentum, Demographics, Economic, Development, Accessibility, Safety, Amenity) plus the overall Composite has a minimum-score gate on a 0–100 slider. A cell must clear every non-zero gate to appear on the map or in the rail; a gate at Any (zero) is ignored.

Use gates for hard requirements you'd never trade off — for example, "Safety ≥ 60 and Accessibility ≥ 40, or don't show it at all."

The confidenceMin gate is on a 0–1 scale (matching cell_scores.confidence), not 0–100. Values above 1 will filter every cell out.

Weights — rank the survivors

Weights are sliders per signal group that tell the ranker how important that dimension is to you. They are automatically normalized to sum to 1, so only the ratios matter — pushing "Business" from 20 to 40 while everything else is at 20 doubles its share regardless of the absolute number.

Each qualifying cell gets a composite Fit score (0–100) equal to the weighted average of its group sub-scores under your current weights. The map's Fit heatmap and the Best-locations rail are both driven by this number.

A default even weighting (1/8 on every group) matches the standard composite. Adjust weights to bias the ranking toward what you actually care about — a retail siting weighting might zero out development_pipeline and push amenity_demand and business_vitality up.

Under the hood the panel calls POST /api/cells/rank with the current metro, gates, and normalized weights. The endpoint returns up to 2000 ranked cells per request (server-clamped, max 5000). The client re-derives fit from the same weights so the map, the rail, and the ranker agree byte-for-byte.

Best-locations rail

Under the filter panel, the Best-locations rail lists the top 25 cells for the current filter + weight combination, ordered by Fit descending. Each row shows the rank, a truncated H3 index, and the Fit score color-coded against the standard score palette.

  • Hover a row — highlights the same cell on the map with a glowing outline and shows the hover card.
  • Click a row — selects the cell (marker, radius ring, camera fly) exactly as if you had clicked it on the map. The left sidebar populates with the full score panel.

The header reads N shown when 25 or fewer cells qualify and Top 25 of N when the qualified set is larger. If no cells clear the gates for the current metro, the rail prompts you to loosen a gate rather than silently rendering an empty list.

Heatmap layers

A layer picker above the map switches the whole cell-value paint between:

LayerSourceWhat it shows
Fit (weighted) (default)Client-computed from cell tile props and your current weights.The composite Fit score under your current weight vector — the layer that reacts live as you drag weight sliders.
Compositecell_scores.compositeBaseline composite score, ignoring your weights.
Safety, Business (and any single signal group)The named group column on cell_scores.Raw sub-score for that one dimension. Useful for isolating a single driver before layering weights back in.
CrimeGET /api/heatmap/crimeRaw H3 res-5 density of crime incidents. Not a score — treat it as an underlay.

The map legend below the layer picker is layer-aware: the title, ramp, and scale relabel between "score" (0–100 palette) and "density" (raw magnitude) so you can tell a normalized score from a raw count at a glance.

Fit (weighted) is the default on load so every cell is visible and hoverable before you touch a filter or weight. The Best-locations rail fetches independently of the active layer — dragging filters or weights updates the rail whether or not the Fit heatmap is the layer you're looking at.

Hover card

Hovering any cell on the map (or any row in the Best-locations rail) opens a compact hover card in the top-left of the map with:

  • The Fit score, color-coded and shown as a ring.
  • The top driver — the signal group with the highest sub-score for that cell — with its label and value (e.g. Business vitality · 78).

Hovered and selected cells also get an outlined glow on the map so the rail row and the map cell always visually agree.

Layout

The Explorer ships with two layouts. The default is integrated; fullscreen is a one-click fallback when you want the original map-first workflow.

LayoutWhen to useHow to switch
Integrated (default)Scoring a specific cell while keeping portfolio and market context visible.Default on /explore.
Fullscreen mapPure map scanning — wide-area pattern recognition, demos, screenshots.Click Full map in the top-right of the map, or visit /explore?mode=fullscreen.

The mode toggle lives in the top-right corner of the map and is visible in both layouts. Switching modes preserves all other URL parameters (lat, lng, filters, isochrones).

Integrated mode

Three regions, left to right:

  • Left sidebar — cell-level score breakdown for the currently selected cell. Click a hex on the map to populate it.
  • Map — H3 grid, ~1/4 of the viewport width at lg (420 px), xl (520 px), and 2xl (600 px) breakpoints. Resizes automatically when the window or layout changes.
  • Intelligence Rail — fills the remaining width with metro-level context. Independent of cell selection.

Fullscreen mode

The rail is hidden and the map expands to fill the available space. The left sidebar with the cell breakdown stays visible. This matches the layout from before the integrated view shipped — use it when you just want to scan.

Mobile and tablet

Below the lg breakpoint (1024 px) the Intelligence Rail is hidden automatically and the map reverts to a flexible map-first layout. You can still open the cell sidebar by selecting a cell.

The left sidebar is anchored to the cell you have selected on the map. It surfaces information in priority order, with the highest-signal items pinned above the fold:

  • Location header — resolved place name and metro for the selected cell.
  • Score panel — composite score and the full per-signal breakdown for the cell. This is the canonical drill-in for what does this score mean? Each row in the breakdown's contribution waterfall is click-through: rows for the eight canonical signal groups (business_vitality, population_momentum, demographics, economic_strength, development_pipeline, accessibility, safety_environment, amenity_demand) link to the corresponding /signals/[group] detail subpage so you can dig into how that signal is computed without leaving the Explorer. Legacy or composite signal labels that have no detail page render as plain text. Each row also carries a small freshness chip showing how long ago the score was refreshed (for example, 2h, 3d, 5w), color-coded against an SLA (see Score freshness chips below). The score-panel section header carries the same chip beside the title for a glanceable read of the cell's overall freshness.
  • Score robustness badge — a one-line "Stable core" / "Ambiguity shell" / "Stable (low)" label that tells you whether the composite score above survives a grid-resolution change. Renders the cell's consensus class with a percent-agreement score (for example, Stable core · 92% support agreement); hover for the full explanation. Hidden when the cell has not yet been classified.
  • Nearby intelligence summary — at-a-glance badges that count the eateries, services, recreation, and retail amenities within the cell's neighborhood. Renders without a click.
  • Crime safety — a one-line safety read for the cell, sourced from the same data that feeds the Safety & Environment signal.
  • Nearby POIs — a collapsible accordion of every individual point of interest within range, with photos, distance, type, and an expander for per-POI detail (address, phone, website, Google Maps link).
  • Look-alike cells — a compact list of the cross-metro nearest cells to the selected one, with a By score ↔ By satellite signature toggle. See Look-alike cells below.

The Nearby POIs accordion is collapsed by default. POI is a supporting due-diligence detail, not a primary nav element — the Nearby intelligence summary and Crime safety above it carry the headline counts and the safety read without requiring a click. Click the row labelled Nearby POIs (it shows the count, e.g. 15 shown) to expand the full list, and click again to collapse it.

Score freshness chips

Every row of the contribution waterfall carries a small relative-age chip (now, 5m, 2h, 3d, 5w) showing how long ago the cell's signals were last refreshed. The same chip renders next to the score-panel section header so the freshness picture is readable at a glance, before any drilling.

Chips are color-coded against the score-refresh SLA:

ToneAgeMeaning
Dim≤ 72 hoursFresh. The score reflects the current data window.
Amber72 – 168 hours (3 – 7 days)Aging. Refresh is pending; treat the score as directional.
Red> 168 hours (> 1 week)Stale. The score has missed at least one refresh window — re-score before relying on it.

Hover any chip to see the absolute refresh timestamp and its readable status (for example, Last refreshed Apr 27, 2026, 9:14 AM · aging (>3 days)).

All eight signal groups currently share a single refresh snapshot — score_history updates atomically per cell, so per-row chips on the same cell display the same age. The chips are repeated on every row deliberately: it makes freshness un-missable when scanning the waterfall, and reserves the per-row slot for a future per-signal differential refresh without changing the layout.

The cell's coarser staleness tier in the score-panel footer (prime / stale / unscored) is a separate, longer-window annotation and is unchanged. The freshness chips described here are a finer-grained per-refresh indicator, not a replacement for the tier.

Look-alike cells

The Look-alike cells panel surfaces the cross-metro nearest cells to the currently selected one, ranked by driver-profile similarity rather than by absolute composite distance. It is designed to answer "where else does a place like this exist?" — an intent the legacy same-metro Comparable cells card (still shown alongside) cannot address, because that card only compares cells inside the same metro by |Δcomposite|.

Each row shows the neighbor's metro, its H3 index, a similarity percentage (0–100%, where 100% is an identical driver profile), and the neighbor's composite score.

The panel is backed by POST /api/cells/similar and exposes the endpoint's mode as a two-option toggle:

ToggleModeWhat it compares
By score (default)scoreThe 8-d cell score profile — the eight signal groups. Two cells match when their signal mix looks alike, regardless of overall composite level.
By satellite signaturesatelliteA 64-d AlphaEarth satellite embedding — built form, greenness, land cover. Independent of the score.

Score mode works today; the satellite embedding is still being backfilled, so By satellite signature currently renders No satellite embedding for this cell yet. for cells without an embedding. Switching the toggle re-fetches the panel — expect a brief loading state. Errors from the endpoint fall back to Could not load look-alikes. rather than tearing down the cell detail panel.

Intelligence Rail

The rail surfaces the same data that powers the dashboard, scoped to the metro you're currently viewing. It refreshes when the page loads.

The rail has two modes that flip automatically based on whether a cell is selected on the map:

  • Metro default — no cell selected. All monitors and alerts in scope. Header subtitle reads Live signal feed for the current map.
  • Cell context — a hex is selected. A Selected-cell panel pins to the top of the rail and the Portfolio section filters to the active metro. Header subtitle reads Cell selected · {METRO} context.

The cell-level score breakdown still lives in the left sidebar's score panel. The rail surfaces metro context around the selection rather than duplicating cell internals.

Selected cell

Appears at the top of the rail when a hex is picked on the map. Anchors the rail's metro context to the active cell with three glanceable visualizations:

  • Header — location name (or lat/lng), composite score with tier color, and the metro plus a truncated H3 index.
  • 90-day trajectory — a compact SVG sparkline of the cell's composite score over the last 90 days. The stroke is trend-colored: emerald when the score is rising, red when declining, and dim when flat. When the underlying data is a synthetic flat-trend stand-in for a cell with no real history, the line renders dashed at reduced opacity and the label reads 90-day trajectory (estimated) so you can tell estimated lines from real measurements. Hidden when fewer than two snapshots are available.
  • Signal contribution — a horizontal-bar waterfall of the cell's eight signal groups, sorted by score so the strongest signals lead. Each bar is tier-colored (the same palette as composite scores) with the rounded score on the right. Groups with confidence below 0.4 render dim with a tooltip that names the underlying coverage gap (for example, Low confidence (28%) — limited source coverage), so a high score backed by sparse data is visually distinguishable from a confident one.

Together, the three replace the previous "what does the composite mean?" narrative with a comparison the user can read at a glance. The full cell-level breakdown — every sub-signal under each group — still lives in the left sidebar's score panel for users who want to drill in.

Metro key stats

A three-up strip of synchronous metro stats that renders without a network round-trip:

StatSource
CompositeAverage of the metro's eight signals.
GDP YoYYear-over-year GDP growth, color-coded green for positive and red for negative.
Top signalThe highest-scoring signal for the metro, surfacing what's actually strong about it instead of dumping all eight.

Safety tier distribution

A stacked-bar visualization directly under the key stats showing how the metro's scored cells distribute across five safety tiers — Prime (≥80), Strong (60–79), Solid (40–59), Watch (20–39), and Elevated (below 20). Each segment's width is proportional to the share of cells in that tier, and the legend below the bar lists exact counts. The view answers "is this metro mostly safe, or mostly elevated?" without leaving the page.

The bar is backed by GET /api/metro-tier-distribution and defaults to the safety_environment signal. The same component can render distributions for any signal group (development pipeline, business vitality, composite) by passing a different signal prop — useful when embedding in custom dashboards.

Recent alerts

Score changes on locations in your portfolio over the last scoring window, ordered by recency. Each row links to /monitors for the full history.

Top movers

The four largest absolute score swings from the recent-alerts pool — the locations whose intelligence picture moved most, regardless of direction.

Portfolio

Your monitored locations, with their latest score color-coded:

  • Green — score ≥ 70
  • Cyan — score 50–69
  • Amber — score < 50
  • Dim — no score yet

Click any row to jump the map to that location. In cell-context mode the list filters to the metro of the selected cell — the subtitle reads {N} in {METRO} and the empty state explains why (No monitored locations in {METRO} yet. Click any cell to add one.).

Market Pulse

A snapshot of the focused metro: composite score, population growth, development pipeline, and a short narrative. Click through for the full Pulse page.

Development Pipeline permit trend

Below Market Pulse, the Intelligence Rail has a separate Development Pipeline section with a 12-month permit-issuance chart for the focused metro. It is not part of the Market Pulse card. If permit data is unavailable for the focused metro, the section shows a "No permit data for this metro" note instead of the chart.

Recent alerts and Portfolio pull from /api/alerts/history and /api/monitors — the same endpoints the dashboard uses. If those endpoints are unavailable the rail shows empty states instead of failing the page. The Selected-cell panel, Metro key stats, and Market Pulse render from local data and never make a network call.

The rail and the dashboard render the same alert, monitor, and metro-pulse markup from a shared component set, so copy and styling stay in sync between the two surfaces.

URL parameters

The Explorer supports deep links via query string. Combine these to land users in a specific view.

ParameterValuesDescription
latnumberLatitude to center the map on.
lngnumberLongitude to center the map on.
modefullscreen (omit for integrated)Force fullscreen layout.
https://app.axiomlocus.io/explore?lat=40.7128&lng=-74.0060&mode=fullscreen
https://app.axiomlocus.io/explore?lat=40.7128&lng=-74.0060
Was this page helpful?

On this page