258 lines
8.2 KiB
Markdown
258 lines
8.2 KiB
Markdown
|
|
# Site Builder - Phase 1 Design
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
A visual website builder using GrapesJS that allows users to create multi-page websites through drag-and-drop without writing code. Phase 1 focuses on core editor functionality with local storage persistence.
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
### File Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
site-builder/
|
||
|
|
├── index.html # Main editor page
|
||
|
|
├── preview.html # Preview page (renders saved content)
|
||
|
|
├── CLAUDE.md # Comprehensive project documentation
|
||
|
|
├── css/
|
||
|
|
│ └── editor.css # Custom editor styles (dark theme)
|
||
|
|
├── js/
|
||
|
|
│ └── editor.js # Editor initialization and configuration
|
||
|
|
└── docs/
|
||
|
|
└── plans/
|
||
|
|
└── 2026-01-26-site-builder-design.md
|
||
|
|
```
|
||
|
|
|
||
|
|
### Dependencies (CDN)
|
||
|
|
|
||
|
|
- **GrapesJS Core** - The main editor engine
|
||
|
|
- **grapesjs-blocks-basic** - Basic building blocks (columns, text, images)
|
||
|
|
- **grapesjs-preset-webpage** - Comprehensive webpage blocks (hero, features, etc.)
|
||
|
|
- **grapesjs-plugin-forms** - Form elements (inputs, textareas, buttons)
|
||
|
|
- **grapesjs-style-gradient** - Gradient background support
|
||
|
|
- **Font Awesome 5** - Icons for blocks
|
||
|
|
- **Google Fonts** - 8 font families
|
||
|
|
|
||
|
|
## Features Implemented
|
||
|
|
|
||
|
|
### Editor Interface
|
||
|
|
|
||
|
|
1. **Top Navigation Bar**
|
||
|
|
- Logo/branding
|
||
|
|
- Device switcher (Desktop/Tablet/Mobile)
|
||
|
|
- Undo/Redo buttons
|
||
|
|
- Clear canvas button
|
||
|
|
- Export button (download site as ZIP)
|
||
|
|
- Preview button
|
||
|
|
|
||
|
|
2. **Left Panel - Blocks/Pages/Layers**
|
||
|
|
- Blocks tab: Draggable components organized by category
|
||
|
|
- Pages tab: Multi-page management (add, edit, delete, switch pages)
|
||
|
|
- Layers tab: Component hierarchy tree view
|
||
|
|
|
||
|
|
3. **Center - Canvas**
|
||
|
|
- Live preview of the website being built
|
||
|
|
- Click to select components
|
||
|
|
- Drag to reposition components
|
||
|
|
- Resize handles on selected components
|
||
|
|
- Right-click context menu
|
||
|
|
|
||
|
|
4. **Right Panel - Styles/Settings**
|
||
|
|
- **Guided Mode**: Context-aware quick presets based on element type
|
||
|
|
- **Advanced Mode**: Full GrapesJS style manager with all CSS properties
|
||
|
|
- **Settings tab**: Component-specific traits/attributes
|
||
|
|
|
||
|
|
### Block Categories
|
||
|
|
|
||
|
|
**Layout**
|
||
|
|
- Section: Basic content section with centered container
|
||
|
|
- Section (Background): Section with image background and customizable overlay
|
||
|
|
- Section (Video BG): Section with video background (YouTube/Vimeo/MP4 support)
|
||
|
|
- Logo: Styled logo element with icon and text
|
||
|
|
- Navigation: Dynamic nav bar with automatic page sync
|
||
|
|
- Footer: Footer with links and copyright
|
||
|
|
- Columns (1-4): Flexible column layouts
|
||
|
|
- 2 Columns 3/7: Asymmetric column layout
|
||
|
|
|
||
|
|
**Basic**
|
||
|
|
- Text: Paragraph text
|
||
|
|
- Heading: H2 heading
|
||
|
|
- Button: Styled link button
|
||
|
|
- Divider: Horizontal rule with color/thickness controls
|
||
|
|
- Spacer: Vertical spacing element
|
||
|
|
- Text Box: Styled container for overlaying on backgrounds
|
||
|
|
|
||
|
|
**Media**
|
||
|
|
- Image: Responsive image
|
||
|
|
- Video: Universal video block (supports YouTube, Vimeo, and direct files)
|
||
|
|
|
||
|
|
**Sections**
|
||
|
|
- Hero (Image): Hero section with image background and overlay
|
||
|
|
- Hero (Video): Hero section with video background and overlay
|
||
|
|
- Hero (Simple): Hero section with gradient background
|
||
|
|
- Features Grid: 3-column feature cards
|
||
|
|
- Testimonials: Customer testimonials with star ratings
|
||
|
|
- Pricing Table: 3-tier pricing comparison
|
||
|
|
- Contact Section: Contact info with form
|
||
|
|
- Call to Action: CTA banner with gradient background
|
||
|
|
|
||
|
|
**Forms**
|
||
|
|
- Form, Input, Textarea, Select, Button, Label, Checkbox, Radio
|
||
|
|
|
||
|
|
### Video System
|
||
|
|
|
||
|
|
The unified Video block and Section Video BG support multiple sources:
|
||
|
|
- **YouTube**: Paste any youtube.com or youtu.be URL
|
||
|
|
- **Vimeo**: Paste any vimeo.com URL
|
||
|
|
- **Direct Files**: .mp4, .webm, .ogg, .mov files
|
||
|
|
- URLs are auto-detected and converted to proper embed format
|
||
|
|
- Background videos auto-play muted and loop
|
||
|
|
|
||
|
|
### Context-Aware Styling
|
||
|
|
|
||
|
|
The guided panel shows only relevant options based on selected element type:
|
||
|
|
|
||
|
|
*For Text Elements (p, h1-h6, span, label):*
|
||
|
|
- Text Color: 8 preset colors
|
||
|
|
- Font Family: 8 Google Fonts
|
||
|
|
- Text Size: XS, S, M, L, XL, 2XL
|
||
|
|
- Font Weight: Light, Normal, Medium, Semi, Bold
|
||
|
|
|
||
|
|
*For Links/Buttons (a):*
|
||
|
|
- Link URL input with "Open in new tab" option
|
||
|
|
- Button Color: 8 preset colors (auto-adjusts text for contrast)
|
||
|
|
- Text Color, Font, Size, Weight options
|
||
|
|
- Border Radius and Padding
|
||
|
|
|
||
|
|
*For Containers (div, section, etc):*
|
||
|
|
- Background Color: 8 preset colors
|
||
|
|
- Background Gradient: 12 gradient presets
|
||
|
|
- Background Image: URL input with size/position controls
|
||
|
|
- Padding: None, S, M, L, XL
|
||
|
|
- Border Radius: None, S, M, L, Full
|
||
|
|
|
||
|
|
*For Overlays (.bg-overlay):*
|
||
|
|
- Overlay Color: 6 preset colors (black, white, blue, green, purple, gray)
|
||
|
|
- Opacity Slider: 0-100% with real-time preview
|
||
|
|
|
||
|
|
*For Navigation (nav):*
|
||
|
|
- Sync with Pages: Auto-generate links from page list
|
||
|
|
- Add Link: Add new navigation link
|
||
|
|
- Link Management: View and delete individual links
|
||
|
|
- Background Color and Spacing controls
|
||
|
|
|
||
|
|
*For Dividers (hr):*
|
||
|
|
- Divider Color: 8 preset colors
|
||
|
|
- Line Thickness: 1px, 2px, 3px, 4px, 6px
|
||
|
|
|
||
|
|
### Multi-Page Support
|
||
|
|
|
||
|
|
- **Pages Tab**: View all pages in project
|
||
|
|
- **Add Page**: Create new pages with name and slug
|
||
|
|
- **Edit Page**: Modify page name and slug
|
||
|
|
- **Delete Page**: Remove pages (cannot delete last page)
|
||
|
|
- **Page Switching**: Auto-saves content when switching
|
||
|
|
- **Navigation Sync**: Auto-generate nav links from pages
|
||
|
|
- **Preview**: Multi-page preview with page selector
|
||
|
|
|
||
|
|
### Context Menu (Right-Click)
|
||
|
|
|
||
|
|
- Edit Content: Enable inline text editing
|
||
|
|
- Duplicate: Copy element in place (Ctrl+D)
|
||
|
|
- Copy/Paste: Clipboard operations (Ctrl+C/V)
|
||
|
|
- Move Up/Down: Reorder elements
|
||
|
|
- Select Parent: Navigate up component tree
|
||
|
|
- Wrap in Container: Wrap element in div
|
||
|
|
- Delete: Remove element (Del)
|
||
|
|
|
||
|
|
### Google Fonts
|
||
|
|
|
||
|
|
The following Google Fonts are preloaded and available:
|
||
|
|
- Inter (sans-serif)
|
||
|
|
- Roboto (sans-serif)
|
||
|
|
- Open Sans (sans-serif)
|
||
|
|
- Poppins (sans-serif)
|
||
|
|
- Montserrat (sans-serif)
|
||
|
|
- Playfair Display (serif)
|
||
|
|
- Merriweather (serif)
|
||
|
|
- Source Code Pro (monospace)
|
||
|
|
|
||
|
|
### Responsive Design
|
||
|
|
|
||
|
|
- Desktop (default full width)
|
||
|
|
- Tablet (768px viewport)
|
||
|
|
- Mobile (375px viewport)
|
||
|
|
- Automatic column stacking on mobile
|
||
|
|
|
||
|
|
### Persistence
|
||
|
|
|
||
|
|
- Auto-save to localStorage every change
|
||
|
|
- Auto-load on page refresh
|
||
|
|
- Multi-page storage with per-page HTML/CSS
|
||
|
|
- Preview saves all pages for multi-page preview
|
||
|
|
|
||
|
|
### Export Feature
|
||
|
|
|
||
|
|
- **Export to ZIP**: Download all pages as HTML files in a ZIP archive
|
||
|
|
- **Options**:
|
||
|
|
- Minify CSS: Remove whitespace and comments from CSS
|
||
|
|
- Include Google Fonts: Add font preload links
|
||
|
|
- Uses JSZip library (loaded dynamically on demand)
|
||
|
|
- Each page becomes a standalone HTML file with embedded styles
|
||
|
|
- Includes responsive CSS reset and mobile column stacking
|
||
|
|
|
||
|
|
### Keyboard Shortcuts
|
||
|
|
|
||
|
|
- `Ctrl/Cmd + Z` - Undo
|
||
|
|
- `Ctrl/Cmd + Shift + Z` or `Ctrl/Cmd + Y` - Redo
|
||
|
|
- `Ctrl/Cmd + C` - Copy
|
||
|
|
- `Ctrl/Cmd + V` - Paste
|
||
|
|
- `Ctrl/Cmd + D` - Duplicate
|
||
|
|
- `Delete` / `Backspace` - Remove selected component
|
||
|
|
- `Escape` - Deselect / Close modals
|
||
|
|
|
||
|
|
## Usage
|
||
|
|
|
||
|
|
1. Open via HTTP server (e.g., `python -m http.server 8000`)
|
||
|
|
2. Navigate to `http://localhost:8000`
|
||
|
|
3. Drag blocks from the left panel onto the canvas
|
||
|
|
4. Click elements to select and style them
|
||
|
|
5. Use Pages tab to create multiple pages
|
||
|
|
6. Use Navigation block and "Sync with Pages" for dynamic menus
|
||
|
|
7. Add Video blocks and paste YouTube/Vimeo URLs in Settings
|
||
|
|
8. Switch between Guided/Advanced styling modes
|
||
|
|
9. Test responsiveness with device switcher
|
||
|
|
10. Right-click for context menu options
|
||
|
|
11. Click Preview to see the final output with page navigation
|
||
|
|
12. Changes auto-save to browser storage
|
||
|
|
|
||
|
|
## Technical Notes
|
||
|
|
|
||
|
|
### Video Embedding
|
||
|
|
- YouTube/Vimeo embeds may show errors in the GrapesJS canvas due to nested iframe restrictions
|
||
|
|
- Videos display correctly in Preview mode and on published sites
|
||
|
|
- Use the Settings tab to edit video URLs
|
||
|
|
|
||
|
|
### Local Storage Keys
|
||
|
|
- `sitebuilder-project` - GrapesJS auto-save data
|
||
|
|
- `sitebuilder-pages` - Multi-page data
|
||
|
|
- `sitebuilder-project-preview` - Preview data
|
||
|
|
|
||
|
|
## Future Phases
|
||
|
|
|
||
|
|
### Phase 2: Backend Integration
|
||
|
|
- PHP backend for user authentication
|
||
|
|
- Database storage for projects
|
||
|
|
- Multiple project support
|
||
|
|
|
||
|
|
### Phase 3: Publishing
|
||
|
|
- Save/publish sites to server
|
||
|
|
- Subdomain or custom domain support
|
||
|
|
- Template library
|
||
|
|
|
||
|
|
### Phase 4: Enhancements
|
||
|
|
- More block types
|
||
|
|
- Custom CSS injection
|
||
|
|
- Asset manager for images
|
||
|
|
- SEO settings per page
|
||
|
|
- Export to HTML/CSS files
|