From 6b339134712f1a567f65614c86120fed953a22b3 Mon Sep 17 00:00:00 2001 From: Gemini AI Date: Fri, 26 Dec 2025 15:57:31 +0400 Subject: [PATCH] Add full mobile responsive design with hamburger menu, responsive components, and mobile optimizations --- app/globals.css | 46 ++++++++++++ app/layout.tsx | 1 + app/page.tsx | 2 +- components/ActionPlanGenerator.tsx | 80 ++++++++++----------- components/HistoryPanel.tsx | 31 ++++---- components/PRDGenerator.tsx | 72 +++++++++---------- components/PromptEnhancer.tsx | 70 +++++++++--------- components/SettingsPanel.tsx | 109 ++++++++++++++--------------- components/Sidebar.tsx | 99 +++++++++++++++++++------- components/UXDesignerPrompt.tsx | 74 ++++++++++---------- 10 files changed, 341 insertions(+), 243 deletions(-) diff --git a/app/globals.css b/app/globals.css index c84804d..6d89ec7 100644 --- a/app/globals.css +++ b/app/globals.css @@ -65,5 +65,51 @@ } body { @apply bg-background text-foreground; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + /* Mobile optimizations */ + html { + scroll-behavior: smooth; + -webkit-tap-highlight-color: transparent; + } + + /* Better touch targets */ + button, a, [role="button"] { + touch-action: manipulation; + } + + /* Prevent text selection on buttons */ + button { + -webkit-user-select: none; + user-select: none; + } + + /* Safe area padding for notched devices */ + .safe-area-inset { + padding-left: env(safe-area-inset-left); + padding-right: env(safe-area-inset-right); + padding-bottom: env(safe-area-inset-bottom); + } + + /* Scrollbar styling for mobile-like experience */ + ::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + ::-webkit-scrollbar-track { + background: transparent; + } + + ::-webkit-scrollbar-thumb { + background: hsl(var(--border)); + border-radius: 3px; + } + + ::-webkit-scrollbar-thumb:hover { + background: hsl(var(--muted-foreground)); } } + diff --git a/app/layout.tsx b/app/layout.tsx index cdbec22..d61796c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,6 +7,7 @@ const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { title: "PromptArch - AI Prompt Engineering Platform", description: "Transform vague ideas into production-ready prompts and PRDs", + viewport: "width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no", }; export default function RootLayout({ diff --git a/app/page.tsx b/app/page.tsx index 8f483e8..f2b1911 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -41,7 +41,7 @@ export default function Home() { return (
-
+
{renderContent()}
diff --git a/components/ActionPlanGenerator.tsx b/components/ActionPlanGenerator.tsx index dd4b933..b2b5b91 100644 --- a/components/ActionPlanGenerator.tsx +++ b/components/ActionPlanGenerator.tsx @@ -53,7 +53,7 @@ export default function ActionPlanGenerator() { const loadAvailableModels = async () => { const fallbackModels = modelAdapter.getAvailableModels(selectedProvider); setAvailableModels(selectedProvider, fallbackModels); - + try { const result = await modelAdapter.listModels(selectedProvider); if (result.success && result.data) { @@ -126,28 +126,28 @@ export default function ActionPlanGenerator() { }; return ( -
+
- - - + + + Action Plan Generator - + Convert PRD into actionable implementation plan - +
- -
+ +
{(["qwen", "ollama", "zai"] as const).map((provider) => ( @@ -156,11 +156,11 @@ export default function ActionPlanGenerator() {
- +