2 Commits
Author SHA1 Message Date
thePR0M3TH3AN c1ac849219 External embed spec: mark shipped + drop Phase 8
The embed feature is essentially complete — phases 0-6 are live
on main, Phase 7 hardening shipped alongside Phase 1. Updated
the spec to reflect that:

- Status block flipped from "Nothing in this spec is implemented
  yet" to "Shipped (2026-06-01)" with date.
- Every shipped phase gets a ✅ marker on its heading.
- Phase 7 (Hardening + headers) body rewritten to record what
  actually shipped (CSP frame-ancestors, SPA rewrites, error
  handling, sanitization reuse) plus what's still optional
  (?debug=1 surface, hard relay-count cap).
- Phase 8 (Polish) deliberately dropped — the previously-drafted
  Credits overlay, postMessage handshake, and explicit
  light/dark/auto theming weren't needed for the use cases the
  feature is actually solving. Replaced with a clear "dropped"
  note listing each item and why.
- Phase 9 (Future) reframed as the natural follow-up arcs if we
  revisit (oEmbed endpoint, render-to-image, OG images,
  lightweight embed.html bundle).

The Acceptance Criteria for Embed v1 stays valid as-is — every
bullet is true.
2026-06-01 15:58:05 -04:00
thePR0M3TH3AN 4d355f87d4 External embed: draft v2 spec
Updated rewrite of the earlier embed plan covering every Artstr
feature shipped since the original sketch:

- Linked sub-design resolution inside embeds (reuses
  linkedDesigns.prefetchBatch + resolveLinked + disk cache, full
  cycle/depth/byte safety).
- Premium boundary: watermarked preview + "Open in Artstr to
  unlock" CTA; no in-iframe zap.
- Private boundary: hard refuse with 🔒 placeholder; no decrypt
  attempts.
- Pixel-art animation playback (auto-play, fps override,
  prefers-reduced-motion respected).
- Deck slide picker — `?slide=N` deep-links; linked-deck layers
  carrying design.slideIndex project to a single-slide payload.
- Credits overlay (opt-in via `?credits=1`), mirroring the
  in-app Credits panel.
- PostMessage handshake for parent-page integration (deck
  control, fullscreen request, ready/error events).
- Layer-group handling falls out naturally — groups are flat
  layers with groupId; the existing renderers already paint them.
- Open Graph metadata on the embed route URL itself.
- Per-event + per-tree byte caps inherited from linked-designs.
- Phase plan + acceptance criteria + risks updated.

No code; this is the planning artifact. Implementation phases
0-9 are scoped inside the doc.
2026-05-31 22:46:16 -04:00