carlos / platform Public

console: one-button Sign in with Keymail — no address entry

OAuth covers both sign-up and sign-in; Keymail's own session makes
returning visits one click. Inbox-confirmation flow stays in code,
unrouted from the UI.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 3a71518366e16113393ac1165e741628c74e2281 parent 492ebf6
2 files changed, +10 −7
  • internal/console/server_test.go +2 −2
  • internal/console/templates/home.html +8 −5
diff --git a/internal/console/server_test.go b/internal/console/server_test.go
index 3c07bd84b..05dd9e659 100644
--- a/internal/console/server_test.go
+++ b/internal/console/server_test.go
@@ -159,8 +159,8 @@ func TestConsoleE2E(t *testing.T) {
if status, loc, _ := get(t, c, fx.ts.URL+"/apps"); status != http.StatusFound || loc != "/" {
t.Fatalf("signed-out /apps = %d -> %q, want 302 -> /", status, loc)
}
- if _, _, body := get(t, c, fx.ts.URL+"/"); !strings.Contains(body, "Continue with Keymail") {
- t.Fatal("landing page is missing the continue button")
+ if _, _, body := get(t, c, fx.ts.URL+"/"); !strings.Contains(body, "Sign in with Keymail") {
+ t.Fatal("landing page is missing the sign-in button")
}
signUp(t, fx, c, "code-1")
diff --git a/internal/console/templates/home.html b/internal/console/templates/home.html
index 6d3c1e7ea..b3b0fd8b1 100644
--- a/internal/console/templates/home.html
+++ b/internal/console/templates/home.html
@@ -1,10 +1,13 @@
{{define "home"}}{{template "top" .}}
<h1>The CARLOS platform console</h1>
-<p class="lede">Your apps, their live routes, and their release channels — signed in with nothing but your keymail address.</p>
+<p class="lede">Your apps, their live routes, and their release channels.</p>
{{if .Error}}<p class="error">{{.Error}}</p>{{end}}
-<form class="signin" method="post" action="/auth/continue">
- <input type="text" name="address" placeholder="you@keymail.dev" autocomplete="email">
- <button type="submit">Continue with Keymail</button>
+<form class="signin" method="get" action="/auth/signin">
+ <button type="submit">Sign in with Keymail</button>
</form>
-<p class="small">First time here? Leave the address empty (or <a href="/auth/signin">go straight to Keymail</a>) — you approve the console once in your Keymail, and that single approval is the whole sign-up. Returning with your address? We deliver a single-use sign-in link to your Keymail <strong>Apps</strong> inbox. Either way: no password, and you can revoke the console from Keymail at any time.</p>
+<p class="small">One button, whether it's your first time or your five-hundredth.
+First visits approve the console once in your Keymail — that single approval
+is the whole sign-up. After that, the same button is a one-click sign-in.
+No passwords, ever; revoke the console from Keymail's connected apps at any
+time.</p>
{{template "bottom" .}}{{end}}