aboutsummaryrefslogtreecommitdiff
path: root/apps/web
diff options
context:
space:
mode:
authorDhravya Shah <[email protected]>2024-07-26 12:02:20 -0500
committerGitHub <[email protected]>2024-07-26 12:02:20 -0500
commit650237195fd07ff0e186e8a1808e02e31a016d37 (patch)
tree16d8afcd9f22b002284af092d7f50ca735f25230 /apps/web
parentMerge pull request #171 from JedPattersonn/jed/fix-breadcrumb (diff)
parentcatch (diff)
downloadsupermemory-650237195fd07ff0e186e8a1808e02e31a016d37.tar.xz
supermemory-650237195fd07ff0e186e8a1808e02e31a016d37.zip
Merge pull request #163 from aryasaatvik/pnpm
pnpm
Diffstat (limited to 'apps/web')
-rw-r--r--apps/web/.eslintrc.js3
-rw-r--r--apps/web/app/(auth)/layout.tsx14
-rw-r--r--apps/web/app/(auth)/onboarding/page.tsx6
-rw-r--r--apps/web/app/(dash)/home/filterSpaces.tsx4
-rw-r--r--apps/web/app/(landing)/Features/generating.tsx20
-rw-r--r--apps/web/app/(landing)/Features/index.tsx426
-rw-r--r--apps/web/app/(landing)/Showcase.tsx40
-rw-r--r--apps/web/app/actions/doers.ts18
-rw-r--r--apps/web/app/api/store/route.ts20
-rw-r--r--apps/web/package.json33
10 files changed, 296 insertions, 288 deletions
diff --git a/apps/web/.eslintrc.js b/apps/web/.eslintrc.js
index 83d36d43..f3042174 100644
--- a/apps/web/.eslintrc.js
+++ b/apps/web/.eslintrc.js
@@ -6,4 +6,7 @@ module.exports = {
parserOptions: {
project: true,
},
+ ignorePatterns: [
+ "postcss.config.js",
+ ]
};
diff --git a/apps/web/app/(auth)/layout.tsx b/apps/web/app/(auth)/layout.tsx
index 904d1987..8f45efbc 100644
--- a/apps/web/app/(auth)/layout.tsx
+++ b/apps/web/app/(auth)/layout.tsx
@@ -1,12 +1,12 @@
-import React from 'react';
-import { Toaster } from '@repo/ui/shadcn/sonner';
+import React from "react";
+import { Toaster } from "@repo/ui/shadcn/sonner";
function Layout({ children }: { children: React.ReactNode }) {
- return (
- <div>
- {children} <Toaster />
- </div>
- );
+ return (
+ <div>
+ {children} <Toaster />
+ </div>
+ );
}
export default Layout;
diff --git a/apps/web/app/(auth)/onboarding/page.tsx b/apps/web/app/(auth)/onboarding/page.tsx
index 10dd2325..df5b83d6 100644
--- a/apps/web/app/(auth)/onboarding/page.tsx
+++ b/apps/web/app/(auth)/onboarding/page.tsx
@@ -10,7 +10,7 @@ import { CheckIcon, PlusCircleIcon } from "@heroicons/react/24/outline";
import { motion } from "framer-motion";
import { useEffect, useState } from "react";
import { toast } from "sonner";
-import { completeOnboarding, createMemory } from "@repo/web/app/actions/doers";
+import { completeOnboarding, createMemory } from "@/app/actions/doers";
import { useRouter } from "next/navigation";
import Logo from "../../../public/logo.svg";
import Image from "next/image";
@@ -28,7 +28,9 @@ export default function Home() {
if (currStep > 3) {
updateDb().then(() => {
push("/home?q=what%20is%20supermemory");
- });
+ }).catch((e) => {
+ console.error(e);
+ });
}
}, [currStep]);
diff --git a/apps/web/app/(dash)/home/filterSpaces.tsx b/apps/web/app/(dash)/home/filterSpaces.tsx
index 9896141c..ec90a29a 100644
--- a/apps/web/app/(dash)/home/filterSpaces.tsx
+++ b/apps/web/app/(dash)/home/filterSpaces.tsx
@@ -62,7 +62,9 @@ export function FilterSpaces({
placeholder={selectedSpaces.length ? "" : "Search in Spaces"}
onKeyDown={handleKeyDown}
className="text-white peer placeholder:text-white"
- onChangeCapture={(e) => setInput(e.currentTarget.value)}
+ onChangeCapture={(e: React.ChangeEvent<HTMLInputElement>) =>
+ setInput(e.target.value)
+ }
value={input}
/>
</div>
diff --git a/apps/web/app/(landing)/Features/generating.tsx b/apps/web/app/(landing)/Features/generating.tsx
index 6dd0b231..0efdde41 100644
--- a/apps/web/app/(landing)/Features/generating.tsx
+++ b/apps/web/app/(landing)/Features/generating.tsx
@@ -1,16 +1,16 @@
import { Loader, Loader2 } from "lucide-react";
const Generating = ({ className }: { className?: string }) => {
- return (
- <div
- className={`flex items-center md:h-[3.5rem] px-6 bg-n-8/80 rounded-[1.7rem] ${
- className || ""
- } text-base`}
- >
- <Loader2 className="w-5 h-5 mr-2" />
- Searching your second brain...
- </div>
- );
+ return (
+ <div
+ className={`flex items-center md:h-[3.5rem] px-6 bg-n-8/80 rounded-[1.7rem] ${
+ className || ""
+ } text-base`}
+ >
+ <Loader2 className="w-5 h-5 mr-2" />
+ Searching your second brain...
+ </div>
+ );
};
export default Generating;
diff --git a/apps/web/app/(landing)/Features/index.tsx b/apps/web/app/(landing)/Features/index.tsx
index 7f1a4ccb..cc307374 100644
--- a/apps/web/app/(landing)/Features/index.tsx
+++ b/apps/web/app/(landing)/Features/index.tsx
@@ -5,219 +5,219 @@ import Image from "next/image";
import { AnimatedBeamShow } from "../CardPatterns/AnimatedBeamWithOutput";
const Services = () => {
- return (
- <div id="how-to-use">
- <div className="container">
- <div className="mr-auto max-w-5xl">
- <h1 className="mr-auto text-left font-geistSans tracking-tighter text-4xl md:text-5xl lg:text-6xl text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
- Sounds super cool? There's more.
- </h1>
- <p className="mb-10 ml-auto text-lg tracking-tight text-left font-nomral"></p>
- </div>
-
- <div className="relative bg-page-gradient">
- <div className="flex overflow-hidden relative items-stretch p-8 mb-5 rounded-3xl border lg:p-20 z-1 h-[55rem] md:h-[45rem] border-white/20 xl:h-[46rem]">
- <img
- src="/images/tailwind-bg-gradient.avif"
- className="absolute top-0 right-0 opacity-100 z-2"
- />
- <img
- src="/images/tailwind-bg-gradient.avif"
- className="absolute top-0 right-0 opacity-100 z-2"
- />
- <div className="absolute top-0 left-0 w-full h-full md:w-3/5 xl:w-auto">
- <img
- className="object-cover w-full h-full md:object-right"
- width={800}
- alt="Smartest AI"
- height={730}
- src={"/images/service-1.png"}
- />
- </div>
-
- <div className="relative ml-auto z-1 max-w-[17rem]">
- <h4 className="mb-4 text-3xl md:text-4xl">
- We paid attention to details.
- </h4>
- <p className="body-2 mb-[3rem] text-n-3">
- a small team of 4 student developers who have one mission.{" "}
- <br />
- Make the best second brain for everyone.
- </p>
- <ul className="text-lg">
- {supermemoryPoints.map((item, index) => (
- <li
- key={index}
- className="flex items-start py-4 border-t border-white/20"
- >
- <CheckIcon className="inline-flex justify-center items-center mt-2 ml-2 w-4 h-4 rounded-full text-slate-200 size-4" />
- {/* <img width={24} height={24} src={check} /> */}
- <p className="ml-4">{item}</p>
- </li>
- ))}
- </ul>
- </div>
-
- <Generating className="absolute right-4 bottom-4 left-4 border lg:bottom-8 lg-right-auto lg:left-1/2 lg:-translate-x-1/2 border-n-1/10" />
- </div>
-
- <div className="grid relative gap-5 lg:grid-cols-2 z-1">
- <div className="overflow-hidden flex flex-col md:flex-row md:block relative rounded-3xl border min-h-[34rem] bg-hero-gradient bg-slate-950/10 border-white/10">
- <div className="md:absolute inset-0">
- <div className="absolute -z-1 inset-0 h-[600px] w-full bg-transparent opacity-5 bg-[linear-gradient(to_right,#f0f0f0_1px,transparent_1px),linear-gradient(to_bottom,#f0f0f0_1px,transparent_1px)] bg-[size:6rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]"></div>
-
- <Image
- src="/images/landing_integrations.png"
- className="object-contain w-full h-full"
- width={630}
- height={750}
- alt="robot"
- />
- </div>
-
- <div className="flex md:absolute md:mt-4 lg:-mt-20 inset-0 flex-col md:justify-end justify-center items-center md:items-start p-8 bg-glass-gradient">
- <h4 className="text-3xl tracking-tight mb-2 text-center text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
- Supermemory works everywhere you are.
- </h4>
- <p className="max-w-lg text-lg font-normal tracking-tighter text-gray-400 mb-[3rem]">
- We already have integrations for Telegram and Twitter (X),
- with whatsapp and SMS coming soon. So you can add and query
- data in a private manner, from anywhere.
- </p>
- <a
- href="/signin"
- className="inline-flex justify-center items-center py-4 px-10 w-full text-center bg-transparent bg-gradient-to-tr to-transparent rounded-xl transition-colors sm:w-auto mt-[-20px] bg-glass-gradient group from-zinc-300/5 via-gray-400/5 border-white/10 border-[1px] hover:bg-transparent/10"
- >
- Get started
- <ChevronRight className="ml-2 w-4 h-4 duration-300 group-hover:translate-x-1" />
- </a>
- </div>
- </div>
-
- <div
- style={{
- background:
- "linear-gradient(143.6deg, rgba(192, 132, 252, 0) 20.79%, rgba(140, 121, 249, 0.3) 60.92%, rgba(140, 121, 249, 0) 80.35%)",
- }}
- className="overflow-hidden relative py-4 rounded-3xl group bg-glass-gradient lg:min-h-[30rem]"
- >
- <div className="relative py-12 px-4 xl:px-8">
- <h4 className="text-3xl tracking-tight mb-2 text-left text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
- Privacy First
- </h4>
- <p className="text-lg text-gray-400 body-2 mb-[2rem]">
- We use state-of-the art technology and providers to make sure
- that your data is completely safe and secure, and only store
- what's absolutely needed.
- </p>
- </div>
-
- <div className="overflow-hidden relative rounded-xl h-[20rem] md:h-[25rem]">
- <img
- src={"/images/landing_vault.png"}
- className="object-cover w-full h-full transition-all duration-500 ease-linear transform group-hover:rotate-3"
- width={520}
- height={400}
- alt="vault image"
- />
- </div>
-
- <Gradient opacity={5} />
- </div>
- </div>
-
- <div
- style={{
- background:
- "linear-gradient(143.6deg, rgba(192, 132, 252, 0) 20.79%, rgba(140, 121, 249, 0.2) 40.92%, rgba(140, 121, 249, 0) 80.35%)",
- }}
- className="flex overflow-hidden relative items-center p-8 mt-5 mb-5 rounded-3xl border lg:p-20 bg-page-gradient z-1 h-[38rem] border-white/20 xl:h-[28rem] dark:[box-shadow:0_-20px_80px_-20px_#8686f01f_inset]"
- >
- <img
- src="/images/tailwind-bg-gradient.avif"
- className="absolute top-0 right-0 opacity-60 z-2"
- />
-
- <div className="absolute top-0 right-0 left-0 mx-auto w-full h-full xl:w-auto">
- <img
- className="object-cover z-40 w-full h-full border-r-2 md:scale-110 border-r-white/5"
- width={800}
- alt="Github"
- height={730}
- src={"/images/github.webp"}
- />
- </div>
-
- <div className="absolute right-0 left-0 bottom-5 mx-auto mt-20 text-center z-1 p-8">
- <h4 className="mb-4 text-4xl tracking-tighter text-white lg:text-5xl">
- Proudly <br /> Open Source
- </h4>
- <p className="text-lg body-2 mb-[3rem] ">
- You dont even need to trust us. Just deploy it yourself and
- enjoy the benefits.
- </p>
- <a
- href="https://git.new/memory"
- className="inline-flex gap-x-1 justify-center items-center py-4 px-10 text-center bg-transparent bg-gradient-to-tr to-transparent rounded-xl transition-colors sm:w-auto w-fit mt-[-20px] bg-glass-gradient group from-zinc-300/5 via-gray-400/5 border-white/10 border-[1px] hover:bg-transparent/10"
- >
- <GithubIcon className="inline-flex justify-center items-center w-5 h-5" />{" "}
- Star us on Github
- <ChevronRight className="ml-2 w-4 h-4 duration-300 group-hover:translate-x-1" />
- </a>
- </div>
- </div>
-
- <div className="grid relative gap-5 lg:grid-cols-2 z-1">
- <div className="overflow-hidden relative rounded-3xl border max-h-[20rem] min-h-[40rem] md:min-h-[33rem] bg-hero-gradient bg-slate-950/10 border-white/10">
- <div className="absolute inset-0">
- <AnimatedBeamShow />
- </div>
-
- <div className="flex absolute inset-0 flex-col justify-end items-start p-8 pl-10 mt-4 lg:-mt-20 translate-y-10 md:translate-y-0 bg-glass-gradient">
- <h4 className="text-3xl tracking-tight mb-2 text-center text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
- Bringing content in is easy.
- </h4>
- <p className="max-w-lg text-lg font-normal tracking-tighter text-gray-400 mb-[3rem]">
- You can use our chrome extension, iOS shortcut, or our API to
- send content to supermemory.
- </p>
- </div>
- </div>
-
- <div className="overflow-hidden bg-page-gradient relative py-4 rounded-3xl max-h-[33rem] group lg:min-h-[30rem]">
- <div className="absolute -z-1 inset-0 h-[600px] w-full bg-transparent opacity-5 bg-[linear-gradient(to_right,#f0f0f0_1px,transparent_1px),linear-gradient(to_bottom,#f0f0f0_1px,transparent_1px)] bg-[size:6rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]"></div>
-
- <div className="relative py-12 px-4 xl:px-8">
- <h4 className="text-3xl tracking-tight mb-2 text-left text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
- Self hostable
- </h4>
- <p className="text-lg text-gray-400 body-2 mb-[2rem]">
- All the code is open source and self hostable for
- non-commercial use.
- </p>
- </div>
-
- <div className="overflow-hidden relative mt-[-50px] mb-10 rounded-xl h-[20rem] md:h-[25rem]">
- <img
- src={
- "https://www.koyeb.com/_next/image?url=%2Fimages%2Fillustrations%2Fhome-scale-mesh.webp&w=384&q=75"
- }
- className="object-cover w-full h-full transition-all duration-500 ease-linear transform group-hover:rotate-3"
- width={1000}
- height={1000}
- alt="Scary robot"
- />
- </div>
-
- <Gradient opacity={5} />
- </div>
- </div>
-
- <Gradient />
- </div>
- </div>
- </div>
- );
+ return (
+ <div id="how-to-use">
+ <div className="container">
+ <div className="mr-auto max-w-5xl">
+ <h1 className="mr-auto text-left font-geistSans tracking-tighter text-4xl md:text-5xl lg:text-6xl text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
+ Sounds super cool? There's more.
+ </h1>
+ <p className="mb-10 ml-auto text-lg tracking-tight text-left font-nomral"></p>
+ </div>
+
+ <div className="relative bg-page-gradient">
+ <div className="flex overflow-hidden relative items-stretch p-8 mb-5 rounded-3xl border lg:p-20 z-1 h-[55rem] md:h-[45rem] border-white/20 xl:h-[46rem]">
+ <img
+ src="/images/tailwind-bg-gradient.avif"
+ className="absolute top-0 right-0 opacity-100 z-2"
+ />
+ <img
+ src="/images/tailwind-bg-gradient.avif"
+ className="absolute top-0 right-0 opacity-100 z-2"
+ />
+ <div className="absolute top-0 left-0 w-full h-full md:w-3/5 xl:w-auto">
+ <img
+ className="object-cover w-full h-full md:object-right"
+ width={800}
+ alt="Smartest AI"
+ height={730}
+ src={"/images/service-1.png"}
+ />
+ </div>
+
+ <div className="relative ml-auto z-1 max-w-[17rem]">
+ <h4 className="mb-4 text-3xl md:text-4xl">
+ We paid attention to details.
+ </h4>
+ <p className="body-2 mb-[3rem] text-n-3">
+ a small team of 4 student developers who have one mission.{" "}
+ <br />
+ Make the best second brain for everyone.
+ </p>
+ <ul className="text-lg">
+ {supermemoryPoints.map((item, index) => (
+ <li
+ key={index}
+ className="flex items-start py-4 border-t border-white/20"
+ >
+ <CheckIcon className="inline-flex justify-center items-center mt-2 ml-2 w-4 h-4 rounded-full text-slate-200 size-4" />
+ {/* <img width={24} height={24} src={check} /> */}
+ <p className="ml-4">{item}</p>
+ </li>
+ ))}
+ </ul>
+ </div>
+
+ <Generating className="absolute right-4 bottom-4 left-4 border lg:bottom-8 lg-right-auto lg:left-1/2 lg:-translate-x-1/2 border-n-1/10" />
+ </div>
+
+ <div className="grid relative gap-5 lg:grid-cols-2 z-1">
+ <div className="overflow-hidden flex flex-col md:flex-row md:block relative rounded-3xl border min-h-[34rem] bg-hero-gradient bg-slate-950/10 border-white/10">
+ <div className="md:absolute inset-0">
+ <div className="absolute -z-1 inset-0 h-[600px] w-full bg-transparent opacity-5 bg-[linear-gradient(to_right,#f0f0f0_1px,transparent_1px),linear-gradient(to_bottom,#f0f0f0_1px,transparent_1px)] bg-[size:6rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]"></div>
+
+ <Image
+ src="/images/landing_integrations.png"
+ className="object-contain w-full h-full"
+ width={630}
+ height={750}
+ alt="robot"
+ />
+ </div>
+
+ <div className="flex md:absolute md:mt-4 lg:-mt-20 inset-0 flex-col md:justify-end justify-center items-center md:items-start p-8 bg-glass-gradient">
+ <h4 className="text-3xl tracking-tight mb-2 text-center text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
+ Supermemory works everywhere you are.
+ </h4>
+ <p className="max-w-lg text-lg font-normal tracking-tighter text-gray-400 mb-[3rem]">
+ We already have integrations for Telegram and Twitter (X),
+ with whatsapp and SMS coming soon. So you can add and query
+ data in a private manner, from anywhere.
+ </p>
+ <a
+ href="/signin"
+ className="inline-flex justify-center items-center py-4 px-10 w-full text-center bg-transparent bg-gradient-to-tr to-transparent rounded-xl transition-colors sm:w-auto mt-[-20px] bg-glass-gradient group from-zinc-300/5 via-gray-400/5 border-white/10 border-[1px] hover:bg-transparent/10"
+ >
+ Get started
+ <ChevronRight className="ml-2 w-4 h-4 duration-300 group-hover:translate-x-1" />
+ </a>
+ </div>
+ </div>
+
+ <div
+ style={{
+ background:
+ "linear-gradient(143.6deg, rgba(192, 132, 252, 0) 20.79%, rgba(140, 121, 249, 0.3) 60.92%, rgba(140, 121, 249, 0) 80.35%)",
+ }}
+ className="overflow-hidden relative py-4 rounded-3xl group bg-glass-gradient lg:min-h-[30rem]"
+ >
+ <div className="relative py-12 px-4 xl:px-8">
+ <h4 className="text-3xl tracking-tight mb-2 text-left text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
+ Privacy First
+ </h4>
+ <p className="text-lg text-gray-400 body-2 mb-[2rem]">
+ We use state-of-the art technology and providers to make sure
+ that your data is completely safe and secure, and only store
+ what's absolutely needed.
+ </p>
+ </div>
+
+ <div className="overflow-hidden relative rounded-xl h-[20rem] md:h-[25rem]">
+ <img
+ src={"/images/landing_vault.png"}
+ className="object-cover w-full h-full transition-all duration-500 ease-linear transform group-hover:rotate-3"
+ width={520}
+ height={400}
+ alt="vault image"
+ />
+ </div>
+
+ <Gradient opacity={5} />
+ </div>
+ </div>
+
+ <div
+ style={{
+ background:
+ "linear-gradient(143.6deg, rgba(192, 132, 252, 0) 20.79%, rgba(140, 121, 249, 0.2) 40.92%, rgba(140, 121, 249, 0) 80.35%)",
+ }}
+ className="flex overflow-hidden relative items-center p-8 mt-5 mb-5 rounded-3xl border lg:p-20 bg-page-gradient z-1 h-[38rem] border-white/20 xl:h-[28rem] dark:[box-shadow:0_-20px_80px_-20px_#8686f01f_inset]"
+ >
+ <img
+ src="/images/tailwind-bg-gradient.avif"
+ className="absolute top-0 right-0 opacity-60 z-2"
+ />
+
+ <div className="absolute top-0 right-0 left-0 mx-auto w-full h-full xl:w-auto">
+ <img
+ className="object-cover z-40 w-full h-full border-r-2 md:scale-110 border-r-white/5"
+ width={800}
+ alt="Github"
+ height={730}
+ src={"/images/github.webp"}
+ />
+ </div>
+
+ <div className="absolute right-0 left-0 bottom-5 mx-auto mt-20 text-center z-1 p-8">
+ <h4 className="mb-4 text-4xl tracking-tighter text-white lg:text-5xl">
+ Proudly <br /> Open Source
+ </h4>
+ <p className="text-lg body-2 mb-[3rem] ">
+ You dont even need to trust us. Just deploy it yourself and
+ enjoy the benefits.
+ </p>
+ <a
+ href="https://git.new/memory"
+ className="inline-flex gap-x-1 justify-center items-center py-4 px-10 text-center bg-transparent bg-gradient-to-tr to-transparent rounded-xl transition-colors sm:w-auto w-fit mt-[-20px] bg-glass-gradient group from-zinc-300/5 via-gray-400/5 border-white/10 border-[1px] hover:bg-transparent/10"
+ >
+ <GithubIcon className="inline-flex justify-center items-center w-5 h-5" />{" "}
+ Star us on Github
+ <ChevronRight className="ml-2 w-4 h-4 duration-300 group-hover:translate-x-1" />
+ </a>
+ </div>
+ </div>
+
+ <div className="grid relative gap-5 lg:grid-cols-2 z-1">
+ <div className="overflow-hidden relative rounded-3xl border max-h-[20rem] min-h-[40rem] md:min-h-[33rem] bg-hero-gradient bg-slate-950/10 border-white/10">
+ <div className="absolute inset-0">
+ <AnimatedBeamShow />
+ </div>
+
+ <div className="flex absolute inset-0 flex-col justify-end items-start p-8 pl-10 mt-4 lg:-mt-20 translate-y-10 md:translate-y-0 bg-glass-gradient">
+ <h4 className="text-3xl tracking-tight mb-2 text-center text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
+ Bringing content in is easy.
+ </h4>
+ <p className="max-w-lg text-lg font-normal tracking-tighter text-gray-400 mb-[3rem]">
+ You can use our chrome extension, iOS shortcut, or our API to
+ send content to supermemory.
+ </p>
+ </div>
+ </div>
+
+ <div className="overflow-hidden bg-page-gradient relative py-4 rounded-3xl max-h-[33rem] group lg:min-h-[30rem]">
+ <div className="absolute -z-1 inset-0 h-[600px] w-full bg-transparent opacity-5 bg-[linear-gradient(to_right,#f0f0f0_1px,transparent_1px),linear-gradient(to_bottom,#f0f0f0_1px,transparent_1px)] bg-[size:6rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]"></div>
+
+ <div className="relative py-12 px-4 xl:px-8">
+ <h4 className="text-3xl tracking-tight mb-2 text-left text-transparent bg-clip-text bg-[linear-gradient(180deg,_#FFF_0%,_rgba(255,_255,_255,_0.00)_202.08%)]">
+ Self hostable
+ </h4>
+ <p className="text-lg text-gray-400 body-2 mb-[2rem]">
+ All the code is open source and self hostable for
+ non-commercial use.
+ </p>
+ </div>
+
+ <div className="overflow-hidden relative mt-[-50px] mb-10 rounded-xl h-[20rem] md:h-[25rem]">
+ <img
+ src={
+ "https://www.koyeb.com/_next/image?url=%2Fimages%2Fillustrations%2Fhome-scale-mesh.webp&w=384&q=75"
+ }
+ className="object-cover w-full h-full transition-all duration-500 ease-linear transform group-hover:rotate-3"
+ width={1000}
+ height={1000}
+ alt="Scary robot"
+ />
+ </div>
+
+ <Gradient opacity={5} />
+ </div>
+ </div>
+
+ <Gradient />
+ </div>
+ </div>
+ </div>
+ );
};
export default Services;
diff --git a/apps/web/app/(landing)/Showcase.tsx b/apps/web/app/(landing)/Showcase.tsx
index 36cbf0c3..e4c5b7af 100644
--- a/apps/web/app/(landing)/Showcase.tsx
+++ b/apps/web/app/(landing)/Showcase.tsx
@@ -148,26 +148,26 @@ function Feature({
}
function FeaturesMobile() {
- return (
- <div className="-mx-4 mt-20 flex flex-col gap-y-10 overflow-hidden px-4 sm:-mx-6 sm:px-6 lg:hidden">
- {features.map((feature) => (
- <div key={feature.summary}>
- <Feature feature={feature} className="mx-auto max-w-2xl" isActive />
- <div className="relative mt-10 pb-10">
- <div className="absolute -inset-x-4 bottom-0 top-8 bg-page-gradient sm:-inset-x-6" />
- <div className="relative mx-auto lg:w-[52.75rem] md:w-[40rem] overflow-hidden rounded-xl bg-glass-gradient shadow-lg shadow-gray-200/5 ring-1 ring-slate-500/10">
- <img
- className="w-full"
- src={`/images/${feature.image}`}
- alt=""
- sizes="52.75rem"
- />
- </div>
- </div>
- </div>
- ))}
- </div>
- );
+ return (
+ <div className="-mx-4 mt-20 flex flex-col gap-y-10 overflow-hidden px-4 sm:-mx-6 sm:px-6 lg:hidden">
+ {features.map((feature) => (
+ <div key={feature.summary}>
+ <Feature feature={feature} className="mx-auto max-w-2xl" isActive />
+ <div className="relative mt-10 pb-10">
+ <div className="absolute -inset-x-4 bottom-0 top-8 bg-page-gradient sm:-inset-x-6" />
+ <div className="relative mx-auto lg:w-[52.75rem] md:w-[40rem] overflow-hidden rounded-xl bg-glass-gradient shadow-lg shadow-gray-200/5 ring-1 ring-slate-500/10">
+ <img
+ className="w-full"
+ src={`/images/${feature.image}`}
+ alt=""
+ sizes="52.75rem"
+ />
+ </div>
+ </div>
+ </div>
+ ))}
+ </div>
+ );
}
function FeaturesDesktop() {
diff --git a/apps/web/app/actions/doers.ts b/apps/web/app/actions/doers.ts
index da2bfb5f..ff0ed5d9 100644
--- a/apps/web/app/actions/doers.ts
+++ b/apps/web/app/actions/doers.ts
@@ -324,7 +324,7 @@ export const createMemory = async (input: {
};
}
- let contentId: number | undefined;
+ let contentId: number;
const response = (await vectorSaveResponse.json()) as {
status: string;
@@ -381,6 +381,14 @@ export const createMemory = async (input: {
revalidatePath("/memories");
revalidatePath("/home");
+ if (!insertResponse[0]?.id) {
+ return {
+ success: false,
+ data: 0,
+ error: "Something went wrong while saving the document to the database",
+ };
+ }
+
contentId = insertResponse[0]?.id;
} catch (e) {
const error = e as Error;
@@ -405,14 +413,6 @@ export const createMemory = async (input: {
};
}
- if (!contentId) {
- return {
- success: false,
- data: 0,
- error: "Something went wrong while saving the document to the database",
- };
- }
-
if (storeToSpaces.length > 0) {
// Adding the many-to-many relationship between content and spaces
const spaceData = await db
diff --git a/apps/web/app/api/store/route.ts b/apps/web/app/api/store/route.ts
index 992c2a0e..13cef19e 100644
--- a/apps/web/app/api/store/route.ts
+++ b/apps/web/app/api/store/route.ts
@@ -75,7 +75,7 @@ const createMemoryFromAPI = async (input: {
};
}
- let contentId: number | undefined;
+ let contentId: number;
const saveToDbUrl =
(input.data.url.split("#supermemory-user-")[0] ?? input.data.url) +
@@ -102,7 +102,15 @@ const createMemoryFromAPI = async (input: {
})
.returning({ id: storedContent.id });
- contentId = insertResponse[0]?.id;
+ if (!insertResponse[0]?.id) {
+ return {
+ success: false,
+ data: 0,
+ error: "Failed to save to database",
+ };
+ }
+
+ contentId = insertResponse[0].id;
} catch (e) {
const error = e as Error;
console.log("Error: ", error.message);
@@ -122,14 +130,6 @@ const createMemoryFromAPI = async (input: {
};
}
- if (!contentId) {
- return {
- success: false,
- data: 0,
- error: "Failed to save to database",
- };
- }
-
if (input.data.spaces.length > 0) {
// Adding the many-to-many relationship between content and spaces
const spaceData = await db
diff --git a/apps/web/package.json b/apps/web/package.json
index 7d97fe7c..98016d8c 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -2,26 +2,28 @@
"name": "@repo/web",
"version": "1.0.0",
"private": true,
- "packageManager": "[email protected]",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint . --max-warnings 0",
+ "tsc": "tsc --noEmit --incremental",
"cf-typegen": "wrangler types --env-interface CloudflareEnv env.d.ts",
- "pages:build": "npx @cloudflare/next-on-pages",
- "preview": "npm run pages:build && wrangler pages dev",
- "deploy": "npm run pages:build && wrangler pages deploy --branch main",
- "schema-update": "bunx drizzle-kit generate sqlite",
- "update-local-db": "bunx wrangler d1 execute dev-d1-anycontext --local",
- "update-prod-db": "bunx wrangler d1 execute prod-d1-supermemory --remote"
+ "pages:build": "pnpm dlx @cloudflare/next-on-pages",
+ "preview": "pnpm run pages:build && wrangler pages dev",
+ "deploy": "pnpm run pages:build && wrangler pages deploy --branch main",
+ "schema-update": "drizzle-kit generate sqlite",
+ "update-local-db": "wrangler d1 execute dev-d1-anycontext --local",
+ "update-prod-db": "wrangler d1 execute prod-d1-supermemory --remote"
},
"dependencies": {
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-slot": "^1.1.0",
"@sentry/nextjs": "^8",
+ "clsx": "^2.1.1",
"cmdk": "^1.0.0",
+ "drizzle-orm": "0.30.0",
"lowlight": "^3.1.0",
"million": "^3.1.6",
"next": "^14.1.1",
@@ -33,21 +35,20 @@
"use-debounce": "^10.0.1"
},
"devDependencies": {
+ "@cloudflare/next-on-pages": "1",
"@next/eslint-plugin-next": "^14.1.1",
"@repo/eslint-config": "*",
- "@repo/typescript-config": "*",
- "@repo/tailwind-config": "*",
"@repo/shared-types": "*",
+ "@repo/tailwind-config": "*",
+ "@repo/typescript-config": "*",
"@types/eslint": "^8.56.5",
"@types/node": "^20.11.24",
"@types/react": "^18.2.61",
"@types/react-dom": "^18.2.19",
+ "drizzle-kit": "0.21.2",
"eslint": "^8.57.0",
- "typescript": "^5.3.3"
- },
- "trustedDependencies": [
- "esbuild",
- "workerd",
- "xycolors"
- ]
+ "postcss": "^8.4.38",
+ "typescript": "^5.3.3",
+ "wrangler": "^3.66.0"
+ }
}