Skip to content

v0.1.4 — IndieAuth login + Micropub note posting

Choose a tag to compare

@courtneyr-dev courtneyr-dev released this 01 May 23:07
· 264 commits to main since this release

First functional end-to-end release. v0.1.0 was the scaffold; v0.1.4 is the first version that actually posts a note.

What works on staging

Open /post/ on a phone, sign in with IndieAuth, post an h-entry note via Micropub, see the new post URL. Smoke test signed off on iPhone Safari + USB-attached desktop Safari Web Inspector across all 6 stages including AES-GCM IV-freshness verification.

Highlights

  • /post/* PWA shell with Vite + TypeScript + Preact, mounted on a hard-typed React-like component tree with strict TS settings.
  • Companion-plugin gateOutpost_Companion_Detector short-circuits on the upstream-first dependency chain (indieauth/indieauth.phpmicropub/micropub.php); admin notices and the PWA install prompt share one source of truth.
  • IndieAuth client — discovery (Link header → HTML link rel → a rel), PKCE 256-bit verifier + SHA-256 challenge, code exchange, encrypted IndexedDB token storage with non-extractable CryptoKey.
  • Micropub client — discover endpoint, POST h=entry&content=<text> with bearer token, parse Location header. 201 Created and 202 Accepted both treated as success.
  • Hard Contract honored — every paint property goes through var(--outpost-*, theme-fallback). Plugin owns layout, theme owns paint.
  • 117 passing tests — 59 PHPUnit (1 skipped pending wp-env) + 58 vitest. PHPCS + PHPStan both clean.

Known follow-ups

  • docs/A3-REQUIREMENTS.md — apple-touch-icon link, status-bar-style tuning, icon-192/512.png assets land in A3 (next style/asset session).
  • Phase C — the actual composer modes (Note refinement, Reply/Like/Repost, Photo, Listen group, Article).

Managed-WordPress hosting gotchas captured

Eight discovered during staging verification, all locked in CLAUDE.md:

  • Rewrite-rule flush on version mismatch (rsync deploys don't fire activation hooks)
  • template_redirect priority 1 (beats redirect_canonical)
  • SW URL extension-less (/post/sw, not .js — managed-WP nginx short-circuits .js requests)
  • nocache_headers() on every HTML response (Varnish / nginx FastCGI cache)
  • ?_cb=<timestamp> cache-buster for staging verify (GoDaddy edge cache promotes 302/301 to cached entries)
  • OUTPOST_VERSION bumps with every deployable behaviour change
  • build/pwa/ committed to git (gd-wordpress-deployer rsync reflects working tree)
  • Outpost_PWA_Shell::halt() after every render (or WP appends theme template)

Full changelog

See CHANGELOG.md.