# Frontend Structure Documentation
## Overview
The Manus AI Clone now uses a professional frontend structure with Jinja2 templates and separated static assets (CSS/JS).
## Directory Structure
```
manus_ai_clone/
├── templates/ # Jinja2 HTML templates
│ ├── base.html # Base template with common layout
│ └── index.html # Home page template
├── static/ # Static assets
│ ├── css/
│ │ └── style.css # Main stylesheet
│ └── js/
│ └── main.js # Frontend JavaScript
├── browser_agent.py # Browser automation logic
├── main.py # FastAPI application
└── pyproject.toml # Project dependencies
```
## Template System
### base.html
- Base template with common layout structure
- Includes navigation bar and footer
- Provides blocks for extending pages
- Links to static CSS and JS files
**Blocks available:**
- `{% block title %}` - Page title
- `{% block extra_css %}` - Additional CSS
- `{% block content %}` - Main content
- `{% block extra_js %}` - Additional JavaScript
### index.html
- Extends base.html
- Main application interface
- Includes:
- Hero section with title
- Example prompts
- Input textarea for user prompts
- Action buttons
- Loading indicator
- Results display with screenshots
- Statistics cards
## Static Assets
### CSS (style.css)
Features:
- CSS custom properties for theming
- Responsive design with media queries
- Modern gradient backgrounds
- Card-based layouts
- Smooth animations and transitions
- Custom scrollbar styling
- Hover effects
Key sections:
- Variables and reset
- Navigation bar
- Hero section
- Input forms
- Buttons and controls
- Loading indicators
- Results display
- Action history
- Statistics cards
- Footer
### JavaScript (main.js)
Features:
- Task execution with API calls
- Real-time loading states
- Results rendering
- Screenshot display
- Action history tracking
- Statistics tracking (localStorage)
- Toast notifications
- Error handling
- Keyboard shortcuts
Key functions:
- `executeTask()` - Execute browser automation
- `displayResults()` - Render task results
- `clearResults()` - Clear UI
- `fillPrompt()` - Fill example prompts
- `showNotification()` - Toast messages
- `loadStats()` / `saveStats()` - Statistics persistence
## Usage
### Running the Application
```bash
# Install dependencies
uv pip install -e .
# Start the server
python main.py
# Or with uvicorn
uvicorn main:app --reload --host 0.0.0.0 --port 8000
```
### Creating Custom Templates
1. Create a new template in `templates/`:
```html
{% extends "base.html" %} {% block title %}Custom Page{% endblock %} {% block
content %}
Custom Content
{% endblock %}
```
2. Add route in `main.py`:
```python
@app.get("/custom")
async def custom_page(request: Request):
return templates.TemplateResponse("custom.html", {"request": request})
```
### Adding Custom Styles
Add to `static/css/style.css`:
```css
.custom-class {
/* Your styles */
}
```
Or create a new CSS file and link in template:
```html
{% block extra_css %}
{% endblock %}
```
### Adding Custom JavaScript
Add to `static/js/main.js` or create new file:
```html
{% block extra_js %}
{% endblock %}
```
## Features
### Statistics Tracking
- Persistent across sessions (localStorage)
- Tracks total tasks, successful tasks, and average time
- Can be reset with `resetStats()` function
### Toast Notifications
- Success, error, info, warning types
- Auto-dismiss after 3 seconds
- Slide-in animation
### Example Prompts
- Click any example to fill the input
- Helps users understand capabilities
### Keyboard Shortcuts
- `Enter` - Execute task
- `Shift+Enter` - New line in textarea
### Responsive Design
- Mobile-first approach
- Breakpoints for tablets and desktops
- Collapsible navigation on mobile
## Customization
### Theming
Edit CSS variables in `style.css`:
```css
:root {
--primary-color: #667eea;
--secondary-color: #764ba2;
--success-color: #4caf50;
/* etc. */
}
```
### Adding New API Endpoints
```python
@app.get("/api/custom")
async def custom_endpoint():
return {"message": "Custom response"}
```
### Adding New Templates
1. Create template in `templates/`
2. Register route in `main.py`
3. Use `templates.TemplateResponse()`
## Development Tips
1. **Hot Reload**: Use `--reload` flag with uvicorn for development
2. **Debug Mode**: Check browser console for JavaScript errors
3. **Template Errors**: FastAPI shows detailed template errors in browser
4. **Static Files**: Changes to CSS/JS are cached - hard refresh (Ctrl+Shift+R)
## Browser Compatibility
- Chrome/Edge: ✅ Full support
- Firefox: ✅ Full support
- Safari: ✅ Full support
- Mobile browsers: ✅ Responsive design
## Performance Considerations
- Static files are cached by browser
- Screenshots are base64 encoded (may be large)
- Action history limited to prevent DOM bloat
- Statistics stored in localStorage (5-10MB limit)
## Security Notes
- CORS enabled for same-origin only
- No authentication included (add if exposing publicly)
- API keys loaded from environment variables
- User input sanitized by FastAPI/Pydantic
## Future Enhancements
Potential additions:
- Dark mode toggle
- Export results as PDF
- WebSocket for real-time updates
- User authentication
- Task history database
- Screenshot comparison
- Recording browser sessions
- Multi-language support