Update status doc
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Project Status: Marco
|
# Project Status: Marco
|
||||||
|
|
||||||
**Last Updated:** Mon Jan 19 2026
|
**Last Updated:** Wed Jan 21 2026
|
||||||
|
|
||||||
## Project Context
|
## Project Context
|
||||||
|
|
||||||
@@ -25,6 +25,8 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
|
|||||||
- **Dynamic Zoom:** Automatically zooms to a level where the accuracy circle covers ~10% of the map (fallback logic handles missing accuracy data).
|
- **Dynamic Zoom:** Automatically zooms to a level where the accuracy circle covers ~10% of the map (fallback logic handles missing accuracy data).
|
||||||
- **Smart Pulse:** Displays a pulsing blue circle during the search phase.
|
- **Smart Pulse:** Displays a pulsing blue circle during the search phase.
|
||||||
- **Auto-Stop:** Pulse and tracking automatically stop when high accuracy (≤20m) is achieved or after a 10s timeout.
|
- **Auto-Stop:** Pulse and tracking automatically stop when high accuracy (≤20m) is achieved or after a 10s timeout.
|
||||||
|
- **Persistence:** Saves and restores map center and zoom level using `localStorage` (key: `marco:map-view`).
|
||||||
|
- **Controls:** Enabled standard OpenLayers Rotate control (re-north) and custom Locate control.
|
||||||
|
|
||||||
### 2. RemoteStorage Module (`@remotestorage/module-places`)
|
### 2. RemoteStorage Module (`@remotestorage/module-places`)
|
||||||
|
|
||||||
@@ -46,7 +48,10 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
|
|||||||
- `osm.js`: Fetches nearby POIs from Overpass API.
|
- `osm.js`: Fetches nearby POIs from Overpass API.
|
||||||
- **Reliability:** Implemented `fetchWithRetry` to handle HTTP 504/502/503 timeouts and 429 rate limits, in addition to network errors.
|
- **Reliability:** Implemented `fetchWithRetry` to handle HTTP 504/502/503 timeouts and 429 rate limits, in addition to network errors.
|
||||||
- **UI Components:**
|
- **UI Components:**
|
||||||
- `places-sidebar.gjs`: Displays a list of nearby POIs. Allows selecting a place to view details and saving it as a bookmark. Links to the OSM website via the node ID.
|
- `places-sidebar.gjs`: Displays a list of nearby POIs.
|
||||||
|
- `place-details.gjs`: Dedicated component for displaying rich place information.
|
||||||
|
- **Features:** Icons (via `feather-icons`), Address, Phone, Website, Opening Hours, Cuisine, Wikipedia.
|
||||||
|
- **Layout:** Polished UI with distinct sections for Actions and Meta info.
|
||||||
- **Geo Utils:**
|
- **Geo Utils:**
|
||||||
- `app/utils/geo.js`: Haversine distance calculations.
|
- `app/utils/geo.js`: Haversine distance calculations.
|
||||||
- `app/utils/geohash-coverage.js`: Logic to calculate required 4-char geohash prefixes for a given bounding box.
|
- `app/utils/geohash-coverage.js`: Logic to calculate required 4-char geohash prefixes for a given bounding box.
|
||||||
@@ -64,25 +69,23 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
|
|||||||
1. User pans map -> `moveend` triggers `storage.loadPlacesInBounds`.
|
1. User pans map -> `moveend` triggers `storage.loadPlacesInBounds`.
|
||||||
2. User clicks map -> "Pulse" animation -> hybrid hit detection (Visual Tile vs Overpass).
|
2. User clicks map -> "Pulse" animation -> hybrid hit detection (Visual Tile vs Overpass).
|
||||||
3. **Navigation:** Selected place is passed to the route (`transitionTo` with model), updating the URL to `/place/<id>` or `/place/osm:<type>:<id>` without re-fetching data.
|
3. **Navigation:** Selected place is passed to the route (`transitionTo` with model), updating the URL to `/place/<id>` or `/place/osm:<type>:<id>` without re-fetching data.
|
||||||
4. Sidebar displays details (using normalized `osmTags`).
|
4. Sidebar displays details via `<PlaceDetails>` component.
|
||||||
5. User clicks "Save Bookmark" -> Stores JSON in RemoteStorage.
|
5. User clicks "Save Bookmark" -> Stores JSON in RemoteStorage.
|
||||||
6. RemoteStorage change event -> Debounced reload updates the map reactive-ly.
|
6. RemoteStorage change event -> Debounced reload updates the map reactive-ly.
|
||||||
|
|
||||||
## Files Currently in Focus
|
## Files Currently in Focus
|
||||||
|
|
||||||
- `app/routes/place.js`: Routing logic, ID parsing, and URL serialization.
|
- `app/components/place-details.gjs`: UI logic for place info.
|
||||||
- `app/services/osm.js`: Data fetching and normalization.
|
- `app/routes/place.js`: Routing logic.
|
||||||
- `app/components/map.gjs`: Map rendering and interaction.
|
- `app/components/map.gjs`: Map rendering and interaction.
|
||||||
- `app/services/storage.js`: Data sync logic.
|
- `app/services/storage.js`: Data sync logic.
|
||||||
|
|
||||||
## Next Steps & Pending Tasks
|
## Next Steps & Pending Tasks
|
||||||
|
|
||||||
1. **App Header:** Implement a transparent header bar with the App Logo (left) and Login/User Info (right).
|
1. **App Header:** Implement a transparent header bar with the App Logo (left) and Login/User Info (right).
|
||||||
2. **Persist View:** Store the current map center and zoom level in `localStorage` to restore the view upon re-opening the app.
|
2. **Edit Bookmarks:** Allow users to edit the title and description of saved places.
|
||||||
3. **Edit Bookmarks:** Allow users to edit the title and description of saved places.
|
3. **Performance:** Monitor performance with large datasets (thousands of bookmarks).
|
||||||
4. **Refine UI/UX:** Further polish sidebar interactions and mobile responsiveness.
|
4. **Testing:** Add automated tests for the geohash coverage and retry logic.
|
||||||
5. **Performance:** Monitor performance with large datasets (thousands of bookmarks).
|
|
||||||
6. **Testing:** Add automated tests for the geohash coverage and retry logic.
|
|
||||||
|
|
||||||
## Technical Constraints
|
## Technical Constraints
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user