{{ if .Readiness.Purchasable }}
✓ Purchasable
{{ if .Readiness.CatalogQualifier }}
{{ .Readiness.CatalogQualifier }}
{{ end }}
{{ else }}
⚠ Incomplete
{{ end }}
{{ if not .Readiness.Purchasable }}
A member cannot buy this product yet. Missing: {{ range $i, $m := .Readiness.Missing }}{{ if $i }}, {{ end }}{{ $m }}{{ end }}.
{{ end }}
{{ range .Readiness.Rows }}
{{ .Label }}
{{ if eq .State "met" }}
Met
{{ else if eq .State "n/a" }}
Not applicable
{{ else if eq .State "pending" }}
Sync pending
{{ else if eq .State "failed" }}
Sync failed
{{ else if eq .State "shown" }}
Shown
{{ else if eq .State "hidden" }}
Not shown
{{ else }}
Missing
{{ end }}
{{ if and (ne .State "met") .Detail }}
{{ .Detail }}
{{ end }}
{{ end }}
{{ if .Readiness.CanSyncStripe }}
Registers the product and its price with Stripe so members can buy this product.
{{ else if .Readiness.CanRetryStripe }}
The last sync to Stripe failed — retry to run it again.
{{ else if not .Readiness.StripeConfigured }}
Stripe is not configured for this deployment, so payment processing is unavailable. Set the Stripe API key and webhook secret to enable purchases — grant-based access still works without Stripe.