diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index e6d9094d..8b1adc85 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,5 +1,5 @@ import type { Metadata } from "next"; -import { Inter, JetBrains_Mono } from "next/font/google"; +import { Inter, JetBrains_Mono, Instrument_Serif } from "next/font/google"; import "../globals.css"; import "@ui/globals.css"; import { AuthProvider } from "@lib/auth-context"; @@ -11,6 +11,8 @@ import { Suspense } from "react"; import { Toaster } from "sonner"; import { TourProvider } from "@/components/tour"; import { MobilePanelProvider } from "@/lib/mobile-panel-context"; +import { NuqsAdapter } from 'nuqs/adapters/next/app' + import { ViewModeProvider } from "@/lib/view-mode-context"; @@ -24,6 +26,12 @@ const mono = JetBrains_Mono({ variable: "--font-mono", }); +const serif = Instrument_Serif({ + subsets: ["latin"], + variable: "--font-serif", + weight: ["400"], +}); + export const metadata: Metadata = { metadataBase: new URL("https://app.supermemory.ai"), description: "Your memories, wherever you are", @@ -38,7 +46,7 @@ export default function RootLayout({ return ( - - {children} - - + + + {children} + + + diff --git a/apps/web/app/onboarding/animated-text.tsx b/apps/web/app/onboarding/animated-text.tsx new file mode 100644 index 00000000..c3616482 --- /dev/null +++ b/apps/web/app/onboarding/animated-text.tsx @@ -0,0 +1,53 @@ +'use client'; +import { useEffect } from 'react'; +import { TextEffect } from '@/components/text-effect'; + +export function AnimatedText({ children, trigger, delay }: { children: string, trigger: boolean, delay: number }) { + const blurSlideVariants = { + container: { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { staggerChildren: 0.01 }, + }, + exit: { + transition: { staggerChildren: 0.01, staggerDirection: 1 }, + }, + }, + item: { + hidden: { + opacity: 0, + filter: 'blur(10px) brightness(0%)', + y: 0, + }, + visible: { + opacity: 1, + y: 0, + filter: 'blur(0px) brightness(100%)', + transition: { + duration: 0.4, + }, + }, + exit: { + opacity: 0, + y: -30, + filter: 'blur(10px) brightness(0%)', + transition: { + duration: 0.3, + }, + }, + }, + }; + + return ( + + {children} + + ); +} diff --git a/apps/web/app/onboarding/bio-form.tsx b/apps/web/app/onboarding/bio-form.tsx new file mode 100644 index 00000000..984309a9 --- /dev/null +++ b/apps/web/app/onboarding/bio-form.tsx @@ -0,0 +1,86 @@ +"use client"; + +import { Textarea } from "@ui/components/textarea"; +import { useOnboarding } from "./onboarding-context"; +import { useState } from "react"; +import { Button } from "@ui/components/button"; +import { AnimatePresence, motion } from "motion/react"; +import { NavMenu } from "./nav-menu"; +import { $fetch } from "@lib/api"; + +export function BioForm() { + const [bio, setBio] = useState(""); + const { totalSteps, nextStep, getStepNumberFor } = useOnboarding(); + + function handleNext() { + const trimmed = bio.trim(); + if (!trimmed) { + nextStep(); + return; + } + + nextStep(); + void $fetch("@post/memories", { + body: { + content: trimmed, + containerTags: ["sm_project_default"], + metadata: { sm_source: "consumer" }, + }, + }).catch((error) => { + console.error("Failed to save onboarding bio memory:", error); + }); + } + return ( +
+
+ +

+ Step {getStepNumberFor("bio")} of {totalSteps} +

+
+

Tell us about yourself

+

+ What should Supermemory know about you? +

+
+