Runtime pattern

Local-First Workspace

Start with on-device drafts and optional sync so the product remains useful before backend complexity arrives.

Local-First Workspace

This starter treats the browser as a first-class runtime, not just a thin remote client.

Why start local-first?

  • People can keep working while connectivity is flaky.
  • Product design can settle before you commit to sync semantics.
  • You can test workflows with realistic state without waiting for every backend surface to exist.

Starter pattern

  • /app owns authenticated product state.
  • Drafts are stored on-device first.
  • A sync queue is optional and can stay disabled until the product earns it.
  • Public pages live separately as SSR content.

What to replace

  • The draft schema with your real domain entities.
  • The workflow stages with your actual product states.
  • The noop sync adapter with a real backend integration once backup or collaboration matters.