diff --git a/app/app/page.tsx b/app/app/page.tsx index 6705b83..f7a4351 100644 --- a/app/app/page.tsx +++ b/app/app/page.tsx @@ -70,7 +70,7 @@ export default function Landing() {
-

Testnet prototype ยท settled in test USDG

+

Settled in USDG

Book every supplier together. Release deposits only when all of them say yes.

@@ -85,6 +85,12 @@ export default function Landing() { Create a package
+

+ Already use Setlo?{" "} + + Sign in + +

diff --git a/app/app/privacy/page.tsx b/app/app/privacy/page.tsx new file mode 100644 index 0000000..2a02753 --- /dev/null +++ b/app/app/privacy/page.tsx @@ -0,0 +1,58 @@ +import Link from "next/link"; +import { CONTACT, LegalPage } from "@/components/app/legal"; + +export const metadata = { title: "Privacy policy" }; + +export default function Privacy() { + return ( + + See also the terms and conditions. + , + ], + }, + ]} + /> + ); +} diff --git a/app/app/signin/sign-in.tsx b/app/app/signin/sign-in.tsx index fa2882f..b35eab4 100644 --- a/app/app/signin/sign-in.tsx +++ b/app/app/signin/sign-in.tsx @@ -20,7 +20,9 @@ export function SignIn() { const { ready, authenticated } = usePrivy(); const { sendCode, loginWithCode, state } = useLoginWithEmail(); const router = useRouter(); - const next = safeNext(useSearchParams().get("next")); + const params = useSearchParams(); + const next = safeNext(params.get("next")); + const signedOut = params.get("signedout") === "1"; const [email, setEmail] = useState(""); const [code, setCode] = useState(""); const [error, setError] = useState(null); @@ -50,14 +52,17 @@ export function SignIn() { -

{sent ? "Check your email" : "Sign in"}

+

{sent ? "Check your email" : "Sign in or create an account"}

{sent ? `We sent a 6-digit code to ${email}. It may take a minute, and can land in spam.` : invite ? "Use the email address your invitation was sent to. You'll go straight to it after signing in." - : "We'll email you a sign-in code. No password or crypto wallet needed."} + : "Enter your email and we'll send a code. No password or crypto wallet needed. If you've used Setlo before, you'll get back the same bookings and payout account."}

+ {signedOut && !sent && !error && ( + You're signed out. Sign in with the same email to get back to your bookings. + )} {error && {error}} {!sent ? (
{ e.preventDefault(); void run(() => sendCode({ email: email.trim() })); }}> diff --git a/app/app/terms/page.tsx b/app/app/terms/page.tsx new file mode 100644 index 0000000..c644281 --- /dev/null +++ b/app/app/terms/page.tsx @@ -0,0 +1,64 @@ +import Link from "next/link"; +import { CONTACT, LegalPage } from "@/components/app/legal"; + +export const metadata = { title: "Terms and conditions" }; + +export default function Terms() { + return ( + + See also the privacy policy. + , + ], + }, + ]} + /> + ); +} diff --git a/app/components/app/legal.tsx b/app/components/app/legal.tsx new file mode 100644 index 0000000..c9de7c0 --- /dev/null +++ b/app/components/app/legal.tsx @@ -0,0 +1,31 @@ +import Link from "next/link"; +import { Footer, Logo } from "./shell"; + +export const UPDATED = "3 October 2026"; +export const CONTACT = "setlo.app@gmail.com"; + +export function LegalPage({ title, intro, sections }: { title: string; intro: string; sections: { h: string; p: React.ReactNode[] }[] }) { + return ( + <> +
+
+ +
+
+
+

{title}

+

Last updated {UPDATED}

+

{intro}

+ {sections.map((s) => ( +
+

{s.h}

+ {s.p.map((x, i) => ( +

{x}

+ ))} +
+ ))} +
+ );