From 038265806bd0b12d9941e2ab775f85d415267ccb Mon Sep 17 00:00:00 2001 From: sarah <129242944+sarah-inkeep@users.noreply.github.com> Date: Fri, 26 Jun 2026 17:35:39 -0700 Subject: [PATCH] Match /continue page styling to the share splash shell (#2207) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Match /continue page styling to the share splash shell Extract the shared SlidePageShell + Slide{Eyebrow,Heading,Lead} primitives (dot-texture chrome, wordmark header, footer) and render the first-run /continue welcome page and the /continue/closed confirmation page through them, so both match the /d/ share splash. Tighten the share-recovery copy, constrain prose to a readable max-w-3xl measure, and span the section divider full container width. * Fix Biome format drift; drop orphaned /continue/closed page - Collapse the explicit `{' '}` after the bold span to a literal space and sort imports in slide-page.tsx (Biome `check` — caught by CI's format drift + lint, missed locally because `biome lint` skips format/assist). - Remove continue/closed/page.tsx: it was unreachable (nothing redirects to it; done/route.ts renders the same confirmation inline to clear the pairing cookie) and its docstring described a redirect that doesn't exist. * Address review polish: JSDoc accuracy, text-balance, button casing - Correct SlidePageShell JSDoc to say it's used by /continue (the splash renders the chrome inline and isn't migrated yet; it mirrors this shell). - Add text-balance to SlideHeading to avoid heading widows at breakpoints. - Title-case the getting-started button label in source; splashPrimaryButton's uppercase class renders it identically while giving a cleaner a11y name. --------- GitOrigin-RevId: b6553ad2dc31f918e87a2e415bb11dc0df3006a5 --- docs/src/app/continue/page.tsx | 97 ++++++++++++------------------ docs/src/components/slide-page.tsx | 67 +++++++++++++++++++++ 2 files changed, 104 insertions(+), 60 deletions(-) create mode 100644 docs/src/components/slide-page.tsx diff --git a/docs/src/app/continue/page.tsx b/docs/src/app/continue/page.tsx index c39bb993..b4f54a0a 100644 --- a/docs/src/app/continue/page.tsx +++ b/docs/src/app/continue/page.tsx @@ -1,8 +1,8 @@ -import { ArrowRightIcon, DownloadIcon } from 'lucide-react'; import { cookies } from 'next/headers'; -import Image from 'next/image'; import Link from 'next/link'; import { redirect } from 'next/navigation'; +import { SplashButtonLabel, splashPrimaryButton } from '@/app/d/[encoded]/splash-buttons'; +import { SlideEyebrow, SlideHeading, SlideLead, SlidePageShell } from '@/components/slide-page'; import { decideContinue, NONCE_PARAM, @@ -37,69 +37,46 @@ export default async function ContinuePage({ searchParams }: ContinuePageProps) } return ( -
- + +
+ Welcome to OpenKnowledge -
-
-

- Welcome to OpenKnowledge -

+ You’re all set. -

- You’re all set. -

+ + OpenKnowledge is a local-first, markdown-native knowledge base where you and your AI + agents co-create. Open the app to create your first project, or connect an existing GitHub + repository. + -

- OpenKnowledge is a local-first, markdown-native knowledge base where you and your AI - agents co-create. Open the app to create your first project, or connect an existing - GitHub repository. -

+
+ + Read the getting-started guide + +
+
-
- +
+

Were you sent a share link?

+

+ Click the link again and choose{' '} + Open in OpenKnowledge to jump straight to it. +
+ Don’t have the app yet?{' '} + - Read the getting-started guide -

- - + Download it for macOS + + . +

-
-
+ + ); } diff --git a/docs/src/components/slide-page.tsx b/docs/src/components/slide-page.tsx new file mode 100644 index 00000000..37472b58 --- /dev/null +++ b/docs/src/components/slide-page.tsx @@ -0,0 +1,67 @@ +import Link from 'next/link'; +import type { ComponentProps, ReactNode } from 'react'; +import { DotTexture } from '@/app/(home)/dot-texture'; +import { SiteFooter } from '@/app/(home)/footer'; +import { OkWordmark } from '@/components/ok-wordmark'; +import { cn } from '@/lib/utils'; + +export function SlidePageShell({ children }: { children: ReactNode }) { + return ( +
+ + +
+
+ + {/* Link already names the control; hide the wordmark's own label to + avoid a doubled "OpenKnowledge" announcement. */} +
+
+ +
+
{children}
+
+ +
+ +
+
+ ); +} + +export function SlideEyebrow({ className, ...props }: ComponentProps<'p'>) { + return ( +

+ ); +} + +export function SlideHeading({ className, ...props }: ComponentProps<'h1'>) { + return ( +

+ ); +} + +export function SlideLead({ className, ...props }: ComponentProps<'p'>) { + return

; +}