diff --git a/docs/pm-analysis.md b/docs/pm-analysis.md new file mode 100644 index 0000000..96584dc --- /dev/null +++ b/docs/pm-analysis.md @@ -0,0 +1,161 @@ +# PM Analysis — What to Build (and What to Skip) + +*Role: Senior Product Manager. Audience: one solo traveler (Mischa), platform: Grav CMS flat-file PHP, no native app.* + +--- + +## Starting position + +Polarsteps and FindPenguins are native mobile apps built around: +1. Background GPS tracking (requires OS-level access) +2. Social networks (followers, discovery, comments) +3. App-side video/reel processing + +**None of these three pillars are reproducible in a web CMS.** Any plan that tries to replicate them wholesale is delusional. What we can do is cherry-pick the *outputs* — the things those apps display to readers — and build them into the blog in ways that add real value to both Mischa (the poster) and readers (friends/family following along). + +--- + +## Feature-by-Feature Audit + +| Feature | Makes sense solo? | Buildable in Grav+JS? | Value to readers? | Worth the cost? | Decision | +|---|---|---|---|---|---| +| Auto background GPS tracking | No — posting manually anyway | No — requires native app | — | — | **SKIP** | +| Interactive map of visited locations | Yes | Yes — Leaflet.js + frontmatter lat/lng | High | High | **BUILD** | +| Route line on map between entries | Yes | Yes — connect entry coords in order | High | Medium | **BUILD** | +| Entry location name (city, country) | Yes | Yes — manual input on form | High | Low | **BUILD** | +| Weather metadata per entry | Yes | Yes — Open-Meteo free API, no key needed | Medium | Medium | **BUILD** | +| Photo gallery per entry | Yes | Yes — shortcode-gallery-plusplus installed | High | Low | **BUILD** (already partial) | +| Hero image on feed cards | Yes | Yes — already in frontmatter | High | Low | **BUILD** | +| Trip statistics page | Yes | Yes — compute from frontmatter | Medium | Low | **BUILD** | +| Countries visited world map | Yes | Yes — highlight SVG or Leaflet layers | Medium | Medium | **BUILD** | +| Follower system | No — solo blog | Would need auth + DB | None | — | **SKIP** | +| Comments on entries | No — spam risk, no community | Would need plugin + moderation | Minimal | — | **SKIP** | +| Social discovery / explore | No — not a platform | Would need indexing infrastructure | None | — | **SKIP** | +| Group trip / travel buddies | No — solo trip | — | — | — | **SKIP** | +| Reactions / likes | No | — | — | — | **SKIP** | +| 3D flyover video | No — proprietary pipeline | No | Nice | — | **SKIP** | +| Trip reels / short video | No — app-side processing | No | Nice | — | **SKIP** | +| Travel book / print | No — out of scope | No | — | — | **SKIP** | +| AI itinerary builder | No — trip already started | No | — | — | **SKIP** | +| Flight detection | No — requires native app sensors | No | — | — | **SKIP** | +| Delayed sharing / live location | No — blog posts after the fact | Irrelevant | — | — | **SKIP** | +| Offline posting | Already works | Already works (Grav form offline) | — | — | **ALREADY EXISTS** | +| Scheduled / draft posts | Already exists | Already exists (publish_date) | — | — | **ALREADY EXISTS** | +| Step suggestions / nudges | No — push notifications not possible | No | — | — | **SKIP** | +| Eebook / export | No — out of scope | Possible but niche | — | — | **SKIP** | + +--- + +## What to Build — Summary + +### Keep (already exists, just needs to work reliably) +- Login-gated mobile posting form ✓ +- Draft and scheduled publishing ✓ + +### Build + +**1. Entry enrichment** — make each entry richer with zero extra effort from Mischa: +- Location name (city, country) captured at post time +- Weather auto-fetched via Open-Meteo at post time using lat/lng +- Photos displayed in a proper gallery (lightbox) +- Hero image shown on feed card + +**2. Interactive map** — the single most "Polarsteps-like" thing that's genuinely achievable: +- `/map` page with Leaflet.js +- Marker per entry (lat/lng from frontmatter) +- Route line connecting entries in date order +- Popup with title, date, thumbnail, link to entry +- Mobile-friendly (touch pan/zoom) + +**3. Trip statistics** — a simple stats page: +- Days on the road (count of entries with distinct dates) +- Entries posted +- Countries/regions visited (derived from location name field) +- Approx distance traveled (sum of haversine distances between GPS points) + +--- + +## What to Skip — with reasons + +| Feature | Reason skipped | +|---|---| +| Background GPS tracking | Requires native app. Grav runs on a server. | +| Social features (followers, comments, likes) | Adds spam risk, moderation burden, zero value for a solo travel blog with a personal audience. A "share link" is enough. | +| Video reels | App-side video processing pipeline, not available in a web CMS. | +| 3D flyover | Proprietary rendering. Not worth building from scratch. | +| Travel book printing | Out of scope. Mischa can use Polarsteps or FindPenguins for this if desired. | +| AI itinerary builder | Trip is already in progress. Out of scope. | +| Discovery / explore | Not a platform. No community. | +| Group trips | Solo traveler. | +| Flight detection | Requires native OS sensor access. | +| Delayed sharing | Moot — we don't broadcast real-time location at all. | + +--- + +## Milestone Plan + +### Milestone 1 — Entry Enrichment (2–3 days) +**Goal:** Every entry is richer out of the box — photo gallery works, location name shown, weather captured, hero image on feed. + +Features: +- Location name field (city + country) added to post form and displayed on entries/cards +- Weather auto-fetch on post form (JS call to Open-Meteo using entered lat/lng, fills hidden fields) +- Weather displayed on entry page +- Photo gallery working (shortcode-gallery-plusplus or native media display) +- Hero image shown on tracker feed cards + +**Value:** Immediate. Makes each entry feel like a real travel log entry, not just a text post. + +--- + +### Milestone 2 — Interactive Map (2–3 days) +**Goal:** A `/map` page shows all entries as markers on an interactive Leaflet.js map, connected by a route line, with popups. + +Features: +- New `map` page and template +- Leaflet.js loaded from CDN (no build step) +- Entries serialized to JSON in the template (lat/lng, title, date, url, hero_image) +- Route polyline in chronological order +- Marker popup: date, title, thumbnail, "Read entry →" link +- Map added to site navigation + +**Value:** High for readers — gives a bird's-eye view of the trip. The single most compelling "where is Mischa?" feature. + +--- + +### Milestone 3 — Statistics Page (1–2 days) +**Goal:** A `/stats` page with key trip numbers. + +Features: +- Days on the road (first entry date to today) +- Total entries posted +- Unique countries visited (derived from location names) +- Approximate distance traveled (haversine between consecutive entry GPS points) +- Simple, scannable layout — no charts needed for v1 + +**Value:** Medium — nice context for readers, satisfying for Mischa to see progress. + +--- + +### Milestone 4 — Map on Tracker Feed (1 day) +**Goal:** A mini-map showing recent positions above or alongside the feed, so the first thing readers see is "where is Mischa now?" + +Features: +- Small embedded Leaflet map on the tracker/feed page +- Shows last 10 entries as markers, with the most recent highlighted +- Route line between them +- Tapping a marker opens the entry + +**Value:** Medium — gives context to the feed without navigating away. Nice "current location" feel. + +--- + +## Milestone Priority Order + +**M1 first** — entry quality affects every post Mischa makes from day 1 of the trip. Get this right immediately. + +**M2 second** — the map is the headline feature that makes this feel like a Polarsteps-style blog. Technically independent from M1 (uses lat/lng already in frontmatter). + +**M3 third** — stats are a nice-to-have. Easy to add once M1 and M2 are stable. + +**M4 fourth** — the mini-map on the feed is polish. Only worth doing once the full map (M2) is solid.