aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-03-03 13:37:47 -0800
committerAdam Soltys <[email protected]>2026-03-03 13:37:47 -0800
commit35f15ebc061076709293bbe4e3e2ace78ac79445 (patch)
tree19ba2d5b8d6a927372a16a86c55218f81ef4db35 /src
parentc6ed33aa9d1d0cdd65aa8d81aa9a05551e975822 (diff)
downloadcoinos-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.svelte24
-rw-r--r--src/lib/utils.ts4
-rw-r--r--src/routes/(app)/admin/+layout.svelte3
-rw-r--r--src/routes/(static)/+layout.svelte3
-rw-r--r--src/routes/(static)/login/+page.server.ts6
-rw-r--r--src/routes/(static)/register/auth/+page.server.ts2
-rw-r--r--src/routes/+page.svelte4
-rw-r--r--src/routes/+page.ts1
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;