setHelpOpen(false)}>
e.stopPropagation()}>
⌨️ Shortcuts
⌘ S Save
⌘ / Help
)}
```
## Launcher Script
Create a simple script to start both servers:
```python
#!/usr/bin/env python3
import subprocess, webbrowser, time
# Start backend
backend = subprocess.Popen(
["uvicorn", "server:app", "--port", "8000"],
cwd="./backend"
)
# Start frontend
frontend = subprocess.Popen(
["npm", "run", "dev"],
cwd="./frontend"
)
time.sleep(2)
webbrowser.open("http://localhost:5173")
try:
backend.wait()
except KeyboardInterrupt:
backend.terminate()
frontend.terminate()
```
Make executable: `chmod +x launcher`
## Quick Reference
### Testing Checklist
```bash
# Automated
WEBTEST # Use testing-webapps skill
# Manual
- [ ] All buttons work
- [ ] Keyboard shortcuts (⌘S, ⌘/)
- [ ] Data persists
- [ ] No console errors
```
### When to Add a Feature
1. Solves real problem? ✓
2. Can be done simply? ✓
3. Fits core purpose? ✓
If any = no → defer it
### When to Refactor
- Code duplicated 3+ times
- Fighting component design
- Adding features getting harder
### View Modes Pattern
```jsx
const [viewMode, setViewMode] = useState('edit');
const [content, setContent] = useState('');
{viewMode === 'edit' &&