aboutsummaryrefslogtreecommitdiff
path: root/apps/web/app
diff options
context:
space:
mode:
authorDhravya Shah <[email protected]>2025-01-27 21:02:43 -0700
committerDhravya Shah <[email protected]>2025-01-27 21:02:43 -0700
commitd2bf8d6623368f9ee1abb7d9add237fe6d003f1c (patch)
tree8f98c0793c62c177a45e6ad156b2bad872d6e474 /apps/web/app
parentchange embedding model (diff)
downloadsupermemory-d2bf8d6623368f9ee1abb7d9add237fe6d003f1c.tar.xz
supermemory-d2bf8d6623368f9ee1abb7d9add237fe6d003f1c.zip
change embedding model
Diffstat (limited to 'apps/web/app')
-rw-r--r--apps/web/app/components/Reminders.tsx1
-rw-r--r--apps/web/app/root.tsx35
-rw-r--r--apps/web/app/routes/pitch.index.tsx93
3 files changed, 108 insertions, 21 deletions
diff --git a/apps/web/app/components/Reminders.tsx b/apps/web/app/components/Reminders.tsx
index 96be74bb..1a3fca49 100644
--- a/apps/web/app/components/Reminders.tsx
+++ b/apps/web/app/components/Reminders.tsx
@@ -3,7 +3,6 @@ import Markdown from "react-markdown";
import { useNavigate } from "@remix-run/react";
-import { client } from "../lib/utils/api";
import image from "./gradients/gradient1.png";
import { AddMemoryModal } from "./memories/AddMemory";
import { Button } from "./ui/button";
diff --git a/apps/web/app/root.tsx b/apps/web/app/root.tsx
index 75485ce6..afedd49b 100644
--- a/apps/web/app/root.tsx
+++ b/apps/web/app/root.tsx
@@ -29,6 +29,7 @@ import "@fontsource/geist-sans/900.css";
import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-query";
import { Toaster } from "sonner";
import posthog from "posthog-js";
+import { PostHogProvider, usePostHog} from 'posthog-js/react'
const queryClient = new QueryClient();
@@ -130,10 +131,10 @@ export const loader = async ({ request, context }: LoaderFunctionArgs) => {
});
};
-// Use React.memo to memoize the App component
const App = React.memo(function App() {
const data = useLoaderData<typeof loader>();
const [theme] = useTheme();
+ const posthog = usePostHog();
useEffect(() => {
if (data.user) {
@@ -147,16 +148,16 @@ const App = React.memo(function App() {
lastName: data.user.lastName,
});
}
- }, []);
+ }, [data.user]);
return (
- <html lang="en" data-theme={theme ?? "light"} className={theme ?? ""}>
+ <html lang="en" data-theme={theme ?? "light"}>
<head>
<Meta />
<Links />
<NonFlashOfWrongThemeEls ssrTheme={Boolean(data.theme)} />
</head>
- <body>
+ <body className={theme ?? ""}>
<Outlet />
<ScrollRestoration />
<Scripts />
@@ -174,23 +175,17 @@ const App = React.memo(function App() {
});
export default function AppWithProviders() {
- const data = useLoaderData<typeof loader>();
-
- const specifiedTheme = useMemo(() => data.theme, [data.theme]);
-
- const MemoizedApp = React.memo(App);
- const MemoizedThemeProvider = useMemo(
- () => <ThemeProvider specifiedTheme={specifiedTheme}>
- <MemoizedApp />
- </ThemeProvider>,
- [specifiedTheme]
- );
+ const data = useLoaderData<typeof loader>()
return (
- <KeyboardProvider>
- <QueryClientProvider client={queryClient}>
- {MemoizedThemeProvider}
- </QueryClientProvider>
- </KeyboardProvider>
+ <PostHogProvider client={posthog}>
+ <KeyboardProvider>
+ <QueryClientProvider client={queryClient}>
+ <ThemeProvider specifiedTheme={data.theme}>
+ <App />
+ </ThemeProvider>
+ </QueryClientProvider>
+ </KeyboardProvider>
+ </PostHogProvider>
);
}
diff --git a/apps/web/app/routes/pitch.index.tsx b/apps/web/app/routes/pitch.index.tsx
new file mode 100644
index 00000000..0e1e10f6
--- /dev/null
+++ b/apps/web/app/routes/pitch.index.tsx
@@ -0,0 +1,93 @@
+import React, { useEffect } from "react";
+
+import posthog from "posthog-js";
+import { Logo } from "~/components/icons/Logo";
+import { Theme, useTheme } from "~/lib/theme-provider";
+
+function PitchPage1() {
+ return (
+ <div className="h-screen w-screen flex flex-col justify-center px-4 sm:px-8">
+ <Logo className="w-[min(25vw,16rem)] h-[min(25vw,16rem)] mb-4" />
+ <div className="w-full max-w-[90vw]">
+ <h1 className="text-[min(10vw,12rem)] font-bold tracking-tight leading-none whitespace-nowrap">
+ <span className="inline">super</span>
+ <span className="inline">memory</span>
+ </h1>
+ <p className="text-[min(3vw,3rem)] font-medium tracking-tight leading-none mt-8">
+ The second brain platform for everyone. <br />
+ <span className="text-[min(1.5vw,1rem)] text-gray-500">dhravya shah draft</span>
+ </p>
+ </div>
+ </div>
+ );
+}
+
+function PitchPage2() {
+ return (
+ <div className="h-screen w-screen flex flex-col justify-center px-4 sm:px-8">
+ <h2 className="text-[min(5vw,4rem)] font-bold tracking-tight leading-none mb-12">current problems</h2>
+ <div className="grid grid-cols-4 gap-4 max-w-7xl mx-auto w-full h-[60vh] relative">
+ <div className="absolute -right-24 top-1/2 -translate-y-1/2 w-48">
+ <img
+ src="https://www.harleytherapy.co.uk/counselling/wp-content/uploads/4624465693_115ce5fa02-400x300.jpg"
+ alt="Messy desk with papers"
+ className="rounded-lg shadow-lg"
+ />
+ <div className="font-handwritten text-lg text-blue-600 -rotate-12 mt-2 ml-4">
+ current knowledgebase
+ <svg className="w-12 h-12 -mt-2 ml-2 transform rotate-45" viewBox="0 0 24 24" fill="none" stroke="currentColor">
+ <path d="M5 12h14M12 5l7 7-7 7" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round"/>
+ </svg>
+ </div>
+ </div>
+
+ <div className="col-span-2 row-span-2 border rounded-xl p-8 hover:bg-gray-50 transition-colors transform hover:scale-105 hover:rotate-1">
+ <h3 className="font-semibold text-3xl mb-4">Knowledge Management</h3>
+ <p className="text-gray-600 text-lg">Information overload is real. Notes scattered everywhere, bookmarks lost in endless folders, important details buried in email threads. We're building this for Chakshu who's drowning in digital chaos.</p>
+ </div>
+ <div className="border rounded-xl p-6 hover:bg-gray-50 transition-colors transform hover:-rotate-2">
+ <h3 className="font-semibold text-xl mb-2">Trust & Privacy</h3>
+ <p className="text-gray-600 text-sm">Developer friends like Kshunya and Siddharth need their data private and secure</p>
+ </div>
+ <div className="border rounded-xl p-6 hover:bg-gray-50 transition-colors transform hover:rotate-2">
+ <h3 className="font-semibold text-xl mb-2">Enterprise Search</h3>
+ <p className="text-gray-600 text-sm">Cloudflare's internal knowledge is a maze of confusion</p>
+ </div>
+ <div className="col-span-2 border rounded-xl p-6 hover:bg-gray-50 transition-colors transform hover:-rotate-1">
+ <h3 className="font-semibold text-2xl mb-3">Digital Chaos</h3>
+ <p className="text-gray-600">Notes in Notion, bookmarks in Chrome, knowledge in Slack, wisdom in emails... it's everywhere and nowhere</p>
+ </div>
+ <div className="border rounded-xl p-6 hover:bg-gray-50 transition-colors transform hover:rotate-1">
+ <h3 className="font-semibold text-xl mb-2">Information Anxiety</h3>
+ <p className="text-gray-600 text-sm">Brent spends hours searching through old emails</p>
+ </div>
+ <div className="border rounded-xl p-6 hover:bg-gray-50 transition-colors transform hover:-rotate-1">
+ <h3 className="font-semibold text-xl mb-2">Developer Cost</h3>
+ <p className="text-gray-600 text-sm">Memory APIs are a costly maze of complexity</p>
+ </div>
+ </div>
+ </div>
+ );
+}
+
+function Pitch() {
+ const [theme, setTheme] = useTheme();
+ useEffect(() => {
+ posthog.capture("pitch_viewed");
+ setTheme(Theme.LIGHT);
+ }, []);
+
+ return (
+ <div className="snap-y snap-mandatory h-screen w-screen overflow-y-auto">
+ <div className="snap-start">
+ <PitchPage1 />
+ </div>
+ <div className="snap-start">
+ <PitchPage2 />
+ </div>
+ {/* Add more pages here with snap-start class */}
+ </div>
+ );
+}
+
+export default Pitch;