trails/openspec/changes/changelog/design.md
Ullrich Schäfer c7c1c275df
Add 8 proposed changes and old trails analysis
Proposed changes (all with proposal, design, specs, tasks):
- app-navigation (9 tasks) — nav bars for both apps
- planner-landing-page (7 tasks) — standalone landing page
- planner-multiplayer-awareness (13 tasks) — participants, cursors, names
- changelog (13 tasks) — public changelog with "what's new"
- transactional-emails (15 tasks) — magic link + welcome emails
- planner-features (18 tasks) — no-go areas, notes, recovery, rate limits
- komoot-import (23 tasks) — Komoot tour import
- route-features (37 tasks) — sharing, multi-day, spatial, photos

Also adds docs/old-trails-analysis.md with feature analysis from the
older trails project.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 03:57:20 +01:00

2.3 KiB

Context

trails.cool ships features regularly but has no user-facing changelog. The project philosophy values transparency and simplicity. We need a changelog that's low-friction to write (just add a markdown file), works in-app, and produces shareable social links.

Goals / Non-Goals

Goals:

  • Zero-friction authoring: drop a .md file, deploy, done
  • Public page at /changelog listing all entries newest-first
  • Individual entry pages at /changelog/:slug with OG meta for social sharing
  • "What's New" indicator in nav for returning users
  • Works without JavaScript (SSR)

Non-Goals:

  • CMS or admin interface for writing entries
  • RSS feed (future, not now)
  • Email notifications for new entries
  • Per-entry images or rich media (just markdown text)
  • Bilingual entries (English only for now)

Decisions

D1: Markdown files in the repo, loaded at build time

Changelog entries live in apps/journal/changelog/ as markdown files named by date: 2026-03-25.md. Vite's import.meta.glob loads them at build time. No runtime file system access needed.

Each file has YAML frontmatter:

---
title: "Collaborative route planning goes live"
date: 2026-03-25
---

D2: Single route with dynamic slug

/changelog shows all entries. /changelog/:date shows a single entry. Both are one route file using an optional param or two route files. The list page shows titles + dates + first paragraph preview.

D3: "What's New" via localStorage timestamp

Store changelog:lastSeen timestamp in localStorage. If the newest entry's date is after this timestamp, show a dot on the nav "Changelog" link. Clicking the changelog page updates the timestamp. No server state needed.

D4: Open Graph meta for social sharing

Each /changelog/:date page sets og:title, og:description (first paragraph), and og:url. No og:image for now — text previews are fine.

Risks / Trade-offs

  • Build-time loading means deploy to publish → Acceptable. We deploy on every merge to main. Adding a changelog entry is: write file, PR, merge, deployed.
  • No rich media → Keeps it simple. Can add images later if needed.
  • localStorage "what's new" doesn't sync across devices → Fine for now. Server-side tracking would require auth and a DB table — overkill.