cmd/librenotes/web/public/onboarding.js triggers after a session
is verified and runs only when the tenant-scoped key
"onboarded" is unset.
Behaviour:
- Reads the dismissal flag from authClient.tenantStore() so each
tenant's state is isolated and survives logout-then-login on
the same device only if they're the same user.
- Lists /api/notes; if the notebook is empty, PUTs a sample
"welcome" note so a brand-new user has somewhere to land. We
don't seed when notes already exist (covers signing in on a
second device for the first time).
- Opens app.html's <dialog id="onboarding-dialog"> with showModal
and persists "onboarded": true on submit so returning users
never see it again.
- Seed failures are logged but do not block the dialog —
onboarding shouldn't depend on a successful network round
trip. The dialog just won't have a sample note to point at.
Dialog content covers the four user-guide concepts: notes-as-
markdown, [[wikilinks]], offline-first sync, tenant isolation.
Service worker precaches onboarding.js so the dialog is also
available to offline-first returning visitors.
Closes#32.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>