Commit Graph
100 Commits
Author SHA1 Message Date
m038andClaude Sonnet 4.6 e9cd9c5946 docs: add homepage redesign implementation plan
3-task plan: blueprints/config, active-trip GPX on home map,
between-trips highlights grid with Playwright tests H2–H5 and M8.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-21 01:32:47 +02:00
m038andClaude Sonnet 4.6 3d9aa306dc docs: add homepage redesign spec
Covers dual-mode homepage (active trip vs between-trips highlights),
persistent map with GPX in active mode, featured flag on entries/stories,
tagline field on trips, and Admin2 site config blueprint.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-21 01:18:43 +02:00
m038andClaude Sonnet 4.6 a1dbc2ea34 docs: add story editing research note
Records brainstorming findings: Snow Fall block vocabulary, 15 options
evaluated, Admin2 JS injection blocker, Grav vs Keystatic comparison.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 23:25:40 +02:00
m038andClaude Sonnet 4.6 b9e0e39402 fix: make demo-load writable, fix photo strip a11y, fix M7 marker click
- Makefile: add chown 1000:1000 after demo-load so Grav can create entries
- Makefile: add collection config to demo dailies.md (page.collection() needs it)
- base.html.twig: add tabindex="0" to journal-photo-strip for keyboard access (AX1-AX3)
- maps.spec.js: use force:true on M7 marker click (start/end overlap at Campiglia)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 22:12:33 +02:00
m038andClaude Sonnet 4.6 9c2177600c test: switch all test fixtures from japan-korea-2026 to italy-2026-demo
- Replace all japan-korea-2026 URL references in test files
- dailies.spec.js: update KNOWN_SLUG/TITLE/CITY/COUNTRY to first campiglia entry
- accessibility.spec.js: update AX4 entry URL to campiglia entry
- helpers.js: update TRACKER_DIR to italy-2026-demo dailies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 22:00:45 +02:00
m038andClaude Sonnet 4.6 1588902dd3 docs: fix demo-reset description in CLAUDE.md (removes full trip folder)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 21:45:55 +02:00
m038 26c91fcc38 test(stories): update story slugs to match new demo content 2026-06-20 21:18:08 +02:00
m038 cdd9e0c8b3 docs: update demo-load description in CLAUDE.md
Reflects that demo now targets a single trip (italy-2026-demo / Tuscany 2026)
rather than the old Japan/Korea 2026 + Italy 2025 pair.
2026-06-20 21:15:21 +02:00
m038andClaude Sonnet 4.6 acdf3edb3d docs: add demo data redesign implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 21:08:08 +02:00
m038 d13e4dffb8 test(a11y): add A3e-A3f cycling toggle aria-expanded tests (italy-2026-demo) 2026-06-20 20:57:46 +02:00
m038 5cfd3a8d85 feat(a11y): add axe-core WCAG 2.1 AA regression scans (AX1-AX5) and fix active filter button contrast 2026-06-20 20:49:33 +02:00
m038andClaude Sonnet 4.6 d9f99af1cb docs: add demo data redesign spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 20:44:05 +02:00
m038 c973bf0ab3 fix(a11y): update user submodule pointer to include GPX aria-label fix 2026-06-20 20:40:43 +02:00
m038 49e983e804 test(a11y): add A5 GPX delete button accessible name test 2026-06-20 20:36:48 +02:00
m038 6d771855ee test(a11y): add A4a-A4b photo strip keyboard tests 2026-06-20 20:32:15 +02:00
m038 54180321be test(a11y): add A3a-A3d aria-pressed and aria-expanded tests 2026-06-20 20:27:50 +02:00
m038 0db4ea9496 test(a11y): add A2 color contrast token test 2026-06-20 20:23:05 +02:00
m038 1e28081b31 test(a11y): add A1 skip link test 2026-06-20 20:19:30 +02:00
m038andClaude Sonnet 4.6 f63912d874 docs: add WCAG 2.1 AA accessibility audit implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 20:06:44 +02:00
m038 6135a680fe docs: mark maplibre-migration and story-mode plans complete 2026-06-20 20:02:39 +02:00
m038 cf03eebb72 docs: mark dark-mode plan complete 2026-06-20 20:01:38 +02:00
m038 d6a7a8c3df docs: mark stats-redesign plan complete 2026-06-20 20:00:54 +02:00
m038 8f5ad0dae9 docs: mark inline-journal-feed plan complete 2026-06-20 19:58:49 +02:00
m038andClaude Sonnet 4.6 3f8004da48 docs: add WCAG 2.1 AA accessibility audit design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 19:57:06 +02:00
m038 9e55925169 docs: mark ui-ux-alignment plan complete 2026-06-20 19:56:11 +02:00
m038 9e1950c960 feat: story map markers and flash highlight for story cards 2026-06-20 19:53:59 +02:00
m038 b5e27e68e6 feat: AI titles for 36 Pixelfed entries 2026-06-20 18:38:32 +02:00
m038 069d6d05a2 fix: skip P2 photo-upload test (parked); restore all system media types in media.yaml 2026-06-20 18:31:53 +02:00
m038 75dd3ff970 perf: skip hero media lookup for journal entries (all 3 feed templates) 2026-06-20 18:27:49 +02:00
m038andClaude Sonnet 4.6 0729e4ea1d fix: update tests for demo reorganisation (italy-2026-demo, central-asia ordering, japan real entry)
- dailies T2: switch ordering test to central-asia-2023 (pixelfed-1 oldest, pixelfed-22 newest)
- dailies T3-T6: update KNOWN_SLUG/TITLE/CITY/COUNTRY to the real japan entry (2026-06-17)
- stories S1-S7: update all italy-2025 URLs to italy-2026-demo
- stories S5/S6: fix URL regex and use val-dorcia-dawn for hero sanity check
- maps M5/M6: point Italy GPX map tests to italy-2026-demo (has markers + GPX)
- global-setup: run make demo-load before tests so italy-2026-demo always exists
- post P2: add retries:1 + test.setTimeout(60s) for intermittent FilePond upload
- user: story template hero fallback for media.types config override (see user commit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 16:31:37 +02:00
m038 9cb1b3cb3a chore: update user submodule (sort comment in dailies) 2026-06-20 15:47:44 +02:00
m038 36817676ea fix: recover missing pixelfed-1 Northern America entry; remove unused timezone import 2026-06-20 15:42:22 +02:00
m038 2a8781d970 test: add H1 home page journal-post test 2026-06-20 15:34:33 +02:00
m038andClaude Sonnet 4.6 ed005bae14 feat: add pixelfed-import script and make target
Copies JSON export + script into Docker container and runs import via
python3; installs python3 if absent. Idempotent (skips existing folders).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 15:32:56 +02:00
m038andClaude Sonnet 4.6 3c4ec0b79b chore: update demo-load/demo-reset for italy-2026-demo; retire japan demo
Rewire demo targets to use docker exec for file ops (user/ is owned by
http), point to the new italy-2026-demo source, and reduce demo-reset
to a single rm -rf of the demo trip directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-20 15:18:42 +02:00
m038 0339529f44 test: add map animation wait in M7 for marker stability on heavier trip page 2026-06-20 15:16:35 +02:00
m038 fb3a656db5 docs: add Pixelfed import implementation plan 2026-06-20 15:07:37 +02:00
m038 9402594eb8 test: update M7 selector for journal-post.is-highlighted 2026-06-20 15:04:12 +02:00
m038 da1b9f0e93 docs: add Pixelfed import and demo reorganisation design spec 2026-06-20 14:58:14 +02:00
m038 b3ceb4a8f7 test: update T1/T2 selectors for inline journal-post structure 2026-06-20 14:50:30 +02:00
m038 69820fe1cb chore: update user submodule (Task 1: journal-post CSS + dot-sync JS) 2026-06-20 14:32:07 +02:00
m038 f4a38c23f6 docs: add inline journal feed implementation plan 2026-06-20 14:23:01 +02:00
m038 c0c4fe2622 docs: add inline journal feed design spec 2026-06-20 14:15:19 +02:00
m038 55bfec30f5 fix: remove redundant background declaration from .trip-card:hover 2026-06-20 12:53:34 +02:00
m038 e7b60c0c4c test: add M7 test for map marker flash highlight on card + integrate user submodule update 2026-06-20 12:47:56 +02:00
m038 208cd224ad fix: apply flat entry-card structure to home.html.twig 2026-06-20 12:44:15 +02:00
m038 baeca605f6 fix: add missing data-type to dailies entry cards 2026-06-20 12:41:13 +02:00
m038andClaude Sonnet 4.6 c2ea985546 refactor: collapse entry card article+a to flat <a>, unify hover targets across card types
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 12:38:35 +02:00
m038 4d87f8fef2 test: add T6 test for entry page back pills; feat: add fixed back pill and update footer 2026-06-20 12:31:16 +02:00
m038andClaude Sonnet 4.6 58e84afebd feat: add S7 test for story footer back-pill styling
Add Playwright test S7 to verify that the story footer back link
renders with the .back-pill class for consistent design system styling.
This test scrolls past the hero to reveal the footer and checks both
class presence and text content.

Also update user submodule pointer to include the back-pill application.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 12:23:57 +02:00
m038 ab85ce2f79 chore: update user submodule to CSS changes (Task 1: back-pill, card hover lift, flash keyframe) 2026-06-20 12:20:17 +02:00
m038 41dc3dbeea docs: add UI/UX alignment implementation plan 2026-06-20 12:08:34 +02:00
m038 ce7549cef1 docs: remove incorrect dark mode out-of-scope note from UI alignment spec 2026-06-20 11:56:02 +02:00
m038 f0c8ce3137 docs: add UI/UX alignment design spec (back pills, card hover, map flash) 2026-06-20 11:53:51 +02:00
m038 6d20e0fedc test: add S1–S6 Playwright tests for story mode (listing, shortcodes, back nav, cross-trip) 2026-06-20 10:13:56 +02:00
m038 832e135e3a fix: correct stale G1-G4 comment to G1-G5 in gpx-journey spec 2026-06-20 00:54:06 +02:00
m038 0b49f90206 test: add M5–M6 integration tests for GPX connector logic 2026-06-20 00:50:19 +02:00
m038andClaude Sonnet 4.6 5a52b8ff18 test: add Playwright tests G1-G5 for buildJourneySegments algorithm
Tests load italy-2025 map page to get MapUtils in scope, then exercise the
GPX proximity algorithm with synthetic data via page.evaluate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WPJztrVGbwic2xTG7G9fjM
2026-06-20 00:39:45 +02:00
m038 2efdfbebb7 docs: add GPX connector logic implementation plan 2026-06-20 00:24:32 +02:00
m038 dfdb4d5ac3 docs: add GPX connector logic design spec 2026-06-20 00:15:10 +02:00
m038andClaude Sonnet 4.6 50b64fbcb3 build: add Italy 2025 stories folder to demo-load target
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-19 23:44:18 +02:00
m038 640016c54f docs: add Tuscany demo stories implementation plan 2026-06-19 23:34:38 +02:00
m038 64dbcefd9b docs: add Tuscany demo stories design spec (3 story composition showcases) 2026-06-19 23:30:59 +02:00
m038andClaude Sonnet 4.6 3fbba7672d test: fix M2 timing — wait for first marker before counting
Markers are added in map.on('load') which fires after the canvas
becomes visible; the old check was racy. Add an explicit waitFor
so M2 reliably passes with demo data loaded.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-19 23:17:05 +02:00
m038 6c378d77ca build: add story folder to demo-load and demo-reset targets 2026-06-19 23:04:14 +02:00
m038andClaude Sonnet 4.6 7602b135f8 docs: add stats redesign spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RB86BaJBG3eGiMdfhmHRrQ
2026-06-19 22:31:33 +02:00
m038 46c33837ba docs: add dev server port and trip page filter bar notes to CLAUDE.md 2026-06-19 21:56:03 +02:00
m038andClaude Sonnet 4.6 b1ec642d60 test: add MapLibre canvas tests (M1–M4), skip N5 (map nav link disabled)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7CzY4z2Qm5sYE2nySRWuH
2026-06-19 21:52:38 +02:00
m038 28dc6c1f6c test: add F1–F7 Playwright tests for trip page filter bar and stats toggle 2026-06-19 21:51:13 +02:00
m038 3c35176b90 test: update N4 — filter bar replaces trip nav link to dailies 2026-06-19 21:50:41 +02:00
m038 5e864b0c03 docs: add trip page filter bar implementation plan 2026-06-19 21:24:19 +02:00
m038 c9ce336b18 docs: add trip page filter bar design spec 2026-06-19 21:20:55 +02:00
m038andClaude Sonnet 4.6 e329cd4ad2 docs: update trip-switching checklist — home.alias is now permanent /home
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RB86BaJBG3eGiMdfhmHRrQ
2026-06-19 15:52:46 +02:00
m038 abd953e1f6 docs: add home and trip pages implementation plan 2026-06-19 15:26:03 +02:00
m038 dc8b7f58d2 docs: add home page & content flow design spec 2026-06-19 15:07:10 +02:00
m038 6d54092413 docs: rewrite production todo — fresh install, correct Admin2 gap, ordered steps 2026-06-19 13:26:05 +02:00
m038 ab92f3b469 docs: add production todo list 2026-06-19 13:24:13 +02:00
m038 ae17483ca4 docs: update dark mode plan — CartoDB tiles replace Stadia (no key required) 2026-06-19 13:18:47 +02:00
m038andClaude Sonnet 4.6 e032292c97 docs: update CLAUDE.md, bugs log, and posting pipeline for Grav 2.0 + trip entity
- CLAUDE.md: add Grav 2.0 upgrade method, Admin2 setup, trip entity architecture, updated paths
- bugs-and-fixes.md: fix stale paths, add BUG-004 (Admin2 empty dashboard) and BUG-005 (PHP session path)
- posting-pipeline.md: update paths to trips/dailies structure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 13:11:53 +02:00
m038andClaude Sonnet 4.6 e6eb93cd2c feat: trip entity restructure + Grav 2.0 upgrade
- Switch to getgrav/grav Docker image with GRAV_CHANNEL=beta (Grav 1.7.53)
- Apache runs as host UID 1000; fix-perms target handles container setup
- Rename tracker → dailies throughout (URL slug, templates, tests)
- Trip entity: /trips/<slug>/{dailies,map,stats,stories} hierarchy
- Nav driven by active_trip in site.yaml
- GPX route rendering on map via leaflet-gpx CDN
- Italy 2025 demo trip with real Tuscany GPS routes
- Admin blueprint for trip pages (date range, cover image, album URL)
- Dark mode + visual polish plan ready at docs/superpowers/plans/2026-06-19-dark-mode.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 09:09:19 +02:00
m038 2835d876cc docs: update fix-perms instructions for getgrav/grav image
Replace stale linuxserver.io paths (abc:users, /app/www/public/*)
with current approach: run make fix-perms after plugin install or
container recreation.
2026-06-19 02:01:16 +02:00
m038 2ff31f311b docs: add dark mode implementation plan 2026-06-19 01:59:17 +02:00
m038 0cb109b2a3 docs: add dark mode + visual polish design spec 2026-06-19 01:56:34 +02:00
m038andClaude Sonnet 4.6 5e954d8adf fix: update paths for trips/japan-korea-2026/dailies restructure
- Update post form parent, Makefile demo targets, and test scripts to use
  new trip-scoped paths (01.trips/japan-korea-2026/01.dailies)
- Rename tracker.spec.js → dailies.spec.js and update all /tracker URLs
  to /trips/japan-korea-2026/dailies across nav.spec.js, post.spec.js,
  helpers.js, and dailies.spec.js
- Add Italy 2025 demo trip to Makefile demo-load/demo-reset targets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 01:49:38 +02:00
m038 6926b4084a docs: add trip entity implementation plan 2026-06-19 01:17:05 +02:00
m038andClaude Sonnet 4.6 943026658b fix: make fix-perms idempotent and persistent across container restarts
The getgrav/grav image is Debian-based and has no uid 1000 user,
causing Apache to fail switching to APACHE_RUN_USER=#1000 on restart.
fix-perms now creates the uid 1000 user if absent, sets ownership,
then gracefully reloads Apache workers so they run as uid 1000.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 00:15:56 +02:00
m038andClaude Sonnet 4.6 6702b5d9b6 feat: support GRAV_CHANNEL_SUFFIX for Grav 2.0 RC production install
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 00:14:05 +02:00
m038andClaude Sonnet 4.6 b2f6cb1977 fix: update test-post.sh for Grav 1.7.53 / Login 3.x compatibility
- login-form-nonce replaces form-nonce (Login plugin 3.x)
- task value is login.login not login
- login success check uses form presence, not status code (/post returns
  200 unauthenticated)
- entry discovery searches by title, handles .en.md suffix
- cleanup uses docker exec to remove files owned by www-data

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:41:51 +02:00
m038andClaude Sonnet 4.6 8824f79c64 feat: run Apache as host UID 1000 and add fix-perms target
APACHE_RUN_USER/GROUP=#1000 makes PHP/Apache write files owned by
the host user (mischa) instead of http. fix-perms target in setup
ensures ownership is correct after plugin install.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:34:57 +02:00
m038 9fd349e5ec chore: update .gitignore to allow cache-on-save plugin 2026-06-18 23:18:01 +02:00
m038andClaude Sonnet 4.6 df55917347 feat: switch to getgrav/grav 2.0 RC docker image
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:13:53 +02:00
m038andClaude Sonnet 4.6 6fe066e77d docs: fix plan commit steps for user/ git repo separation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:12:52 +02:00
m038andClaude Sonnet 4.6 b98ae50f30 docs: add Grav 2.0 upgrade implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:05:13 +02:00
m038andClaude Sonnet 4.6 9beb22f4c2 docs: add Grav 2.0 upgrade design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 23:00:02 +02:00
m038 edc232ae83 Merge pull request 'Playwright UI test suite (25 tests)' (#1) from experimental-polar-steps into main
Reviewed-on: #1
2026-06-18 22:41:34 +02:00
m038andClaude Sonnet 4.6 a50e7f5386 feat: add comprehensive Playwright UI test suite
25 tests across auth (A1-A5), posting (P1-P5), validation (V1-V4),
tracker (T1-T5), and nav (N1-N5). Uses storageState for single login
per run. Replaces post-with-photo.spec.js with post.spec.js.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 22:34:11 +02:00
m038 545e3f5ba0 feat: add Playwright UI test for post-with-photo flow 2026-06-18 20:35:17 +02:00
m038 1fa8ff954d fix: increase PHP upload limit to 100M per file, 500M total 2026-06-18 20:26:27 +02:00
m038andClaude Sonnet 4.6 fb28f09e0c test: add form config validator and HTTP integration test
test-config: static YAML validator for post-form.md — checks that the
add-page-by-form action name, pageconfig/pagefrontmatter blocks, and all
required fields are correctly wired. Fast, no server needed. Catches the
class of bug that caused silent post failures.

test-post: end-to-end HTTP test — logs in, submits the form, verifies an
entry.md was created on disk, then cleans up. Requires GRAV_TEST_USER and
GRAV_TEST_PASS in .env (see .env.example).

  make test-config   # fast, no credentials needed
  make test-post     # full e2e, needs .env credentials
  make test          # both

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 19:57:49 +02:00
m038 706d1dee21 fix: raise PHP upload limits to 25M per file for photo uploads 2026-06-18 19:40:49 +02:00