Skip to content

feat(routes): generic top-level pages (e.g. /pages/:slug) #69

@vnykmshr

Description

@vnykmshr

Markgo's top-level URL surface is fixed — /, /writing, /writing/:slug, /tags, /categories, /search, /about, /contact, feeds, manifest, health (internal/commands/serve/command.go:402-440). There's no slot for an evergreen non-article page — "how to run your own", "credits", "now" — that should live at a stable top-level URL outside /writing/*.

Forkers and the reference deployment hit this whenever they want a published page that isn't a Thought, Link, or Essay: content that belongs at the site but not in the feed. The current workaround is to publish it as a regular article and accept that it surfaces in /writing alongside dated posts, even though it's intended as a standing page.

Proposal

Add a generic top-level pages mechanism. Two viable shapes:

A. /pages/:slug — markdown files under articles/ (or a sibling pages/ dir) carrying type: page frontmatter, routed at /pages/<slug>. Excluded from /writing, sitemap entry with distinct priority, no date in template.

B. Top-level /:slug — same type: page frontmatter, routed directly at /<slug>. Reserved-word list to avoid collision with existing top-level routes; forkers must avoid slugs that match future markgo route additions.

Either shape: pages excluded from the writing feed, sitemap with distinct priority, OG cards via existing article render path. /about keeps its dedicated handler (config-driven identity chrome) — pages are for everything else.

Why now

The reference deployment (log.1mb.dev) wants an evergreen "Run your own?" page distinct from the README (targets GitHub arrivals) and docs/deployment.md (step-by-step). Currently has to ship as an article — works, but the IA is wrong: it's not a Thought, it doesn't belong in the dated feed.

Surfaced from log.1mb.dev M3-polish-2: https://github.com/1mb-dev/log

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions