diff --git a/internal/web/views.templ b/internal/web/views.templ index e55b3df..403a024 100644 --- a/internal/web/views.templ +++ b/internal/web/views.templ @@ -84,7 +84,7 @@ templ WelcomePage(user User, loggedIn bool) {
-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.
+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.
} } diff --git a/internal/web/views_templ.go b/internal/web/views_templ.go index c5d93ad..633f41d 100644 --- a/internal/web/views_templ.go +++ b/internal/web/views_templ.go @@ -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, "Tapir summarizes the videos your subscriptions publish, so you can skim the gist and decide what is worth your time.
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.
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "Tapir summarizes the videos your subscriptions publish, so you can skim the gist and decide what is worth your time.
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.
") 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) { diff --git a/internal/web/welcome_test.go b/internal/web/welcome_test.go index 270f2bf..3cefb09 100644 --- a/internal/web/welcome_test.go +++ b/internal/web/welcome_test.go @@ -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) {