···4455It is a PWA built on [MapLibre GL](https://maplibre.org) and [PMTiles](https://protomaps.github.io), and serves as a proof-of-concept for the data flow behind something like [Organic Maps](https://organicmaps.app). A world basemap is fetched on first load, users can download regional tiles on demand with additional detail, and everything renders offline after that. Bookmarks, collections, and search history are stored locally.
6677+
88+79## Technologies
810911**App**
+1-1
deno.json
···11{
22- "version": "0.2.0",
22+ "version": "0.3.1",
33 "workspace": ["./data"],
44 "tasks": {
55 "data": "deno run -A ./data/cli/main.ts",
+5-3
www/models/schema/v0.ts
···7070/** Resolves a human-readable name for display, falling through available fields. */
7171export function bookmarkDisplayName(b: Bookmark): string {
7272 return (
7373- b.properties.displayName ??
7474- b.properties.name ??
7373+ b.properties.name ??
7474+ b.properties.displayName ??
7575 b.properties.address?.displayText ??
7676 `${b.geometry.coordinates[1].toFixed(4)}, ${
7777 b.geometry.coordinates[0].toFixed(4)
···98989999const now = new Date().toISOString()
100100101101+const appVersion: string = globalThis.__APP_VERSION__
102102+101103export const StoreState = z.object({
102102- version: z.optional(z.string()),
104104+ version: z._default(z.string(), appVersion),
103105 searchHistory: z._default(z.array(SearchHistoryEntry), []),
104106 bookmarks: z._default(z.array(Bookmark), []),
105107 bookmarkCollections: z._default(z.array(BookmarkCollection), [{