From 6b1a8ff96f511d485b2f788f6eb641f52e5e122b Mon Sep 17 00:00:00 2001 From: Oleg Proskurin Date: Sun, 30 Nov 2025 21:38:42 +0700 Subject: [PATCH] feat: create new style --- apps/landing/package.json | 13 +- apps/landing/src/app/(lab)/CLAUDE.md | 398 ++++++++++++++++++ .../src/app/(lab)/lab/generate/page.tsx | 7 +- .../landing/src/app/(lab)/lab/images/page.tsx | 33 +- apps/landing/src/app/(lab)/lab/live/page.tsx | 33 +- .../landing/src/app/(lab)/lab/upload/page.tsx | 33 +- .../src/components/lab/FilterPlaceholder.tsx | 11 +- .../lab/GenerateFormPlaceholder.tsx | 163 +++---- .../src/components/layout/lab/LabFooter.tsx | 16 +- .../src/components/layout/lab/LabLayout.tsx | 2 +- .../src/components/layout/lab/LabSidebar.tsx | 48 +-- pnpm-lock.yaml | 7 + 12 files changed, 596 insertions(+), 168 deletions(-) create mode 100644 apps/landing/src/app/(lab)/CLAUDE.md diff --git a/apps/landing/package.json b/apps/landing/package.json index 0f92f17..6b93aea 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -10,17 +10,18 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "react": "19.1.0", - "react-dom": "19.1.0", + "@banatie/database": "workspace:*", + "lucide-react": "^0.400.0", "next": "15.5.4", - "@banatie/database": "workspace:*" + "react": "19.1.0", + "react-dom": "19.1.0" }, "devDependencies": { - "typescript": "^5", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4" + "tailwindcss": "^4", + "typescript": "^5" } } diff --git a/apps/landing/src/app/(lab)/CLAUDE.md b/apps/landing/src/app/(lab)/CLAUDE.md new file mode 100644 index 0000000..5751e82 --- /dev/null +++ b/apps/landing/src/app/(lab)/CLAUDE.md @@ -0,0 +1,398 @@ +# Lab Section Design System + +The Lab section is a production-ready UI interface for interacting with the Banatie API service. It provides a clean, work-focused experience for image generation, gallery browsing, alias management, and flow control. + +## File Structure + +``` +apps/landing/src/ +├── app/(lab)/ +│ ├── CLAUDE.md # This design documentation +│ ├── layout.tsx # Root lab layout with scroll context +│ └── lab/ +│ ├── layout.tsx # Sub-layout with PageProvider +│ ├── page.tsx # Redirect to /lab/generate +│ ├── generate/page.tsx # Generation workbench +│ ├── images/page.tsx # Image gallery browser +│ ├── live/page.tsx # Live generation testing +│ └── upload/page.tsx # File upload interface +│ +├── components/layout/lab/ +│ ├── LabLayout.tsx # Main layout (sidebar + content + footer) +│ ├── LabSidebar.tsx # Left filter panel +│ └── LabFooter.tsx # Contextual footer with links +│ +├── components/lab/ +│ ├── GenerateFormPlaceholder.tsx # Generation form component +│ └── FilterPlaceholder.tsx # Reusable filter checkbox/radio +│ +└── contexts/ + └── lab-scroll-context.tsx # Scroll state for header collapse +``` + +## Design Principles + +1. **Work-focused, not marketing** - Small typography, efficient spacing +2. **Clean and functional** - Like Google AI Studio +3. **Neutral colors** - Zinc palette (true gray, no blue tint) +4. **Consistent icons** - Lucide React only, no emojis +5. **Responsive** - Works on 768px to 1920px+ screens + +--- + +## Color System (Zinc Palette) + +### Backgrounds +```css +bg-zinc-950 /* Main app background */ +bg-zinc-900 /* Card backgrounds, elevated surfaces */ +bg-zinc-900/80 /* Card with transparency + backdrop-blur-sm */ +bg-zinc-800 /* Input backgrounds, secondary surfaces */ +bg-zinc-800/50 /* Hover states, subtle overlays */ +``` + +### Borders +```css +border-zinc-800 /* Standard borders */ +border-zinc-700 /* Lighter borders, dividers */ +border-white/10 /* Subtle borders (avoid in Lab) */ +``` + +### Text +```css +text-white /* Primary headings */ +text-zinc-100 /* Body text, primary content */ +text-zinc-300 /* Secondary text, descriptions */ +text-zinc-400 /* Muted text, placeholders */ +text-zinc-500 /* Disabled states */ +text-zinc-600 /* Count badges, metadata */ +``` + +### Accent Colors (Keep Purple/Cyan) +```css +/* Primary gradient */ +bg-gradient-to-r from-purple-600 to-cyan-600 +hover:from-purple-500 hover:to-cyan-500 +shadow-lg shadow-purple-900/30 +focus:ring-2 focus:ring-purple-500 + +/* Single-color accents */ +text-purple-400 /* Links, interactive text */ +bg-purple-500/10 /* Info banners */ +border-purple-500/20 /* Accent borders */ +``` + +### Status Colors +```css +/* Success */ bg-emerald-500/10 border-emerald-500/30 text-emerald-400 +/* Warning */ bg-amber-500/10 border-amber-500/30 text-amber-400 +/* Error */ bg-red-500/10 border-red-500/30 text-red-400 +/* Info */ bg-purple-500/10 border-purple-500/30 text-purple-400 +``` + +--- + +## Typography Scale + +### Headings (Practical Sizes) +```tsx +// Page Title (only on main pages) +text-lg font-semibold text-white + +// Section Title +text-base font-semibold text-white + +// Card Title +text-sm font-medium text-white +``` + +### Body Text +```tsx +// Primary body +text-sm text-zinc-300 + +// Secondary/descriptions +text-sm text-zinc-400 + +// Small text (hints, metadata) +text-xs text-zinc-500 + +// Labels (form fields) +text-xs font-medium text-zinc-400 +``` + +### Interactive +```tsx +// Button text +text-sm font-semibold + +// Links +text-sm text-purple-400 hover:text-purple-300 + +// Badge/count +text-xs text-zinc-600 +``` + +--- + +## Spacing System + +### Padding +```tsx +// Cards +p-4 md:p-5 + +// Compact cards +p-3 + +// Form inputs +px-3 py-2 + +// Buttons (primary) +px-4 py-2.5 + +// Buttons (secondary) +px-3 py-2 +``` + +### Section Spacing +```tsx +// Page padding +py-6 md:py-8 + +// Between sections +mb-4 md:mb-6 + +// Between cards in grid +gap-3 md:gap-4 + +// Between form fields +gap-2 + +// Label to input +mb-1.5 +``` + +### Border Radius +```tsx +rounded-lg /* Standard (inputs, small cards) */ +rounded-xl /* Medium (cards, buttons) */ +rounded-2xl /* Large - AVOID in Lab (too marketing) */ +``` + +--- + +## Component Patterns + +### Page Header +```tsx +
+
+
+ +
+

Generate

+

Create AI images from text prompts

+
+
+ +
+
+``` + +### Standard Card +```tsx +
+ {/* content */} +
+``` + +### Compact Card (List Items) +```tsx +
+ {/* content */} +
+``` + +### Form Input +```tsx +
+ + +
+``` + +### Textarea +```tsx +