diff --git a/app/live/layout.tsx b/app/live/layout.tsx new file mode 100644 index 0000000..0322e3c --- /dev/null +++ b/app/live/layout.tsx @@ -0,0 +1,42 @@ +import type { Metadata } from "next"; +import { Anybody, Lexend, JetBrains_Mono } from "next/font/google"; +import type { ReactNode } from "react"; + +import "./live.css"; + +const anybody = Anybody({ + subsets: ["latin"], + display: "swap", + variable: "--live-font-anybody", +}); + +const lexend = Lexend({ + subsets: ["latin"], + display: "swap", + variable: "--live-font-lexend", +}); + +const jetbrainsMono = JetBrains_Mono({ + subsets: ["latin"], + weight: ["500", "600"], + display: "swap", + variable: "--live-font-mono", +}); + +export const metadata: Metadata = { + title: "Get Kokio & Usage Guide", + description: + "Download Kokio for iOS and Android, and see exactly how it works: sign in with a passkey, buy an eSIM, install it, and manage everything from a wallet only you control.", + alternates: { + canonical: "/live", + types: { "text/markdown": "/live.md" }, + }, +}; + +export default function LiveLayout({ children }: { children: ReactNode }) { + return ( +
{CLOSING_TIPS.lead}
+- Koki'o is live on Android — iOS lands shortly. + Kokio is live.
Pick a plan that fits how you travel in over 200 countries. Pay @@ -47,13 +46,13 @@ export function AppDownloadCTA() { and secure.
- Get it on Google Play + Try out the App today! - + ); } diff --git a/components/blog/cta-content.ts b/components/blog/cta-content.ts index 7f7a5b8..272514a 100644 --- a/components/blog/cta-content.ts +++ b/components/blog/cta-content.ts @@ -12,7 +12,7 @@ export const CTA_CONTENT = { live: { heading: "Try Kokio", body: "Tap. Authenticate. Connect.", - ctaLabel: "Get the app", + ctaLabel: "Try out the App today!", href: APP_URL, inlineText: "Ready to travel smarter?", inlineLabel: "Try Kokio", diff --git a/components/blog/manifesto-cta.tsx b/components/blog/manifesto-cta.tsx index f075a3d..c82f8cc 100644 --- a/components/blog/manifesto-cta.tsx +++ b/components/blog/manifesto-cta.tsx @@ -21,14 +21,14 @@ export function ManifestoCTA() { />Connectivity is a human right. Privacy is its guardian.
- Koki'o is also a provider, and we say it upfront: don't - trust Koki'o, verify it. This is our position, written out in + Kokio is also a provider, and we say it upfront: don't + trust Kokio, verify it. This is our position, written out in full.
diff --git a/components/global/announcement-banner.tsx b/components/global/announcement-banner.tsx index 959c8b8..cc42d15 100644 --- a/components/global/announcement-banner.tsx +++ b/components/global/announcement-banner.tsx @@ -1,32 +1,52 @@ +"use client"; + import React from "react"; import Image from "next/image"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; import Twitter from "@/assets/icons/twitter-fill.svg"; -import { TWITTER_URL } from "@/config/site"; -import { LAUNCH_NOTICE } from "@/lib/site-copy"; +import { CTA_MODE, TWITTER_URL } from "@/config/site"; +import { LAUNCH_NOTICE, LIVE_NOTICE } from "@/lib/site-copy"; const AnnouncementBanner = () => { + + const pathname = usePathname(); + if (pathname?.startsWith("/live")) return null; + return ( ); diff --git a/components/global/footer.tsx b/components/global/footer.tsx index 0d8ef37..2725565 100644 --- a/components/global/footer.tsx +++ b/components/global/footer.tsx @@ -10,8 +10,8 @@ import Blog from "@/assets/icons/blog.svg"; import Twitter from "@/assets/icons/twitter.svg"; import GitHub from "@/assets/icons/github.svg"; import Docs from "@/assets/icons/docs.svg"; -import { TWITTER_URL } from "@/config/site"; -import { LAUNCH_NOTICE } from "@/lib/site-copy"; +import { CTA_MODE, TWITTER_URL } from "@/config/site"; +import { LAUNCH_NOTICE, LIVE_NOTICE } from "@/lib/site-copy"; import SignUpButton from "@/components/sign-up-button"; export const socialLinks = [ @@ -77,7 +77,7 @@ const Footer = () => {
- {LAUNCH_NOTICE} Follow us on{" "}
+ {CTA_MODE === "live" ? LIVE_NOTICE : LAUNCH_NOTICE} Follow us on{" "}
{
const NavBar = () => {
// /manifesto renders its own nav row inside the shared translucent panel
- // (components/manifesto/manifesto-nav.tsx) instead of this global pill — see #25.
+ // (components/manifesto/manifesto-nav.tsx) instead of this global pill.
const pathname = usePathname();
- if (pathname?.startsWith("/manifesto")) return null;
+ if (pathname?.startsWith("/manifesto") || pathname?.startsWith("/live")) return null;
return (
{HERO.body}
+ Feel free to{" "}
+
+ {HERO.contactLinkText}
+ {" "}
+ for anything.
+ {HERO.guideLead}
+ Add it from Settings > Cellular/Mobile Data > Add eSIM > Use QR Code
+
+ Hands off to Apple's native "Install eSIM" flow on this iPhone.
+ {HERO.title}
+
+ {HERO.guideHeading}
+
+ Losing the passkey itself means losing access.
+