diff --git a/apps/browser-extension/entrypoints/background.ts b/apps/browser-extension/entrypoints/background.ts
index 1066e6b0..338ff671 100644
--- a/apps/browser-extension/entrypoints/background.ts
+++ b/apps/browser-extension/entrypoints/background.ts
@@ -26,12 +26,19 @@ interface SearchResponse {
export default defineBackground(() => {
let twitterImporter: TwitterImporter | null = null;
- browser.runtime.onInstalled.addListener(() => {
+ browser.runtime.onInstalled.addListener((details) => {
browser.contextMenus.create({
id: CONTEXT_MENU_IDS.SAVE_TO_SUPERMEMORY,
title: "Save to Supermemory",
contexts: ["selection", "page", "link"],
});
+
+ // Open welcome tab on first install
+ if (details.reason === "install") {
+ browser.tabs.create({
+ url: browser.runtime.getURL("/welcome.html"),
+ });
+ }
});
// Intercept Twitter requests to capture authentication headers.
diff --git a/apps/browser-extension/entrypoints/welcome/Welcome.tsx b/apps/browser-extension/entrypoints/welcome/Welcome.tsx
new file mode 100644
index 00000000..097d3abd
--- /dev/null
+++ b/apps/browser-extension/entrypoints/welcome/Welcome.tsx
@@ -0,0 +1,135 @@
+function Welcome() {
+ return (
+
+
+ {/* Header */}
+
+

+
+ Your AI-powered second brain for saving and organizing everything
+ that matters
+
+
+
+ {/* Features Section */}
+
+
What can you do with Supermemory?
+
+
+
+
💾
+
Save Any Page
+
+ Instantly save web pages, articles, and content to your personal
+ knowledge base
+
+
+
+
+
🐦
+
Import Twitter/X Bookmarks
+
+ Bring all your saved tweets and bookmarks into one organized
+ place
+
+
+
+
+
🤖
+
Import ChatGPT Memories
+
+ Keep your important AI conversations and insights accessible
+
+
+
+
+
🔍
+
AI-Powered Search
+
+ Find anything you've saved using intelligent semantic search
+
+
+
+
+
+ {/* Getting Started */}
+
+
+ Get Started in 2 Simple Steps
+
+
+
+
+
1
+
+
Login to Your Account
+
Connect your Supermemory account to start saving content
+
+
+
+
+
2
+
+
Start Saving
+
Click the extension icon on any page to save it instantly
+
+
+
+
+
+ {/* Actions */}
+
+
+
+
+
+ Need help getting started?{" "}
+
+
+
+
+
+ {/* Footer */}
+
+
+
+ );
+}
+
+export default Welcome;
diff --git a/apps/browser-extension/entrypoints/welcome/index.html b/apps/browser-extension/entrypoints/welcome/index.html
new file mode 100644
index 00000000..abaab93b
--- /dev/null
+++ b/apps/browser-extension/entrypoints/welcome/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Welcome to Supermemory
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/browser-extension/entrypoints/welcome/main.tsx b/apps/browser-extension/entrypoints/welcome/main.tsx
new file mode 100644
index 00000000..a9233deb
--- /dev/null
+++ b/apps/browser-extension/entrypoints/welcome/main.tsx
@@ -0,0 +1,13 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import Welcome from "./Welcome";
+import "./welcome.css";
+
+const rootElement = document.getElementById("root");
+if (rootElement) {
+ ReactDOM.createRoot(rootElement).render(
+
+
+ ,
+ );
+}
diff --git a/apps/browser-extension/entrypoints/welcome/welcome.css b/apps/browser-extension/entrypoints/welcome/welcome.css
new file mode 100644
index 00000000..3362fffe
--- /dev/null
+++ b/apps/browser-extension/entrypoints/welcome/welcome.css
@@ -0,0 +1,310 @@
+/* Custom Font Definitions */
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 300;
+ font-display: swap;
+ src: url('/fonts/SpaceGrotesk-Light.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('/fonts/SpaceGrotesk-Regular.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 500;
+ font-display: swap;
+ src: url('/fonts/SpaceGrotesk-Medium.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url('/fonts/SpaceGrotesk-SemiBold.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url('/fonts/SpaceGrotesk-Bold.ttf') format('truetype');
+}
+
+/* Welcome Page Styles */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
+ background: #ffffff;
+ color: #000000;
+ line-height: 1.5;
+}
+
+.welcome-container {
+ min-height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 32px;
+ background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
+}
+
+.welcome-content {
+ max-width: 800px;
+ width: 100%;
+ text-align: center;
+}
+
+/* Header Styles */
+.welcome-header {
+ margin-bottom: 48px;
+}
+
+.welcome-logo {
+ height: 64px;
+ margin-bottom: 24px;
+}
+
+.welcome-title {
+ font-size: 32px;
+ font-weight: 700;
+ color: #000000;
+ margin-bottom: 16px;
+}
+
+.welcome-subtitle {
+ font-size: 18px;
+ color: #6c757d;
+ font-weight: 400;
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+/* Features Section */
+.welcome-features {
+ margin-bottom: 48px;
+}
+
+.features-title {
+ font-size: 24px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 32px;
+}
+
+.features-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+ gap: 24px;
+ margin-bottom: 32px;
+}
+
+.feature-card {
+ background: #ffffff;
+ border: 1px solid #e9ecef;
+ border-radius: 12px;
+ padding: 24px;
+ text-align: center;
+ transition: all 0.2s ease;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.feature-card:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
+ border-color: #ced4da;
+}
+
+.feature-icon {
+ font-size: 32px;
+ margin-bottom: 16px;
+ display: block;
+}
+
+.feature-card h3 {
+ font-size: 18px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 12px;
+}
+
+.feature-card p {
+ font-size: 14px;
+ color: #6c757d;
+ line-height: 1.4;
+}
+
+/* Getting Started Section */
+.welcome-getting-started {
+ margin-bottom: 48px;
+}
+
+.getting-started-title {
+ font-size: 24px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 32px;
+}
+
+.steps {
+ display: flex;
+ justify-content: center;
+ gap: 32px;
+ flex-wrap: wrap;
+}
+
+.step {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ max-width: 300px;
+ text-align: left;
+}
+
+.step-number {
+ width: 48px;
+ height: 48px;
+ background: #374151;
+ color: white;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 18px;
+ font-weight: 600;
+ flex-shrink: 0;
+}
+
+.step-content h3 {
+ font-size: 16px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 4px;
+}
+
+.step-content p {
+ font-size: 14px;
+ color: #6c757d;
+ line-height: 1.3;
+}
+
+/* Actions Section */
+.welcome-actions {
+ margin-bottom: 32px;
+}
+
+.login-primary-btn {
+ width: auto;
+ min-width: 200px;
+ padding: 16px 32px;
+ background-color: #374151;
+ color: white;
+ border: none;
+ border-radius: 24px;
+ font-size: 16px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: background-color 0.2s ease;
+ margin-bottom: 16px;
+ outline: none;
+}
+
+.login-primary-btn:hover:not(:disabled) {
+ background-color: #1f2937;
+}
+
+.login-primary-btn:disabled {
+ background-color: #9e9e9e;
+ cursor: not-allowed;
+}
+
+.welcome-help {
+ margin-top: 16px;
+}
+
+.help-text {
+ font-size: 14px;
+ color: #6c757d;
+ margin: 0;
+}
+
+.help-link {
+ background: none;
+ border: none;
+ color: #4285f4;
+ cursor: pointer;
+ text-decoration: underline;
+ font-size: 14px;
+ padding: 0;
+ outline: none;
+}
+
+.help-link:hover {
+ color: #1a73e8;
+}
+
+/* Footer */
+.welcome-footer {
+ border-top: 1px solid #e9ecef;
+ padding-top: 24px;
+ margin-top: 32px;
+}
+
+.welcome-footer p {
+ font-size: 14px;
+ color: #6c757d;
+}
+
+.footer-link {
+ color: #4285f4;
+ text-decoration: none;
+}
+
+.footer-link:hover {
+ text-decoration: underline;
+ color: #1a73e8;
+}
+
+/* Responsive Design */
+@media (max-width: 768px) {
+ .welcome-container {
+ padding: 16px;
+ }
+
+ .welcome-title {
+ font-size: 28px;
+ }
+
+ .welcome-subtitle {
+ font-size: 16px;
+ }
+
+ .features-grid {
+ grid-template-columns: 1fr;
+ gap: 16px;
+ }
+
+ .steps {
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .step {
+ max-width: 100%;
+ text-align: center;
+ flex-direction: column;
+ }
+}
\ No newline at end of file