- Project Name: VibeShift
- Project Type: Web Application (SPA)
- Core Functionality: Transform vague "vibe" descriptions into structured AI prompts and technical specifications
- Target Users: Developers, designers, and product managers who want to convert intuitive ideas into actionable specs
Page Sections:
- Header - Logo, app name, dark/light mode toggle
- Input Section - Large textarea for vibe prompt
- Action Section - Transform button with loading state
- Output Section - Dual panel display (AI Prompt + Markdown Spec)
- History Section - Recent transformations list
Responsive Breakpoints:
- Mobile: < 768px (stacked layout, tabs for outputs)
- Tablet: 768px - 1024px (side-by-side with reduced padding)
- Desktop: > 1024px (full side-by-side layout)
Color Palette:
Light Mode:
- Background:
#FAFAFA - Surface:
#FFFFFF - Primary:
#6366F1(Indigo) - Primary Hover:
#4F46E5 - Secondary:
#F1F5F9 - Text Primary:
#1E293B - Text Secondary:
#64748B - Border:
#E2E8F0 - Accent Success:
#10B981 - Accent Error:
#EF4444
Dark Mode:
- Background:
#0F172A - Surface:
#1E293B - Primary:
#818CF8 - Primary Hover:
#A5B4FC - Secondary:
#334155 - Text Primary:
#F8FAFC - Text Secondary:
#94A3B8 - Border:
#334155 - Accent Success:
#34D399 - Accent Error:
#F87171
Typography:
- Font Family:
"Inter", system-ui, -apple-system, sans-serif - Logo/Brand:
"Space Grotesk", sans-serif(bold, 1.5rem) - Headings:
- H1: 2rem / 700 weight
- H2: 1.5rem / 600 weight
- H3: 1.25rem / 600 weight
- Body: 1rem / 400 weight
- Small/Caption: 0.875rem / 400 weight
- Monospace (for code/output):
"JetBrains Mono", "Fira Code", monospace
Spacing System:
- Base unit: 4px
- xs: 4px
- sm: 8px
- md: 16px
- lg: 24px
- xl: 32px
- 2xl: 48px
- Container max-width: 1200px
- Container padding: 24px
Visual Effects:
- Border radius: 8px (buttons), 12px (cards), 16px (containers)
- Shadows (light mode):
- sm:
0 1px 2px rgba(0,0,0,0.05) - md:
0 4px 6px -1px rgba(0,0,0,0.1) - lg:
0 10px 15px -3px rgba(0,0,0,0.1)
- sm:
- Shadows (dark mode):
- sm:
0 1px 2px rgba(0,0,0,0.3) - md:
0 4px 6px -1px rgba(0,0,0,0.4) - lg:
0 10px 15px -3px rgba(0,0,0,0.5)
- sm:
- Transitions: 200ms ease-in-out (all interactive elements)
- Loading spinner: Rotating circle with primary color
1. Header
- Logo: Stylized "V" icon with gradient (indigo to purple)
- App name: "VibeShift" with gradient text
- Dark/Light toggle: Sun/Moon icons with smooth transition
- Height: 64px
- Sticky position on scroll
2. Vibe Input
- Large textarea (min-height: 200px)
- Placeholder: "Describe your vibe... (e.g., 'I want a cozy coffee shop app that feels like warm autumn afternoons')"
- Character count display (bottom-right corner)
- Max characters: 1000
- Border: 2px solid (focus: primary color)
- Background: surface color
3. Transform Button
- Full width on mobile, auto width on desktop
- Height: 48px
- Primary gradient background
- States:
- Default: Primary gradient
- Hover: Darkened gradient + slight scale (1.02)
- Loading: Spinner + "Transforming..." text
- Disabled: Grayed out + cursor not-allowed
- Icon: Sparkle/Magic wand icon
4. Output Panels
- Two panels: "AI Prompt" and "Markdown Spec"
- Tab navigation on mobile
- Side-by-side on desktop (50% width each)
- Each panel has:
- Header with title + copy button
- Scrollable content area with monospace font
- Syntax highlighting for markdown (basic)
- Copy button:
- Icon: Clipboard
- States: Default, Success (checkmark), Tooltip "Copied!"
5. Download Button
- Positioned below output panels
- Icon: Download
- Text: "Download as .md"
- Downloads combined AI prompt + spec
6. History Section
- Collapsible section
- Title: "Recent Transformations"
- List of last 5 items
- Each item:
- Truncated vibe preview (first 50 chars)
- Timestamp (relative: "2 min ago", "1 hour ago")
- Click to restore (populates input + outputs)
- Delete button (X icon)
- Empty state: "No transformations yet"
7. Error State
- Red border on input
- Error message below input
- Toast notification for critical errors
1. Vibe Input
- Multi-line text input
- Real-time character counting
- Persists to localStorage on transform
2. Transformation Logic (Client-Side)
- Extract intent keywords (app, website, tool, feature, etc.)
- Identify emotional descriptors (cozy, modern, minimal, playful, etc.)
- Identify color/temperature references (warm, cool, dark, bright, etc.)
- Identify functional requirements (fast, secure, responsive, etc.)
- Map vibes to concrete UI elements:
- "cozy" → warm colors, rounded corners, soft shadows
- "modern" → clean lines, sans-serif fonts, minimal decoration
- "playful" → bright colors, bouncy animations, rounded shapes
- "professional" → neutral colors, sharp edges, structured layout
Output Generation:
- AI Prompt: Detailed prompt for an AI to generate the actual application
- Markdown Spec: Structured specification with sections:
- Overview
- Visual Design
- Functional Requirements
- Technical Considerations
3. Copy to Clipboard
- Copy button for each output panel
- Visual feedback (checkmark + "Copied!" tooltip)
- Uses navigator.clipboard API
4. Download as .md
- Downloads file with format:
vibeshift-{timestamp}.md - Contains both AI prompt and Markdown spec
- Proper markdown formatting
5. History Management
- Store last 5 transformations in localStorage
- Each entry contains:
- id: unique identifier
- vibe: original input
- aiPrompt: generated prompt
- markdownSpec: generated spec
- timestamp: creation time
- Click to restore full transformation
- Delete individual items
6. Dark/Light Mode
- Toggle in header
- Persists preference in localStorage
- Respects system preference on first load
- Smooth transition between modes
-
Initial Load:
- Check localStorage for theme preference
- Check for saved history
- Display empty input state
-
Transform Flow:
- User types vibe → character count updates
- User clicks Transform → button shows loading
- System processes (simulated 1.5s delay)
- Outputs appear → history updates
- User can copy/download
-
History Flow:
- User clicks history item → inputs + outputs restore
- User can re-transform or modify
- Empty input: Disable transform button
- Very short input (<10 chars): Show warning
- localStorage unavailable: Graceful degradation, no history
- Clipboard API unavailable: Show fallback "select all" text
- Header displays logo, name, and theme toggle
- Input textarea is large and shows character count
- Transform button shows loading state during transformation
- Output panels display side-by-side on desktop
- Output panels use tabs on mobile
- Copy buttons provide visual feedback
- History shows last 5 items with timestamps
- Dark mode applies correct colors throughout
- All transitions are smooth (200ms)
- Character count updates in real-time
- Transform generates both AI prompt and Markdown spec
- Copy to clipboard works for both outputs
- Download creates valid .md file
- History persists across page reloads
- Clicking history item restores that transformation
- Theme preference persists across sessions
- Mobile layout is fully functional
- Built with Vite + React
- Styled with Tailwind CSS
- State managed with React hooks
- localStorage used for persistence
- No console errors in production
- Responsive at all breakpoints