···39 const res = await routes.request("/login");
4041 const html = await res.text();
42- expect(html).toContain("Log in with AT Proto");
43 expect(html).toContain('type="submit"');
44 });
45···52 expect(html).toContain('method="get"');
53 });
5455- it("renders AT Proto explanation text", async () => {
56 const routes = await loadLoginRoutes();
57 const res = await routes.request("/login");
5859 const html = await res.text();
60- // Should explain what AT Proto login means
61- expect(html).toContain("AT Protocol");
62 });
6364 it("displays decoded error message from query param", async () => {
···39 const res = await routes.request("/login");
4041 const html = await res.text();
42+ expect(html).toContain("Log in");
43 expect(html).toContain('type="submit"');
44 });
45···52 expect(html).toContain('method="get"');
53 });
5455+ it("renders Internet Handle explanation text", async () => {
56 const routes = await loadLoginRoutes();
57 const res = await routes.request("/login");
5859 const html = await res.text();
60+ // Should explain what Internet Handle login means
61+ expect(html).toContain("Internet Handle");
62 });
6364 it("displays decoded error message from query param", async () => {
+4-4
apps/web/src/routes/login.tsx
···28 <BaseLayout title="Sign in — atBB Forum" auth={auth}>
29 <PageHeader
30 title="Sign in"
31- description="Sign in with your AT Protocol account."
32 />
33 <div class="login-form">
34 {error && (
···42 class="login-form__form"
43 >
44 <label for="login-handle" class="login-form__label">
45- AT Protocol handle
46 </label>
47 <input
48 type="text"
···57 aria-describedby="login-hint"
58 />
59 <p class="login-form__hint" id="login-hint">
60- Use any AT Protocol handle (e.g. <code>alice.bsky.social</code>{" "}
61 or a custom domain). You own your posts — they live on your PDS.
62 </p>
63 <button type="submit" class="login-form__submit">
64- Log in with AT Proto
65 </button>
66 </form>
67 </div>
···28 <BaseLayout title="Sign in — atBB Forum" auth={auth}>
29 <PageHeader
30 title="Sign in"
31+ description="Sign in with your Internet Handle."
32 />
33 <div class="login-form">
34 {error && (
···42 class="login-form__form"
43 >
44 <label for="login-handle" class="login-form__label">
45+ Internet Handle
46 </label>
47 <input
48 type="text"
···57 aria-describedby="login-hint"
58 />
59 <p class="login-form__hint" id="login-hint">
60+ Use any Internet Handle (e.g. <code>alice.bsky.social</code>{" "}
61 or a custom domain). You own your posts — they live on your PDS.
62 </p>
63 <button type="submit" class="login-form__submit">
64+ Log in
65 </button>
66 </form>
67 </div>