fix(web): correct stale welcome-page invite copy
The landing page promised "if you have an invite link, it will set up your account automatically" — but invites moved to Authentik (ADR-019); Tapir no longer handles invite links and "Get Started" goes straight to OIDC. Replace with honest "invite-only — if you've been invited, sign in" and set the gradual-fill expectation before the login wall (UX review A5). Test pins the stale phrase out. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,7 +84,7 @@ templ WelcomePage(user User, loggedIn bool) {
|
||||
<div class="welcome-cta">
|
||||
<a class="btn btn-lg" href="/auth/login">Get Started</a>
|
||||
</div>
|
||||
<p class="welcome-sub">Access is by invitation. If you have an invite link, it will set up your account automatically. Returning users with credentials can log in above.</p>
|
||||
<p class="welcome-sub">Tapir is invite-only right now. If you've been invited, sign in above. New summaries land gradually — Tapir fetches captions slowly to respect YouTube's limits.</p>
|
||||
}
|
||||
</section>
|
||||
}
|
||||
|
||||
@@ -215,7 +215,7 @@ func WelcomePage(user User, loggedIn bool) templ.Component {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
} else {
|
||||
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<h1 class=\"welcome-title\">Watch less, know more</h1><p class=\"welcome-tagline\">Tapir summarizes the videos your subscriptions publish, so you can skim the gist and decide what is worth your time.</p><div class=\"welcome-cta\"><a class=\"btn btn-lg\" href=\"/auth/login\">Get Started</a></div><p class=\"welcome-sub\">Access is by invitation. If you have an invite link, it will set up your account automatically. Returning users with credentials can log in above.</p>")
|
||||
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<h1 class=\"welcome-title\">Watch less, know more</h1><p class=\"welcome-tagline\">Tapir summarizes the videos your subscriptions publish, so you can skim the gist and decide what is worth your time.</p><div class=\"welcome-cta\"><a class=\"btn btn-lg\" href=\"/auth/login\">Get Started</a></div><p class=\"welcome-sub\">Tapir is invite-only right now. If you've been invited, sign in above. New summaries land gradually — Tapir fetches captions slowly to respect YouTube's limits.</p>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
@@ -623,11 +623,11 @@ func summaryList(rows []store.SummaryRow, hasConnected bool) templ.Component {
|
||||
// /v/{id}/retry-now (HTMX swaps outerHTML). Five footer states, status-primary:
|
||||
// 1. Summarized — preview + chip + actions; no button.
|
||||
// 2. No captions (TranscriptStatus=="none") — terminal; "No transcript available"; no button.
|
||||
// 3. Queued (SummarizeRequested) — "Queued · waiting for the next run"; no button.
|
||||
// 4. Rate-limited — "Fetching soon" + quiet "Summarize now" → /retry-now.
|
||||
// 5. Pending (else) — "Not summarized" + quiet "Summarize now" → /summarize.
|
||||
// 3. Queued (SummarizeRequested) — "Queued · summarizing shortly"; no button.
|
||||
// 4. Rate-limited — "In queue" + quiet "Summarize" → /retry-now.
|
||||
// 5. Pending (else) — "Not summarized" + quiet "Summarize" → /summarize.
|
||||
//
|
||||
// States 4 and 5 use one verb ("Summarize now") and one style (.btn-quiet); the
|
||||
// States 4 and 5 use one verb ("Summarize") and one style (.btn-quiet); the
|
||||
// backend side-effect difference (clear-backoff vs. set-flag) is invisible to users.
|
||||
func VideoCard(r store.SummaryRow) templ.Component {
|
||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
||||
|
||||
@@ -53,6 +53,11 @@ func TestWelcomeLoggedOut(t *testing.T) {
|
||||
require.Contains(t, html, "Get Started", "logged-out CTA present")
|
||||
require.Contains(t, html, `href="/auth/login"`, "CTA links into the Dex flow")
|
||||
require.NotContains(t, html, "Go to my Tapir", "no logged-in controls")
|
||||
// Invites are owned by Authentik now (ADR-019); Tapir no longer handles
|
||||
// invite links. The old "invite link will set up your account automatically"
|
||||
// promise is stale and misleading — it must be gone.
|
||||
require.NotContains(t, html, "invite link", "stale Authentik-superseded invite copy must be removed")
|
||||
require.Contains(t, html, "invite-only", "honest invite-only framing present")
|
||||
}
|
||||
|
||||
func TestWelcomeLoggedIn(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user