diff options
| author | Adam Soltys <[email protected]> | 2026-03-03 13:37:47 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-03-03 13:37:47 -0800 |
| commit | 35f15ebc061076709293bbe4e3e2ace78ac79445 (patch) | |
| tree | 19ba2d5b8d6a927372a16a86c55218f81ef4db35 /src | |
| parent | c6ed33aa9d1d0cdd65aa8d81aa9a05551e975822 (diff) | |
| download | coinos-ui-35f15ebc061076709293bbe4e3e2ace78ac79445.tar.gz coinos-ui-35f15ebc061076709293bbe4e3e2ace78ac79445.zip | |
static landing page with single Start Now button
Prerender the landing page, replace conditional auth header
buttons with a single "Start Now" that checks the username
cookie client-side. Set username cookie httpOnly: false in
all login/register flows.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/LandingHeader.svelte | 24 | ||||
| -rw-r--r-- | src/lib/utils.ts | 4 | ||||
| -rw-r--r-- | src/routes/(app)/admin/+layout.svelte | 3 | ||||
| -rw-r--r-- | src/routes/(static)/+layout.svelte | 3 | ||||
| -rw-r--r-- | src/routes/(static)/login/+page.server.ts | 6 | ||||
| -rw-r--r-- | src/routes/(static)/register/auth/+page.server.ts | 2 | ||||
| -rw-r--r-- | src/routes/+page.svelte | 4 | ||||
| -rw-r--r-- | src/routes/+page.ts | 1 |
8 files changed, 19 insertions, 28 deletions
diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte index a875e80a..febfc7fd 100644 --- a/src/components/LandingHeader.svelte +++ b/src/components/LandingHeader.svelte @@ -9,9 +9,13 @@ howItWorks = undefined, faq = undefined, about = undefined, - user = undefined, }: any = $props(); + function startNow() { + const match = document.cookie.match(/(?:^|;\s*)username=([^;]*)/); + goto(match ? `/${decodeURIComponent(match[1])}` : "/login"); + } + let header = $state(); </script> @@ -32,21 +36,9 @@ <button class="hover:opacity-80" onclick={() => scroll(faq)}>{$t("faq.header")}</button> <button class="hover:opacity-80" onclick={() => scroll(about)}>{$t("about.header")}</button> {/if} - {#if user} - <button class="btn !w-auto !rounded-full" onclick={() => goto(`/${user.username}`)}> - {$t("nav.home")} - </button> - <button class="btn !w-auto !rounded-full" onclick={() => goto("/logout")}> - {$t("nav.signOut")} - </button> - {:else} - <button class="btn btn-accent !w-auto !rounded-full" onclick={() => goto("/register")}> - {$t("nav.register")} - </button> - <button class="btn !w-auto !rounded-full" onclick={() => goto("/login")}> - {$t("nav.signIn")} - </button> - {/if} + <button class="btn btn-accent !w-auto !rounded-full" onclick={startNow}> + {$t("nav.startInSeconds")} + </button> </div> </nav> diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 6815a5b2..cb1e5ec7 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -200,7 +200,7 @@ export const login = async ( const opts = { path: "/", expires }; if (u.language) cookies.set("lang", u.language, opts); - cookies.set("username", user.username, opts); + cookies.set("username", user.username, { ...opts, httpOnly: false }); cookies.set("token", token, opts); if (u.nsec) { try { @@ -544,7 +544,7 @@ export const register = async ( const expires = new Date(); expires.setSeconds(expires.getSeconds() + maxAge); const opts = { path: "/", expires }; - cookies.set("username", user.username, opts); + cookies.set("username", user.username, { ...opts, httpOnly: false }); cookies.set("token", token, opts); error = null; } diff --git a/src/routes/(app)/admin/+layout.svelte b/src/routes/(app)/admin/+layout.svelte index 28e8b7d0..3e1f6585 100644 --- a/src/routes/(app)/admin/+layout.svelte +++ b/src/routes/(app)/admin/+layout.svelte @@ -1,10 +1,9 @@ <script lang="ts"> import LandingHeader from "$comp/LandingHeader.svelte"; let { data, children } = $props(); - let user = $derived(data.user); </script> -<LandingHeader {user} /> +<LandingHeader /> <main class="container px-10 md:px-40 mx-auto min-h-[600px] pb-20"> {@render children?.()} </main> diff --git a/src/routes/(static)/+layout.svelte b/src/routes/(static)/+layout.svelte index b204cd0e..f44bfcda 100644 --- a/src/routes/(static)/+layout.svelte +++ b/src/routes/(static)/+layout.svelte @@ -7,7 +7,6 @@ import { page } from "$app/stores"; let { data, children } = $props(); - let user = $derived(data.user); let theme = $state(); $effect(() => { theme = $themeStore; @@ -17,7 +16,7 @@ </script> <SvelteToast options={{ reversed: true, intro: { y: 192 } }} /> -<LandingHeader {user} /> +<LandingHeader /> <Nostr /> <main class="container flex px-4 md:px-40 mx-auto min-h-[600px]" data-theme={theme}> {@render children?.()} diff --git a/src/routes/(static)/login/+page.server.ts b/src/routes/(static)/login/+page.server.ts index 0c493422..480116b5 100644 --- a/src/routes/(static)/login/+page.server.ts +++ b/src/routes/(static)/login/+page.server.ts @@ -88,7 +88,7 @@ export const actions = { const opts = { path: "/", expires }; if (language) cookies.set("lang", language, opts); - cookies.set("username", uname, opts); + cookies.set("username", uname, { ...opts, httpOnly: false }); cookies.set("token", token, opts); return { @@ -137,7 +137,7 @@ export const actions = { const opts = { path: "/", expires }; if (language) cookies.set("lang", language, opts); - cookies.set("username", username, opts); + cookies.set("username", username, { ...opts, httpOnly: false }); cookies.set("token", token, opts); return { @@ -181,7 +181,7 @@ export const actions = { const opts = { path: "/", expires }; if (language) cookies.set("lang", language, opts); - cookies.set("username", username, opts); + cookies.set("username", username, { ...opts, httpOnly: false }); cookies.set("token", token, opts); return { diff --git a/src/routes/(static)/register/auth/+page.server.ts b/src/routes/(static)/register/auth/+page.server.ts index 06735396..29e9a3f8 100644 --- a/src/routes/(static)/register/auth/+page.server.ts +++ b/src/routes/(static)/register/auth/+page.server.ts @@ -88,7 +88,7 @@ export const actions = { expires.setSeconds(expires.getSeconds() + maxAge); const opts = { path: "/", expires }; - cookies.set("username", username, opts); + cookies.set("username", username, { ...opts, httpOnly: false }); cookies.set("token", token, opts); if (sk) { diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5fa7da3b..13cbd011 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -11,7 +11,7 @@ import { t } from "$lib/translations"; let { data } = $props(); - let { faqs, locations, user } = $derived(data as any); + let { faqs, locations } = $derived(data as any); let howItWorks = $state(); let faq = $state(); @@ -28,7 +28,7 @@ <link rel="preload" href="/images/hero-image.webp" as="image" type="image/webp" /> </svelte:head> -<LandingHeader {howItWorks} {faq} {about} {user} /> +<LandingHeader {howItWorks} {faq} {about} /> <main class="space-y-20 md:space-y-40 py-20 md:py-32 lg:py-36 xl:py-40 px-5 md:px-0 pt-20"> <LandingHero /> diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 00000000..189f71e2 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1 @@ +export const prerender = true; |
