--- 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 `