Files
member-console/internal/embeds/templates/partials/operator_setup.html
T
cgalo5758 71818de0bd Add setup checklist and empty-state guidance
Implement the ux-first-run change: a state-derived setup checklist on
/operator/setup with a landing region that recedes once required steps
are done, and empty states that distinguish blocked from empty across
operator and member surfaces. Also add production deployment and
environment reference docs, plus a config-key completeness test.
2026-08-23 03:06:11 -05:00

63 lines
2.9 KiB
HTML

<!-- Setup checklist (openspec ux-first-run). One partial, two call sites,
parameterized by .FullPage so they can never disagree about what is or
is not done:
- GET /operator/setup renders this as the page body (.FullPage=true):
its own H1 and intro copy.
- The operator landing surface renders this as a region ahead of the
"At a glance" metric tiles (.FullPage=false), only while
.RequiredIncomplete is true (see operator.html).
The step list itself (badges, description, condition, unlock copy,
link) renders identically either way — only the wrapper differs. -->
{{ if .FullPage }}
<header class="mb-4">
<h1 class="h2 mb-1">Setup checklist</h1>
<p class="text-muted mb-0">
Steps to take this deployment from installed to member-ready. This checklist is always here; it does not gate or reorder any other operator surface, and it is safe to leave any step undone.
</p>
</header>
{{ else }}
<section class="mb-5" aria-labelledby="overview-setup-heading">
<h2 class="h6 text-uppercase text-body-secondary mb-3" id="overview-setup-heading">Setup</h2>
{{ end }}
<div class="card">
<div class="card-body">
<ul class="list-group list-group-flush">
{{ range .Steps }}
<li class="list-group-item px-0 py-2">
<div class="d-flex justify-content-between align-items-start gap-3">
<div>
<span class="fw-semibold">{{ .Label }}</span>
{{ if not .Required }}<span class="badge text-bg-light text-muted ms-1">Optional</span>{{ end }}
<p class="text-muted small mb-1">{{ .Description }}</p>
{{ with .Condition }}<p class="small text-muted mb-1">{{ . }}</p>{{ end }}
{{ if and (not .Complete) .Unlocks }}
<p class="small mb-0">Unlocks: {{ .Unlocks }}</p>
{{ end }}
{{ if .Note }}
<p class="small text-muted mb-0">
{{ .Note }}{{ if .NoteHref }} <a href="{{ .NoteHref }}">Go to Stripe settings</a>{{ end }}
</p>
{{ end }}
</div>
<div class="text-end flex-shrink-0">
{{ if .Complete }}
<span class="badge text-bg-success">Done</span>
{{ else }}
<span class="badge text-bg-warning">Incomplete</span>
{{ end }}
<a class="btn btn-outline-primary btn-sm d-block mt-1" href="{{ .Href }}">{{ .LinkText }}</a>
</div>
</div>
</li>
{{ end }}
</ul>
</div>
</div>
{{ if .FullPage }}
{{ else }}
<p class="small mt-2 mb-0"><a href="/operator/setup">View full setup checklist</a></p>
</section>
{{ end }}