15 Commits

Author SHA1 Message Date
b2b03c0a38 1.8.8 2026-01-26 17:20:49 +07:00
0be02c5b20 Update status doc 2026-01-26 17:06:39 +07:00
653e44348c Fix auto-zoom when focussing form field on iOS 2026-01-26 17:01:29 +07:00
8fdc697a17 1.8.7 2026-01-26 16:46:34 +07:00
d9b2a17b91 Noto serif or no serif 2026-01-26 16:46:07 +07:00
85255318ba 1.8.6 2026-01-26 16:32:43 +07:00
713d9d53e6 Styling optimizations 2026-01-26 16:32:16 +07:00
e0ea0ca988 Prevent mobile Safari from resizing text 2026-01-26 16:23:46 +07:00
3cc2a2649a 1.8.5 2026-01-26 16:17:53 +07:00
924484a191 Set base font size explicitly 2026-01-26 16:16:47 +07:00
b960ba0868 Unify button styles, improve sizing 2026-01-26 16:15:52 +07:00
3b22f8c2f4 1.8.4 2026-01-26 16:03:06 +07:00
1a643e980d Fix location of additional map controls 2026-01-26 16:02:23 +07:00
b085783ad8 1.8.3 2026-01-26 14:58:21 +07:00
245f79d6f4 Change manifest filename
Wrong content type on 5apps
2026-01-26 14:57:36 +07:00
12 changed files with 48 additions and 34 deletions

View File

