5.7 KiB
Daily Entry Posting Pipeline
Two ways to create a daily entry: the mobile frontend form at /post, or directly from the Grav Admin2 panel. Both produce the same page structure under user/pages/01.trips/<active_trip>/01.dailies/.
The active trip is set in user/config/site.yaml → active_trip. The post form's pageconfig.parent in post-form.md must be kept in sync with this value.
Frontmatter Reference
Every entry page (template: entry) supports these frontmatter fields:
| Field | Type | Required | Notes |
|---|---|---|---|
title |
string | ✅ | Entry headline |
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 tracker feed |
lat |
string | — | Latitude decimal degrees (e.g. 52.3676) |
lng |
string | — | Longitude decimal degrees (e.g. 4.9041) |
location_city |
string | — | City name shown under the title (e.g. Kyoto) |
location_country |
string | — | Country name shown under the title (e.g. Japan) |
weather_desc |
string | — | Condition label — must be one of the values below |
weather_temp_c |
number | — | Temperature in Celsius (displayed rounded, e.g. 19) |
hero_image |
string | — | Filename of the hero image (e.g. photo.jpg). Leave blank to auto-select the first uploaded image. |
weather_desc allowed values (matched to emoji icons in entry.html.twig):
Sunny · Partly cloudy · Cloudy · Foggy · Drizzle · Rain · Snow · Thunderstorm
Page media (photos): images are stored as files in the page folder (user/pages/01.tracker/<slug>/). All images in the folder are shown in the gallery. hero_image pins one as the full-width header.
Example complete frontmatter:
---
title: 'First Day in Kyoto'
date: '2026-07-20 09:30'
template: entry
published: true
lat: '35.0116'
lng: '135.7681'
location_city: 'Kyoto'
location_country: 'Japan'
weather_desc: 'Sunny'
weather_temp_c: 28
hero_image: 'temple.jpg'
---
Flow 1 — Mobile Frontend Form (/post)
This is the primary posting flow, designed for one-handed phone use.
Browser → /post (post-form.md)
└─ Grav Form plugin validates fields
└─ add-page-by-form plugin (onFormProcessed)
├─ reads pageconfig.parent (/trips/japan-korea-2026/dailies) and pageconfig.slug_field (date + title)
├─ reads pagefrontmatter (template: entry, published: true)
├─ merges form field values into new page frontmatter
├─ writes user/pages/01.trips/<active_trip>/01.dailies/<slug>/entry.md
└─ moves uploaded photos into the page folder
└─ cache-on-save plugin (onFormProcessed)
└─ calls $grav['cache']->deleteAll() so tracker feed shows the entry immediately
└─ form shows success message, resets fields
The form fields and their mapping to frontmatter:
| Form field | Frontmatter key | Notes |
|---|---|---|
title |
title |
Required |
date |
date |
Defaults to current datetime |
content |
page body (markdown) | Required |
photos |
page media files | Uploaded to page folder |
lat |
lat |
Filled via "Get Location" button |
lng |
lng |
Filled via "Get Location" button |
location_city |
location_city |
Manual text entry |
location_country |
location_country |
Manual text entry |
weather_temp_c |
weather_temp_c |
Hidden — set by weather JS widget |
weather_desc |
weather_desc |
Hidden — set by weather JS widget |
Slug format: <YYYY-MM-DD>.<slugified-title> (controlled by slug_field: 'date,title' in post-form.md).
Security: the /post page requires access: site.login: true — anonymous visitors get redirected to login.
Flow 2 — Admin Panel (sit-down workflow)
Use this for drafts, scheduled posts, or editing existing entries.
- Log in at
/admin - Go to Pages → Add Page
- Set:
- Page Title: your entry title
- Parent Page:
/trips/japan-korea-2026/dailies(adjust to active trip) - Page Template:
entry
- Fill in the Entry tab fields (city, country, lat/lng, weather)
- Write content in the Content tab
- Upload photos via the Media tab
- Set
published: true(or leavefalsefor a draft) - For scheduling: set
publish_datein Options → Scheduling - Save
The Admin form fields are defined by user/themes/intotheeast/blueprints/entry.yaml.
Drafts: set published: false — the entry won't appear in the tracker feed until you flip it to true. Useful for writing ahead of time on the road.
Scheduling: Grav supports publish_date and unpublish_date in page frontmatter. Set them in the Admin Options tab. Requires pages.publish_dates: true in system.yaml (already enabled).
Page folder structure
user/pages/01.trips/
└─ japan-korea-2026/ ← trip entity (active_trip in site.yaml)
├─ trip.md ← trip page (title, date_start, date_end, cover_image, album_url)
├─ *.gpx ← GPX route files (served as media, rendered on map)
├─ 01.dailies/
│ └─ 2026-07-20-1430-first-day-in-kyoto.entry/
│ ├─ entry.md ← frontmatter + markdown body
│ ├─ temple.jpg ← hero image (referenced by hero_image)
│ └─ market.jpg ← additional gallery image
├─ 02.map/map.md
├─ 03.stats/stats.md
└─ 04.stories/stories.md
The entry folder name follows <YYYY-MM-DD-HHmm>-<slug>.entry. Grav uses this for ordering and routing. The .entry suffix enables the entry template.