diff --git a/docs/working/plans/2026-07-04-journal-post-form.md b/docs/working/plans/2026-07-04-journal-post-form.md new file mode 100644 index 0000000..2b177c7 --- /dev/null +++ b/docs/working/plans/2026-07-04-journal-post-form.md @@ -0,0 +1,344 @@ +--- +artifact_contract: ce-unified-plan/v1 +artifact_readiness: implementation-ready +product_contract_source: ce-brainstorm +title: Journal Post Form Improvements - Plan +type: feat +date: 2026-07-04 +execution: code +--- + +# Journal Post Form Improvements β€” Plan + +**Status:** πŸ“‹ Not started + +> Plan type: `feat` Β· Depth: Deep β€” feature Β· Origin: `/ce-brainstorm` "improve the current php plugin that allows me to add a new journal page to the current active trip" (2026-07-04) + +**Product Contract preservation:** Product Contract unchanged. Planning enriches this artifact in place β€” Requirements R1–R20, Key Flows, and Acceptance Examples are carried verbatim from the brainstorm. + +--- + +## Goal Capsule + +- **Objective:** Redesign the frontend `/post` journal form so a daily entry can be posted end-to-end from an iPhone β€” auto-targeting the active trip, exposing every entry field, loading a light markdown editor, converting HEIC photos in the browser, and matching the Field Notes design system. +- **Authority hierarchy:** This plan's Requirements (R1–R20) and the three resolved Key Technical Decisions govern. Where an implementation detail is unspecified, follow existing repo conventions (esbuild bundle, Playwright suite, plugin structure). `CLAUDE.md` project rules override everything (only write inside `travel-blog-intotheeast/`; `user/` is a standalone repo; never read `.env`; use `make` for remote ops). +- **Stop conditions:** Stop and surface if (a) intercepting Grav's managed FilePond instance for HEIC conversion proves infeasible without replacing the field type (U4 is the load-bearing risk), or (b) any change would require a server-side image pipeline or Docker rebuild β€” that path is explicitly deferred. +- **Execution profile:** Frontend-weighted. One PHP handler (U1); the rest is form blueprint, Twig, an esbuild bundle with two new npm deps, and CSS. Dev server at `http://localhost:8081`; rebuild JS with `make build-assets` (never hand-edit `js/main.js`). +- **Tail ownership:** Verify with `make test` (config + post + Playwright UI) and manual dev-server walkthrough on a narrow viewport. + +--- + +## Product Contract + +### Summary + +Redesign the frontend `/post` journal form to auto-target the active trip, expose every entry-blueprint field (core visible, advanced behind "More options"), load a light markdown editor, convert iPhone HEIC photos to JPEG in the browser, and match the site's Field Notes design system β€” all behind the existing site login, optimised for posting from an iPhone during a trip. + +### Problem Frame + +Posting a daily entry today has five rough edges. The parent trip is hardcoded in `user/pages/02.post/post-form.md` (`pageconfig.parent`) and must be kept in sync by hand with `site.active_trip`; forgetting on a trip switch silently files entries under the wrong trip. The form exposes only a subset of the entry blueprint, so `transport_mode`, `hero_image`, `force_connect`, `featured`, and a proper weather-condition picker are unreachable without opening Admin2. The content field is a bare `