7.4 KiB
artifact_contract, artifact_readiness, product_contract_source
| artifact_contract | artifact_readiness | product_contract_source |
|---|---|---|
| ce-unified-plan/v1 | requirements-only | ce-brainstorm |
Standalone Sub-Page Cleanup — retire redundant map/stats/dailies/stories pages
Status: 🔄 In progress — Phase 1 + 1.5 (title alignment) + Phase 2 (entry-map partial) complete (2026-07-04, pushed to production). Discovered Phase-1 test debt: ~13 Playwright tests across 7 specs still target the deleted standalone views — cleanup pending owner decision.
Plan type:
refactor· Depth: Standard · Origin: sequel to2026-06-27-map-init-consolidation.md— that plan unified the map engine (MapUtils.initEntryMap()) onto trip + home but deferredfeed-map/map.html; this plan removes those deferred surfaces entirely.
Summary
Every trip carries four standalone sub-pages — 02.map, 03.stats, plus the standalone dailies and stories list views — that are fully consolidated onto the trip page (inline map + filter bar + inline stats via trip-feed-col) and are no longer reachable from navigation. They are also the last consumers of the old map code path: feed-map.html.twig hand-rolls an inline MapLibre init that duplicates MapUtils.initEntryMap(), and map.html.twig is a third variant built on renderGpxJourney directly.
This plan removes the dead pages/logic (Phase 1) and then finishes the shared-logic arc by de-duplicating the map markup that trip and home still copy-paste (Phase 2).
Net effect after both phases: the entire site renders maps through exactly one code path (initEntryMap()), invoked from exactly one shared partial.
Goal
- Remove unused pages and view logic so the codebase has no orphaned templates or dead map variants.
- Preserve all content and all currently-linked behavior — this is a pure internal cleanup, no user-visible feature change on the pages that remain.
- Converge on a single map code path.
Product authority / decisions locked
- Scope = Option 2 (all four standalone views retired), confirmed by owner.
- Keepers — must not break:
home.html.twig,trips.html.twig(trip overview),trip.html.twig,story.html.twig, and every shared element they use (trip-feed-col,home-predeparture,macros/stats,macros/cycling,macros/date-range,map.css,map.js). - Containers stay:
01.dailies/and04.stories/folders remain as data containers (they physically hold entries/stories; trip + home fetch children viagrav.pages.find(route ~ '/dailies').children). - Old URLs are don't-care:
/map,/stats,/dailies,/storiesdirect hits may 404. No redirects required (owner decision). Individual entry/story detail pages underneath remain reachable.
Phase 1 — Cleanup (content + logic + old templates)
Delete these page templates (old / unreachable views):
user/themes/intotheeast/templates/map.html.twig— old map variant (renderGpxJourneyinline)user/themes/intotheeast/templates/stats.html.twig— orphaned (nothing links to it)user/themes/intotheeast/templates/dailies.html.twig— standalone list view, consolidated onto trip pageuser/themes/intotheeast/templates/stories.html.twig— standalone list view, consolidated onto trip page
Delete this partial (dies with its only two consumers):
user/themes/intotheeast/templates/partials/feed-map.html.twig— old inline-script map duplicate; included only by the two deleted list views.
Delete these page folders (empty pure-view shells) across every trip:
user/pages/01.trips/<slug>/02.map/user/pages/01.trips/<slug>/03.stats/- (applies to all trips:
central-asia-2023,italy-2025,italy-2026-demo,slovenia-2024,us-canada-mex-2024)
Repoint the two container pages so nothing errors (keep the folders, retire the view):
01.dailies/dailies.mdand04.stories/stories.md: changetemplate:off the deleted templates (e.g. todefault), and mark the container non-routable/non-visible so its own URL is inert while children stay reachable.
Also update / remove any dangling reference to the deleted pages found during work (e.g. the link_href: … ~ '/map' line lived inside dailies.html.twig, which is being deleted — confirm no other template links to /map, /stats, /dailies, /stories as a destination).
Phase 1 acceptance criteria
- Site renders with no Twig errors on: home (active-trip + between-trips),
/trips, every trip page, and an individual entry and story detail page. - Trip page + home still show the inline map, filter bar, and stats correctly (child-fetch via
find(...).childrenstill resolves). grepforfeed-map.html.twig,map.html.twig,stats.html.twig,dailies.html.twig,stories.html.twigreturns no remaininginclude/import/link references.- No content lost: journal entries and stories still present and reachable at their detail URLs.
- Only one non-
initEntryMapmap path removed — confirmmap.css/map.jsandmacros/statsare untouched.
Phase 2 — Optimization (finish the shared-logic arc)
trip.html.twig and home.html.twig still hand-write near-identical map markup (home-map-col → home-map/trip-map div → fullscreen button) plus a thin inline <script> calling MapUtils.initEntryMap(...). Extract the shared shape.
- Create
user/themes/intotheeast/templates/partials/entry-map.html.twigtaking parameters for: container id, fullscreen button id, entries array, and gpx config (urls / use / autoconnect / sourcePrefix / journeyId), plus the fit config. trip.html.twigandhome.html.twig(active branch) both{% include … with {…} only %}the new partial instead of their inline markup + script.- Keep the JS engine (
initEntryMap) as the single source of truth — the partial only supplies markup + the thin invocation.
Phase 2 acceptance criteria
- Trip and home maps render and behave identically to pre-Phase-2 (markers, popups, click-to-scroll-and-highlight, GPX journey, fullscreen toggle).
- The map-div markup + invocation exist in exactly one place (
entry-map.html.twig); no copy-paste twin remains in trip/home. - Existing map-alignment tests (that assert
window.tripMap/window.homeMapglobals) still pass.
Non-goals / scope boundaries
- Not deleting the
01.dailies/or04.stories/container folders or any content inside them. - Not adding redirects for old URLs (owner deferred; 404 is acceptable).
- Not touching the keeper pages' behavior or the
trip-feed-col/home-predeparturepartials, the stats/cycling macros, ormap.css/map.js. - Not changing the GPX-manager, post form, or trip-switching config.
Risks & verification
- Risk: container repoint leaves child entries unreachable. Mitigation: verify
routable: falseon a parent does not unroute children in this Grav version — load an entry and a story detail URL after the change. - Risk: a stray reference to a deleted template elsewhere (e.g.
trips.html.twigcounts, sitemap, feed). Mitigation: repo-wide grep before declaring Phase 1 done (acceptance criterion above). - Verification path: dev server at
http://localhost:8081; walk home (both modes),/trips, each trip, one entry, one story; then run the map-alignment test suite for Phase 2.
Open questions
- None blocking. (Container repoint mechanism —
routable:falsevs a minimal redirect — is an implementation detail for planning; owner has already ruled old-URL behavior don't-care.)