@@ -1,6 +1,6 @@
# Project Status: Marco
**Last Updated:** Sat Jan 24 2026
**Last Updated:** Mon Jan 26 2026
## Project Context
@@ -21,9 +21,14 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
- **Visuals:** Increased bookmark marker size (Radius 9px) and added a subtle drop shadow.
- **Feedback:** Implemented a "pulse" animation (via OpenLayers Overlay) at the click location to visualize the search radius (30m/50m).
- **Mobile UX:**
- Disabled browser tap highlights (`-webkit-tap-highlight-color: transparent`) to prevent blue flashing on Android.
- Disabled "pull-to-refresh" (`overscroll-behavior: none`) on the body to prevent accidental reloads while keeping the sidebar scrollable (`contain`).
- **Touch:** Disabled browser tap highlights (`-webkit-tap-highlight-color: transparent`) to prevent blue flashing on Android.
- **Scroll:** Disabled "pull-to-refresh" (`overscroll-behavior: none`) on the body to prevent accidental reloads while keeping the sidebar scrollable (`contain`).
- **Auto-Pan:** On mobile screens, if a selected pin is obscured by the bottom sheet, the map automatically pans to center the pin in the visible top half of the screen.
- **Controls:** Fixed positioning of "Locate" and "Rotate" buttons on mobile by correcting CSS `inset` syntax.
- **iOS Polish:**
- Prevented input auto-zoom by ensuring `.form-control` font size is `1rem` (16px).
- Added `-webkit-text-size-adjust: 100%` to prevent text inflation on rotation.
- Set base `body` font size to `16px`.
- **Geolocation ("Locate Me"):**
- Implemented a "Locate Me" button with robust tracking logic.
- **Dynamic Zoom:** Automatically zooms to a level where the accuracy circle covers ~10% of the map (fallback logic handles missing accuracy data).
@@ -44,7 +49,7 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
- configured with `maxAge: false` to ensure data freshness.
- **Dependencies:** Uses `ulid` and `latlon-geohash` internally.
### 3. App Infrastructure
### 3. App Infrastructure & Build
- **Services:**
- `storage.js`: Initializes RemoteStorage, claims access, enables caching, and sets up the widget. Consumes the new `getPlaces` API.
@@ -68,6 +73,11 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
- **Geo Utils:**
- `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.
- **Build & DevOps:**
- **Icon Generation:** Added `build:icons` script using `magick` and `rsvg-convert` to automate PNG generation from SVG.
- **Dependencies:** Documented system requirements (ImageMagick, librsvg) in `README.md`.
- **Ember CLI:** Added as dev dependency to support generator commands.
- **License:** Added AGPLv3 license.
### 4. Routing & Data Optimization
@@ -91,16 +101,17 @@ We are building **Marco**, a decentralized maps application using **Ember.js** (
## Files Currently in Focus
- `app/templates/application.gjs`: Core layout and "Outside Click" logic.
- `app/components/settings-pane.gjs`: Settings UI.
- `app/services/settings.js`: Settings persistence.
- `app/styles/app.css`: Mobile CSS fixes (font sizes, control positioning).
- `package.json`: New scripts and dependencies.
- `README.md`: Updated documentation.
## Next Steps & Pending Tasks
1. **Collections/Lists:** Implement ability to organize bookmarks into lists/collections.
2. **Linting & Code Quality:** Fix remaining CSS errors, remove inline styles in `map.gjs`, and address unused variables/runloop usage.
3. **Performance:** Monitor performance with large datasets (thousands of bookmarks).
4. **Testing:** Add automated tests for the geohash coverage, retry logic, and new editing features.
1. **Mobile Polish:** Verify "Locate Me" animation on iOS Safari.
2. **Collections/Lists:** Implement ability to organize bookmarks into lists/collections.
3. **Linting & Code Quality:** Fix remaining CSS errors, remove inline styles in `map.gjs`, and address unused variables/runloop usage.
4. **Performance:** Monitor performance with large datasets (thousands of bookmarks).
5. **Testing:** Add automated tests for the geohash coverage, retry logic, and new editing features.
## Technical Constraints

View File

@@ -193,8 +193,8 @@ export default class PlaceDetails extends Component {
></textarea>
</div>
<div class="edit-actions">
<button type="submit" class="btn btn-blue btn-sm">Save</button>
<button type="button" class="btn btn-outline btn-sm" {{on "click" this.cancelEditing}}>Cancel</button>
<button type="submit" class="btn btn-blue">Save</button>
<button type="button" class="btn btn-outline" {{on "click" this.cancelEditing}}>Cancel</button>
</div>
</form>
{{else}}

View File

@@ -4,11 +4,13 @@ html,
body {
height: 100%;
overscroll-behavior: none; /* Prevent pull-to-refresh on mobile */
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
font-family: 'Noto Serif', serif;
font-family: 'Noto Serif', sans-serif;
font-size: 16px;
}
#root,
@@ -255,7 +257,7 @@ body {
border: 1px solid #ddd;
border-radius: 4px;
font-family: inherit;
font-size: 0.95rem;
font-size: 1rem;
box-sizing: border-box; /* Ensure padding doesn't overflow width */
}
@@ -319,6 +321,11 @@ body {
font-size: 0.9rem;
}
.meta-info p {
margin-top: 1rem;
margin-bottom: 1rem;
}
.meta-info p:first-child {
margin-top: 1.2rem;
padding-top: 1.2rem;
@@ -426,8 +433,8 @@ body {
margin: 0 0 1rem;
}
.place-details .place-description {
margin-bottom: 1.5rem;
.place-details p.place-description {
line-height: 1.4;
}
.place-details .actions {
@@ -435,24 +442,20 @@ body {
display: flex;
flex-direction: row;
gap: 1rem;
margin-top: 1.5rem;
}
.btn {
padding: 0.75rem 1.5rem;
padding: 0.6rem 1.2rem;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
font-size: 0.9rem;
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.btn-sm {
padding: 0.4rem 1rem !important;
font-size: 0.9rem !important;
}
.btn-outline {
background: transparent;
color: #333;
@@ -533,7 +536,7 @@ body {
}
.ol-touch .ol-control.ol-locate {
inset: auto auto 3.5em;
inset: auto 0.5em 3.5em auto;
}
/* Rotate Control */
@@ -542,7 +545,7 @@ body {
}
.ol-touch .ol-rotate {
inset: auto auto 6em;
inset: auto 0.5em 6em auto;
}
span.icon {

View File

@@ -12,7 +12,7 @@
<meta name="theme-color" content="#333333">
<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.webmanifest">
<link rel="manifest" href="/web-app-manifest.json">
<!-- Icons -->
<link rel="icon" href="/icons/icon.svg" type="image/svg+xml">

View File

@@ -1,6 +1,6 @@
{
"name": "marco",
"version": "1.8.2",
"version": "1.8.8",
"private": true,
"description": "Unhosted maps app",
"repository": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -12,7 +12,7 @@
<meta name="theme-color" content="#333333">
<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.webmanifest">
<link rel="manifest" href="/web-app-manifest.json">
<!-- Icons -->
<link rel="icon" href="/icons/icon.svg" type="image/svg+xml">
@@ -26,8 +26,8 @@
<meta name="msapplication-TileColor" content="#F6E9A6">
<meta name="msapplication-TileImage" content="/icons/icon-144.png">
<script type="module" crossorigin src="/assets/main-UPJ86bLK.js"></script>
<link rel="stylesheet" crossorigin href="/assets/main-BcLOwTwc.css">
<script type="module" crossorigin src="/assets/main-DDLOjoTU.js"></script>
<link rel="stylesheet" crossorigin href="/assets/main-CNGeKCiD.css">
</head>
<body>
</body>