| name | geohash-spatial-code-maps |
| description | Geohash encoding/decoding in TypeScript or Rust — bit interleaving, the base32 alphabet, precision and cell geometry, neighbour/adjacency computation, proximity and bounding-box queries, and geohash-backed spatial indexing. Also covers the "codebase as a navigable 2D map" pattern — projecting a codebase into a coordinate plane, geohashing it so prefixes become business-domain regions, and navigating it like Google Maps (zoom, tiles, level-of-detail, clustering, deep links). Trigger when implementing, reviewing, or debugging geohash work — even when the user does not say "geohash" but the work involves spatial hashing, Morton/Z-order codes, proximity search on lat/lon, or mapping and visualising code structure spatially. Contains 42 impact-ordered rules with TypeScript and Rust examples. |
Geohash & Spatial Code Maps Best Practices
How to implement geohashes correctly in TypeScript and Rust, how to query and index them at scale, and how to apply them to the "codebase as a navigable 2D map" pattern — projecting code into a plane so geohash prefixes become domain regions you can fly through like Google Maps. Contains 42 rules across 8 categories, prioritised by impact.
When to Apply
Reference these guidelines when:
- Implementing or reviewing a geohash encoder/decoder in TypeScript or Rust (bit interleaving, base32, precision, neighbours)
- Building proximity / radius / bounding-box search on lat/lon data, or storing geohashes as index keys (SQL B-tree, Redis sorted sets)
- Debugging the classic geohash bugs — swapped axes, wrong alphabet, border false negatives, off-by-one cells at high precision
- Projecting a codebase (or any abstract graph) into a 2D plane and geohashing it so prefixes name business domains or features
- Navigating a geohashed dataset like a slippy map: zoom-to-precision, viewport tile loading, level-of-detail aggregation, prefix clustering, deep links
A note on scope
Categories 1–4, 6, and 7 are textbook geohashing, drawn from authoritative sources (the geohash spec, the davetroy/geohash-js neighbour tables, Redis, Elasticsearch). Categories 5 (map-) and 8 (nav-) are a novel synthesis — there is no canonical "geohash your codebase" library, so those rules derive design principles from established techniques (deterministic graph layout, Morton/Z-order keys, slippy-map tiling, software cartography). They are honest about when the pattern is overkill.
Rule Categories by Priority
| Priority | Category | Impact | Prefix | Rules |
|---|
| 1 | Encoding & Bit Interleaving | CRITICAL | enc- | 6 |
| 2 | Precision & Cell Geometry | CRITICAL | prec- | 5 |
| 3 | Neighbours & Adjacency | HIGH | nbr- | 5 |
| 4 | Proximity & Range Queries | HIGH | qry- | 5 |
| 5 | Codebase-as-Map Spatial Layout | HIGH | map- | 7 |
| 6 | Decoding & Bounding Boxes | MEDIUM-HIGH | dec- | 4 |
| 7 | Spatial Indexing & Storage | MEDIUM-HIGH | idx- | 5 |
| 8 | Navigation & Rendering | MEDIUM | nav- | 5 |
Quick Reference
1. Encoding & Bit Interleaving (CRITICAL)
2. Precision & Cell Geometry (CRITICAL)
3. Neighbours & Adjacency (HIGH)
4. Proximity & Range Queries (HIGH)
5. Codebase-as-Map Spatial Layout (HIGH)
6. Decoding & Bounding Boxes (MEDIUM-HIGH)
7. Spatial Indexing & Storage (MEDIUM-HIGH)
8. Navigation & Rendering (MEDIUM)
How to Use
Read individual reference files for detailed explanations, code examples, and "when NOT to apply" guidance:
Rules cross-link via [[other-rule-slug]]; follow them when a related pattern is referenced. To build a code map end to end, the spine is: map-deterministic-projection → map-normalize-to-geohash-domain → encode (category 1) → map-prefix-as-domain-region → navigate (category 8).
Reference Files