From 05e8bd1161cefd3fb9800bd094b886a86f328830 Mon Sep 17 00:00:00 2001 From: Mahesh Sanikommmu Date: Thu, 30 Oct 2025 09:24:06 -0700 Subject: [PATCH] design review improvements --- apps/web/app/onboarding/page.tsx | 2 +- .../web/app/onboarding/setup/chat-sidebar.tsx | 20 ++--- .../onboarding/setup/integrations-step.tsx | 14 ++-- .../onboarding/setup/relatable-question.tsx | 15 ++-- .../app/onboarding/welcome/continue-step.tsx | 8 +- .../app/onboarding/welcome/features-step.tsx | 31 ++++--- .../app/onboarding/welcome/memories-step.tsx | 12 +-- apps/web/components/mcp-detail-view.tsx | 76 +++++++++++++----- apps/web/globals.css | 14 ++++ apps/web/public/onboarding/mcp.png | Bin 0 -> 39215 bytes apps/web/utils/fonts.ts | 16 ++++ packages/ui/components/button.tsx | 1 + 12 files changed, 139 insertions(+), 70 deletions(-) create mode 100644 apps/web/public/onboarding/mcp.png diff --git a/apps/web/app/onboarding/page.tsx b/apps/web/app/onboarding/page.tsx index d1a91123..da64cd5d 100644 --- a/apps/web/app/onboarding/page.tsx +++ b/apps/web/app/onboarding/page.tsx @@ -169,7 +169,7 @@ export default function OnboardingPage() {
{isWelcomeFlow && ( )} diff --git a/apps/web/app/onboarding/setup/chat-sidebar.tsx b/apps/web/app/onboarding/setup/chat-sidebar.tsx index b9d9bb81..a8adc2b8 100644 --- a/apps/web/app/onboarding/setup/chat-sidebar.tsx +++ b/apps/web/app/onboarding/setup/chat-sidebar.tsx @@ -8,7 +8,7 @@ import { PanelRightCloseIcon, SendIcon } from "lucide-react" import { collectValidUrls } from "@/utils/url-helpers" import { $fetch } from "@lib/api" import { cn } from "@lib/utils" -import { dmSansFont } from "@/utils/fonts" +import { dmSansClassName } from "@/utils/fonts" interface ChatSidebarProps { formData: { @@ -268,13 +268,13 @@ export function ChatSidebar({ formData }: ChatSidebarProps) { key="closed" className={cn( "absolute top-0 right-0 flex items-start justify-start m-4", - dmSansFont.className, + dmSansClassName(), )} layoutId="chat-toggle-button" >
{messages.length === 0 && !isLoading && !formData && ( -
+
Waiting for your input
@@ -325,7 +325,7 @@ export function ChatSidebar({ formData }: ChatSidebarProps) { className="flex items-start gap-2" > {msg.type === "waiting" ? ( -
+
{msg.message}
@@ -374,7 +374,7 @@ export function ChatSidebar({ formData }: ChatSidebarProps) { )} {memory.description && ( -

+

{memory.description}

)} @@ -403,13 +403,13 @@ export function ChatSidebar({ formData }: ChatSidebarProps) { onChange={(e) => setMessage(e.target.value)} onKeyDown={handleKeyDown} placeholder="Chat with your Supermemory" - className="w-full text-foreground placeholder:text-foreground/20 rounded-sm outline-none resize-none text-base leading-relaxed bg-transparent px-2 h-10" + className="w-full text-white placeholder:text-white/20 rounded-sm outline-none resize-none text-base leading-relaxed bg-transparent px-2 h-10" />
-
+
{integrationCards.map((card) => { const isClickable = card.title === "Connect to AI" @@ -81,7 +83,9 @@ export function IntegrationsStep() {
-

+

Grow with your supermemory

-

+

I learn and personalize over time, so every interaction feels natural.

@@ -89,12 +88,10 @@ export function FeaturesStep() { initial={{ opacity: 0, y: 10 }} > diff --git a/apps/web/app/onboarding/welcome/memories-step.tsx b/apps/web/app/onboarding/welcome/memories-step.tsx index 044ddd2b..6fdd8610 100644 --- a/apps/web/app/onboarding/welcome/memories-step.tsx +++ b/apps/web/app/onboarding/welcome/memories-step.tsx @@ -65,7 +65,7 @@ export function MemoriesStep({ onSubmit }: MemoriesStepProps) { placeholder="x.com/yourhandle" value={twitterHandle} onChange={(e) => setTwitterHandle(e.target.value)} - className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-[#8A8A8A] focus:outline-none focus:border-[#4A4A4A] transition-colors" + className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-onboarding focus:outline-none focus:border-[#4A4A4A] transition-colors" />
@@ -82,7 +82,7 @@ export function MemoriesStep({ onSubmit }: MemoriesStepProps) { placeholder="linkedin.com/in/yourname" value={linkedinProfile} onChange={(e) => setLinkedinProfile(e.target.value)} - className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-[#8A8A8A] focus:outline-none focus:border-[#4A4A4A] transition-colors" + className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-onboarding focus:outline-none focus:border-[#4A4A4A] transition-colors" />
@@ -99,7 +99,7 @@ export function MemoriesStep({ onSubmit }: MemoriesStepProps) { {otherLinks.map((link, index) => (
updateOtherLink(index, e.target.value)} - className="flex-1 px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-[#8A8A8A] focus:outline-none focus:border-[#4A4A4A] transition-colors" + className="flex-1 px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-onboarding focus:outline-none focus:border-[#4A4A4A] transition-colors" /> {index === otherLinks.length - 1 && otherLinks.length < 3 && ( @@ -135,7 +135,7 @@ export function MemoriesStep({ onSubmit }: MemoriesStepProps) { value={description} onChange={(e) => setDescription(e.target.value)} rows={4} - className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-[#8A8A8A] focus:outline-none focus:border-[#4A4A4A] transition-colors" + className="w-full px-4 py-2 bg-[#070E1B] border border-[#525966]/20 rounded-xl text-white placeholder-onboarding focus:outline-none focus:border-[#4A4A4A] transition-colors min-h-[4rem]" />
diff --git a/apps/web/components/mcp-detail-view.tsx b/apps/web/components/mcp-detail-view.tsx index cfa60f92..37bfd6ef 100644 --- a/apps/web/components/mcp-detail-view.tsx +++ b/apps/web/components/mcp-detail-view.tsx @@ -2,9 +2,18 @@ import { useState, useEffect } from "react" import { Button } from "@ui/components/button" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@ui/components/select" import { CircleCheckIcon, CopyIcon } from "lucide-react" import { toast } from "sonner" import { analytics } from "@/lib/analytics" +import { cn } from "@lib/utils" +import { dmSansClassName } from "@/utils/fonts" const clients = { cursor: "Cursor", @@ -65,42 +74,67 @@ export function MCPDetailView({ onBack }: MCPDetailViewProps) {
-
-

+
+

Connect your AI to supermemory MCP

-
+
-

+

MCP connects your AI apps to create and use memories directly

-
+
-

+

Auto-fetch the right context from anything you've saved

-
+
-

+

One-time setup, seamless integration across your workflow

-
-
-
+
+
+
+
1
-
-

- Select your AI client -

-
+
+
+

+ Select your AI client +

+ {selectedClient && + } +
+
{Object.entries(clients) .slice(0, 7) .map(([key, clientName]) => ( @@ -132,11 +166,11 @@ export function MCPDetailView({ onBack }: MCPDetailViewProps) {
-
+
2
-
-

+
+

Copy the installation command

{selectedClient && ( @@ -257,7 +291,7 @@ export function MCPDetailView({ onBack }: MCPDetailViewProps) {
@@ -281,7 +315,7 @@ export function MCPDetailView({ onBack }: MCPDetailViewProps) {
-
+
3
diff --git a/apps/web/globals.css b/apps/web/globals.css index 3ff20004..0fbf5557 100644 --- a/apps/web/globals.css +++ b/apps/web/globals.css @@ -1,6 +1,14 @@ @import "tailwindcss"; @plugin "@tailwindcss/typography"; +@theme { + --color-onboarding: #525966; +} + +:root { + --color-placeholder-onboarding: #525966; +} + .sm-tweet-theme .react-tweet-theme { --tweet-container-margin: 0px; } @@ -20,4 +28,10 @@ .scrollbar-thin::-webkit-scrollbar-track { background: transparent; +} + +[class*="dmSans"], +.font-dm-sans { + letter-spacing: -0.01em; + line-height: 135%; } \ No newline at end of file diff --git a/apps/web/public/onboarding/mcp.png b/apps/web/public/onboarding/mcp.png new file mode 100644 index 0000000000000000000000000000000000000000..b346ecfed8b60ec4c41d7d0278d9785111445d65 GIT binary patch literal 39215 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 bmgxTnmN4DAy)0Ri00000NkvXXu0mjf^`4XH literal 0 HcmV?d00001 diff --git a/apps/web/utils/fonts.ts b/apps/web/utils/fonts.ts index b7c96b56..661eb747 100644 --- a/apps/web/utils/fonts.ts +++ b/apps/web/utils/fonts.ts @@ -1,13 +1,29 @@ import { DM_Mono, DM_Sans } from "next/font/google" +import { cn } from "@lib/utils" +// DM Sans font export const dmSansFont = DM_Sans({ subsets: ["latin"], weight: ["400", "500", "700"], variable: "--font-dm-sans", }) +// DM Mono font export const dmMonoFont = DM_Mono({ subsets: ["latin"], weight: ["400"], variable: "--font-dm-mono", }) + +/** + * Utility function that combines dmSansFont.className with required typography styles + * (letter-spacing: -0.01em and line-height: 135%) + */ +export function dmSansClassName(additionalClasses?: string) { + return cn( + dmSansFont.className, + "tracking-[-0.01em]", + "leading-[135%]", + additionalClasses, + ) +} diff --git a/packages/ui/components/button.tsx b/packages/ui/components/button.tsx index 123ca6b7..afb7c129 100644 --- a/packages/ui/components/button.tsx +++ b/packages/ui/components/button.tsx @@ -22,6 +22,7 @@ const buttonVariants = cva( "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", link: "text-primary underline-offset-4 hover:underline", settingsNav: "cursor-pointer rounded-sm bg-transparent", + onboarding: "rounded-xl !px-6 !py-3 bg-black border border-[#161F2C] hover:bg-[#161F2C] !h-[40px] cursor-pointer text-white", }, size: { default: "h-9 px-4 py-2 has-[>svg]:px-3",