From d203fa88ab829892a2e1123f5258f5152243a6fd Mon Sep 17 00:00:00 2001 From: Mohammed Rayan A Date: Fri, 7 Aug 2026 08:10:50 +0530 Subject: [PATCH 1/4] feat(settings): give API keys their own nav section instead of a Profile sidebar box Founder flagged from real dashboard screenshots that API key management was cramped into a Profile sidebar card. Lift it into a new Settings.tsx component with its own nav item (desktop sidebar + mobile bottom bar, now 6 items), leaving Profile.tsx for identity/public-presence concerns. --- CLAUDE.md | 27 +++--- app/components/Layout.tsx | 7 +- app/components/Profile.tsx | 127 +-------------------------- app/components/Settings.tsx | 165 ++++++++++++++++++++++++++++++++++++ app/dashboard/page.tsx | 4 +- 5 files changed, 189 insertions(+), 141 deletions(-) create mode 100644 app/components/Settings.tsx diff --git a/CLAUDE.md b/CLAUDE.md index fa3b08f..dc761d7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -84,9 +84,9 @@ UPSTASH_REDIS_REST_TOKEN= # Sentry SENTRY_DSN= -# Resend (email) +# Resend (email — inbound save-by-email) RESEND_API_KEY= -RESEND_FROM_EMAIL= +RESEND_INBOUND_WEBHOOK_SECRET= # Dodo Payments DODO_PAYMENTS_API_KEY= @@ -102,9 +102,13 @@ app/ Next.js App Router pages and API routes (auth)/ Auth-gated routes api/ API route handlers (server-side only) resources/ CRUD for saved items - search/ RAG query endpoint - digest/ Weekly email digest + ai/ Search + RAG "ask" endpoints + webhooks/ Dodo Payments + Resend inbound-email webhooks + settings/api-keys/ API key generate/list/revoke + share/ Mobile share-sheet capture page u/[username]/ Public user profile pages +dumpit-extension/ Chrome extension (separate package) +dumpit-mcp/ MCP server for Claude/Cursor (separate package) docs/ Internal documentation public/ Static assets types/ Shared TypeScript types @@ -128,14 +132,15 @@ types/ Shared TypeScript types | AI-powered cited Q&A (RAG) | ✅ Live | | Upstash rate limiting on AI routes | ✅ Live | | Cursor-based pagination | ✅ Live | -| Weekly email digest (Resend) | ✅ Live | | Sentry error monitoring | ✅ Live | -| Browser extension (one-click save) | 🔨 Building — highest priority | -| PDF upload + text extraction | 🔨 Next after extension | -| Email-to-save (`save@dumpit.page`) | 📋 Planned | -| Mobile share sheet | 📋 Planned | -| MCP server (query vault from Claude/Cursor) | 📋 Planned — key differentiator | -| Dodo Payments integration | 🔨 In progress | +| Browser extension (one-click save) | ✅ Live | +| PDF upload + text extraction | ✅ Live | +| API keys + REST API access | ✅ Live | +| MCP server (query vault from Claude/Cursor) | ✅ Live — `dumpit-mcp/` | +| Dodo Payments integration | ✅ Live | +| Mobile share sheet (Android/PWA only — no iOS Web Share Target support) | 🔨 Built, needs manual PWA icon polish | +| Email-to-save (`save@dumpit.page`) | 🔨 Built — pending DNS + Resend dashboard setup (not yet reachable) | +| Weekly email digest (Resend) | 📋 Planned — not built despite earlier doc claim | | Personal context / tone profile (shapes how answers are given) | 📋 Planned — v2, core to the vision | | Portable context export (take your profile to other tools) | 📋 Planned — v3, long-term vision | diff --git a/app/components/Layout.tsx b/app/components/Layout.tsx index 8cd9444..c5c3b39 100644 --- a/app/components/Layout.tsx +++ b/app/components/Layout.tsx @@ -1,11 +1,11 @@ 'use client' -import { Bot, LayoutDashboard, LogOut, Plus, Share2, User } from 'lucide-react' +import { Bot, KeyRound, LayoutDashboard, LogOut, Plus, Share2, User } from 'lucide-react' import { ReactNode } from 'react' import { useAuth } from '../contexts/AuthContext' import { ThemeToggle } from './ui/ThemeToggle' -type Page = 'dashboard' | 'add' | 'shared' | 'ai' | 'profile' +type Page = 'dashboard' | 'add' | 'shared' | 'ai' | 'profile' | 'settings' interface LayoutProps { children: ReactNode @@ -19,6 +19,7 @@ const navItems = [ { id: 'add', label: 'Capture', shortLabel: 'Add', icon: Plus }, { id: 'shared', label: 'Shared Dump', shortLabel: 'Shared', icon: Share2 }, { id: 'profile', label: 'Profile', shortLabel: 'Me', icon: User }, + { id: 'settings', label: 'Settings', shortLabel: 'Keys', icon: KeyRound }, ] as const export function Layout({ children, currentPage, onNavigate }: LayoutProps) { @@ -104,7 +105,7 @@ export function Layout({ children, currentPage, onNavigate }: LayoutProps) {