Files
intotheeast-com/docs/guides/posting.md
T
m038andClaude Opus 5 ed6e43ae51 docs: trim CLAUDE.md 305->179 lines; extract code descriptions to docs/
CLAUDE.md is loaded into context on every request, so every line has a
recurring cost. Applies one rule to decide what earns its place: keep what
changes behaviour (rules and gotchas Claude cannot discover before it acts);
extract what merely describes code (Claude reads the code anyway, and prose
about code silently drifts).

The four stale facts fixed in the previous commit were all in the
"describes code" class -- active_trip, the Admin2 version, demo-load's
scope, the gitignore list. None were rules. That is the argument for moving
this material next to what it documents.

Extracted (kept as pointers):
- entry-map + trip-feed-col parameter contracts (56 lines) -> reference/
  architecture.md "Shared partial contracts". CLAUDE.md keeps only the
  invariants: single map path, must assign window.tripMap/homeMap, keep
  trip-feed-col single-purpose, initTripStats depends on MapUtils.
- Prod override runbook (49 -> 9 lines) -> guides/deploy-cycle.md "The env
  override tree", incl. the Twig dev/prod table and WEB_HOST. CLAUDE.md
  keeps the two behavioural rules: never commit prod values, and Admin on
  the server writes to the env tree (so check both config paths, env wins).
- GPX API routes, session auth and the Blob/FormData upload gotcha ->
  guides/gpx-manager.md "How the manager is wired".
- Trip-switch procedure -> guides/trip-switching.md. CLAUDE.md keeps the
  one rule that matters: never re-add pageconfig.parent to post-form.md.
- Also trimmed the dev-command table and custom-plugin table added in the
  previous commit; both largely restated the Makefile and blueprints.

Fixed the guides being pointed into, so the pointers lead to truth:
- trip-switching.md instructed editing a pageconfig.parent that no longer
  exists -- its whole "two files must be updated together" premise was
  obsolete and would have reintroduced the desync it warned about.
- architecture.md: Grav 2.0.4->2.0.7, Admin2 2.0.10->2.0.12, corrected the
  posting pipeline to show cache-on-save injecting parent before the write,
  added entry-actions to the custom-plugin list.
- japan-korea-2026 -> denmark-2026 across guides/reference (docs/solutions
  keeps its historical references intact -- those are incident records).

Verified: every markdown link resolves, every referenced section heading
exists, and each extracted item was confirmed present in its new home.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-24 20:55:28 +02:00

4.3 KiB

Posting a Journal Entry

Two ways to post: the mobile form at /post (quick, phone-friendly) or the Admin panel at /admin (drafts, scheduling, editing).


Quick start — mobile form

  1. Open /post on your phone (login required)
  2. Fill in Title and Content (required)
  3. Tap Get Location → fills Lat/Lng automatically
  4. Tap Get Weather → fills weather fields using your coordinates
  5. Type City and Country (optional but nice)
  6. Attach photos (optional) — first photo becomes the hero image
  7. Tap Submit → entry appears in the feed immediately

Form fields reference

Field Required Notes
Title Entry headline
Content Markdown body
Date Defaults to now — adjust if posting later
Lat / Lng Filled by Get Location; used for map marker
City Shown as 📍 Kyoto, Japan on feed cards
Country Combined with City in location badge
Weather Filled by Get Weather (Open-Meteo, free, no key)
Photos All uploaded files appear in the gallery; first = hero

Weather descriptions (must be one of these if entered manually): Sunny · Partly cloudy · Cloudy · Foggy · Drizzle · Rain · Snow · Thunderstorm


How it works (for debugging)

Browser → /post (post-form.md)
         └─ Grav Form plugin validates fields
         └─ cache-on-save injects parent from site.active_trip
         └─ add-page-by-form plugin
              ├─ writes user/pages/01.trips/<active_trip>/01.dailies/<slug>/entry.md
              └─ moves uploaded photos into the page folder
         └─ cache-on-save plugin
              └─ calls $grav['cache']->deleteAll() → entry visible immediately
         └─ form shows success message

Slug format: <YYYY-MM-DD-HHmm>-<slugified-title>.entry Example: 2026-07-20-0930-first-day-in-kyoto.entry

Entry folder structure:

user/pages/01.trips/denmark-2026/01.dailies/
└─ 2026-07-20-0930-first-day-in-kyoto.entry/
   ├─ entry.md       ← frontmatter + markdown body
   ├─ temple.jpg     ← hero image (or set hero_image in frontmatter)
   └─ market.jpg     ← additional gallery image

Admin panel — drafts and scheduling

Use the Admin panel at /admin for drafts, scheduled posts, or editing existing entries.

  1. Log in at /admin
  2. Pages → Add Page
  3. Set Parent Page to /trips/<active_trip>/dailies and Template to entry
  4. Fill in the Entry tab (city, country, lat/lng, weather)
  5. Write content in the Content tab
  6. Upload photos in the Media tab
  7. Drafts: set published: false — won't appear until you flip it to true
  8. Scheduling: set publish_date in Options → Scheduling
  9. Save

The Admin form fields are defined by user/themes/intotheeast/blueprints/entry.yaml.


Frontmatter reference

Every entry supports these frontmatter fields:

Field Type Notes
title string Required
date datetime Format: Y-m-d H:i (e.g. 2026-06-17 10:00)
template string Always entry
published bool true to show in feed
lat string Decimal degrees (e.g. 52.3676)
lng string Decimal degrees (e.g. 4.9041)
location_city string e.g. Kyoto
location_country string e.g. Japan
weather_desc string One of the allowed values above
weather_temp_c number Celsius, displayed rounded
hero_image string Filename to pin as hero (e.g. temple.jpg); auto-selects first image if blank

Troubleshooting

Entry doesn't appear in feed after submit → Check active_trip in user/config/site.yaml — the write target is derived from it at submit time, so a wrong value sends entries to the wrong trip's dailies. See trip switching guide.

Get Weather button shows an error → Fill in Lat/Lng first (tap Get Location or enter manually). Open-Meteo requires coordinates.

Photos not showing in gallery → Verify files were uploaded (check the entry folder in Admin → Media). Only jpg, jpeg, png, webp, gif are rendered.

500 error after posting → Run make fix-perms to restore container file ownership.