622 lines
24 KiB
Bash
Executable File
622 lines
24 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# VitalLink Automatic Installer for Arch Linux
|
|
# This script sets up the entire project structure
|
|
# You'll still need to copy the Python/React code from Claude artifacts
|
|
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
PROJECT_ROOT="$PWD/vitallink"
|
|
|
|
clear
|
|
echo -e "${CYAN}"
|
|
cat <<"EOF"
|
|
╔══════════════════════════════════════════════════════════════════════════╗
|
|
║ ║
|
|
║ ██╗ ██╗██╗████████╗ █████╗ ██╗ ██╗ ██╗███╗ ██╗██╗ ██╗ ║
|
|
║ ██║ ██║██║╚══██╔══╝██╔══██╗██║ ██║ ██║████╗ ██║██║ ██╔╝ ║
|
|
║ ██║ ██║██║ ██║ ███████║██║ ██║ ██║██╔██╗ ██║█████╔╝ ║
|
|
║ ╚██╗ ██╔╝██║ ██║ ██╔══██║██║ ██║ ██║██║╚██╗██║██╔═██╗ ║
|
|
║ ╚████╔╝ ██║ ██║ ██║ ██║███████╗███████╗██║██║ ╚████║██║ ██╗ ║
|
|
║ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ║
|
|
║ ║
|
|
║ Emergency Room Patient Monitoring System ║
|
|
║ Automatic Installer v1.0 ║
|
|
║ ║
|
|
╚══════════════════════════════════════════════════════════════════════════╝
|
|
EOF
|
|
echo -e "${NC}"
|
|
|
|
echo -e "${YELLOW}This script will:${NC}"
|
|
echo " 1. Create project structure in $PROJECT_ROOT"
|
|
echo " 2. Set up Python virtual environment"
|
|
echo " 3. Install all dependencies"
|
|
echo " 4. Create startup/stop scripts"
|
|
echo " 5. Generate placeholder files for you to fill"
|
|
echo ""
|
|
echo -e "${CYAN}Note: You'll need to copy Python/React code from Claude artifacts after this.${NC}"
|
|
echo ""
|
|
read -p "Continue? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo -e "${RED}Installation cancelled.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if directory exists
|
|
if [ -d "$PROJECT_ROOT" ]; then
|
|
echo -e "${YELLOW}Warning: $PROJECT_ROOT already exists.${NC}"
|
|
read -p "Delete and recreate? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
rm -rf "$PROJECT_ROOT"
|
|
echo -e "${GREEN}✓ Removed existing directory${NC}"
|
|
else
|
|
echo -e "${RED}Installation cancelled.${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 1: Creating Directory Structure${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
mkdir -p "$PROJECT_ROOT"/{backend,simulator,frontend/{kiosk,dashboard},tests,docs,logs}
|
|
echo -e "${GREEN}✓ Created project directories${NC}"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 2: Setting up Python Virtual Environment${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
python -m venv venv
|
|
source venv/bin/activate
|
|
echo -e "${GREEN}✓ Virtual environment created${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 3: Creating requirements.txt${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
cat >requirements.txt <<'EOF'
|
|
# Backend API
|
|
fastapi==0.104.1
|
|
uvicorn[standard]==0.24.0
|
|
websockets==12.0
|
|
pydantic==2.5.0
|
|
python-multipart==0.0.6
|
|
|
|
# HTTP client for simulator integration
|
|
aiohttp==3.9.1
|
|
requests==2.31.0
|
|
|
|
# Testing
|
|
pytest==7.4.3
|
|
pytest-asyncio==0.21.1
|
|
|
|
# Utilities
|
|
python-dateutil==2.8.2
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ requirements.txt created${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 4: Installing Python Dependencies${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
pip install --upgrade pip -q
|
|
pip install -r requirements.txt -q
|
|
echo -e "${GREEN}✓ All Python packages installed${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 5: Creating Project Files${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
# Backend server placeholder
|
|
cat >backend/server.py <<'EOF'
|
|
"""
|
|
VitalLink Backend Server
|
|
TODO: Copy the complete FastAPI code from Claude artifact:
|
|
"VitalLink Backend API (FastAPI)"
|
|
"""
|
|
|
|
print("Backend server placeholder - please copy the actual code from Claude artifacts")
|
|
EOF
|
|
echo -e "${GREEN}✓ backend/server.py created (placeholder)${NC}"
|
|
|
|
# Simulator placeholder
|
|
cat >simulator/wristband_simulator.py <<'EOF'
|
|
"""
|
|
VitalLink Wristband Simulator
|
|
TODO: Copy the complete simulator code from Claude artifact:
|
|
"VitalLink Wristband Simulator & Base Station"
|
|
"""
|
|
|
|
print("Simulator placeholder - please copy the actual code from Claude artifacts")
|
|
EOF
|
|
echo -e "${GREEN}✓ simulator/wristband_simulator.py created (placeholder)${NC}"
|
|
|
|
# Test suite placeholder
|
|
cat >tests/test_suite.py <<'EOF'
|
|
"""
|
|
VitalLink Test Suite
|
|
TODO: Copy the complete test suite code from Claude artifact:
|
|
"VitalLink Complete Test Suite"
|
|
"""
|
|
|
|
print("Test suite placeholder - please copy the actual code from Claude artifacts")
|
|
EOF
|
|
echo -e "${GREEN}✓ tests/test_suite.py created (placeholder)${NC}"
|
|
|
|
# Dashboard HTML
|
|
cat >frontend/dashboard/index.html <<'EOF'
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>VitalLink Staff Dashboard</title>
|
|
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
|
|
<script type="text/babel">
|
|
/*
|
|
* TODO: Copy the ENTIRE React component code from Claude artifact:
|
|
* "VitalLink Staff Monitoring Dashboard"
|
|
*
|
|
* Replace "export default StaffDashboard;" with:
|
|
* const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
* root.render(<StaffDashboard />);
|
|
*/
|
|
|
|
// Placeholder
|
|
const Placeholder = () => (
|
|
<div style={{
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
height: '100vh',
|
|
backgroundColor: '#f3f4f6',
|
|
fontFamily: 'system-ui, -apple-system, sans-serif'
|
|
}}>
|
|
<div style={{
|
|
backgroundColor: 'white',
|
|
padding: '3rem',
|
|
borderRadius: '1rem',
|
|
boxShadow: '0 10px 25px rgba(0,0,0,0.1)',
|
|
maxWidth: '600px',
|
|
textAlign: 'center'
|
|
}}>
|
|
<h1 style={{color: '#1e40af', fontSize: '2rem', marginBottom: '1rem'}}>
|
|
VitalLink Staff Dashboard
|
|
</h1>
|
|
<p style={{color: '#6b7280', marginBottom: '1.5rem'}}>
|
|
Please copy the React component code from Claude artifacts.
|
|
</p>
|
|
<div style={{
|
|
backgroundColor: '#fef3c7',
|
|
padding: '1rem',
|
|
borderRadius: '0.5rem',
|
|
border: '1px solid #fbbf24'
|
|
}}>
|
|
<p style={{color: '#92400e', fontSize: '0.875rem'}}>
|
|
<strong>Instructions:</strong><br/>
|
|
1. Open this file in a text editor<br/>
|
|
2. Find the TODO comment above<br/>
|
|
3. Copy the complete StaffDashboard component<br/>
|
|
4. Save and refresh
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
root.render(<Placeholder />);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
echo -e "${GREEN}✓ frontend/dashboard/index.html created (template)${NC}"
|
|
|
|
# Kiosk HTML
|
|
cat >frontend/kiosk/index.html <<'EOF'
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>VitalLink Check-in Kiosk</title>
|
|
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
|
|
<script type="text/babel">
|
|
/*
|
|
* TODO: Copy the ENTIRE React component code from Claude artifact:
|
|
* "VitalLink Check-in Kiosk"
|
|
*
|
|
* Replace "export default CheckInKiosk;" with:
|
|
* const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
* root.render(<CheckInKiosk />);
|
|
*/
|
|
|
|
// Placeholder (same as dashboard)
|
|
const Placeholder = () => (
|
|
<div style={{
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
height: '100vh',
|
|
backgroundColor: '#f3f4f6',
|
|
fontFamily: 'system-ui, -apple-system, sans-serif'
|
|
}}>
|
|
<div style={{
|
|
backgroundColor: 'white',
|
|
padding: '3rem',
|
|
borderRadius: '1rem',
|
|
boxShadow: '0 10px 25px rgba(0,0,0,0.1)',
|
|
maxWidth: '600px',
|
|
textAlign: 'center'
|
|
}}>
|
|
<h1 style={{color: '#2563eb', fontSize: '2rem', marginBottom: '1rem'}}>
|
|
VitalLink Check-in Kiosk
|
|
</h1>
|
|
<p style={{color: '#6b7280', marginBottom: '1.5rem'}}>
|
|
Please copy the React component code from Claude artifacts.
|
|
</p>
|
|
<div style={{
|
|
backgroundColor: '#dbeafe',
|
|
padding: '1rem',
|
|
borderRadius: '0.5rem',
|
|
border: '1px solid #3b82f6'
|
|
}}>
|
|
<p style={{color: '#1e40af', fontSize: '0.875rem'}}>
|
|
<strong>Instructions:</strong><br/>
|
|
1. Open this file in a text editor<br/>
|
|
2. Find the TODO comment above<br/>
|
|
3. Copy the complete CheckInKiosk component<br/>
|
|
4. Save and refresh
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
root.render(<Placeholder />);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
echo -e "${GREEN}✓ frontend/kiosk/index.html created (template)${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 6: Creating Control Scripts${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
# Start script
|
|
cat >start.sh <<'STARTSCRIPT'
|
|
#!/bin/bash
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
source venv/bin/activate
|
|
|
|
echo "╔═══════════════════════════════════════════════════════════════════════╗"
|
|
echo "║ Starting VitalLink System ║"
|
|
echo "╚═══════════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
mkdir -p logs
|
|
|
|
echo "Starting backend server..."
|
|
python backend/server.py > logs/backend.log 2>&1 &
|
|
echo $! > logs/backend.pid
|
|
echo "✓ Backend started (PID: $(cat logs/backend.pid))"
|
|
|
|
sleep 3
|
|
|
|
echo "Starting wristband simulator..."
|
|
python simulator/wristband_simulator.py > logs/simulator.log 2>&1 &
|
|
echo $! > logs/simulator.pid
|
|
echo "✓ Simulator started (PID: $(cat logs/simulator.pid))"
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════════════"
|
|
echo "✅ VitalLink System Running!"
|
|
echo "═══════════════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "📊 Access Points:"
|
|
echo " • API Docs: http://localhost:8000/docs"
|
|
echo " • API Stats: http://localhost:8000/api/stats"
|
|
echo " • WebSocket: ws://localhost:8000/ws"
|
|
echo " • Staff Dashboard: file://$PROJECT_ROOT/frontend/dashboard/index.html"
|
|
echo " • Check-in Kiosk: file://$PROJECT_ROOT/frontend/kiosk/index.html"
|
|
echo ""
|
|
echo "📝 View Logs:"
|
|
echo " • Backend: tail -f logs/backend.log"
|
|
echo " • Simulator: tail -f logs/simulator.log"
|
|
echo ""
|
|
echo "🛑 Stop System:"
|
|
echo " • Run: ./stop.sh"
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════════════"
|
|
STARTSCRIPT
|
|
|
|
chmod +x start.sh
|
|
echo -e "${GREEN}✓ start.sh created${NC}"
|
|
|
|
# Stop script
|
|
cat >stop.sh <<'STOPSCRIPT'
|
|
#!/bin/bash
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
echo "Stopping VitalLink system..."
|
|
|
|
if [ -f logs/backend.pid ]; then
|
|
kill $(cat logs/backend.pid) 2>/dev/null && echo "✓ Backend stopped" || echo "Backend not running"
|
|
rm -f logs/backend.pid
|
|
fi
|
|
|
|
if [ -f logs/simulator.pid ]; then
|
|
kill $(cat logs/simulator.pid) 2>/dev/null && echo "✓ Simulator stopped" || echo "Simulator not running"
|
|
rm -f logs/simulator.pid
|
|
fi
|
|
|
|
echo "✓ VitalLink system stopped"
|
|
STOPSCRIPT
|
|
|
|
chmod +x stop.sh
|
|
echo -e "${GREEN}✓ stop.sh created${NC}"
|
|
|
|
# Test script
|
|
cat >test.sh <<'TESTSCRIPT'
|
|
#!/bin/bash
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
source venv/bin/activate
|
|
|
|
echo "Running VitalLink Test Suite..."
|
|
echo ""
|
|
python tests/test_suite.py
|
|
TESTSCRIPT
|
|
|
|
chmod +x test.sh
|
|
echo -e "${GREEN}✓ test.sh created${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 7: Creating Documentation${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
# README
|
|
cat >README.md <<'EOF'
|
|
# VitalLink - ER Patient Monitoring System
|
|
|
|
Emergency department patient monitoring system using smart wristbands.
|
|
|
|
## Quick Start
|
|
|
|
1. **Copy Code from Claude Artifacts:**
|
|
- `backend/server.py` ← Copy "VitalLink Backend API (FastAPI)"
|
|
- `simulator/wristband_simulator.py` ← Copy "VitalLink Wristband Simulator"
|
|
- `tests/test_suite.py` ← Copy "VitalLink Complete Test Suite"
|
|
- `frontend/dashboard/index.html` ← Insert React code from "Staff Dashboard"
|
|
- `frontend/kiosk/index.html` ← Insert React code from "Check-in Kiosk"
|
|
|
|
2. **Test the System:**
|
|
```bash
|
|
./test.sh
|
|
```
|
|
|
|
3. **Start the System:**
|
|
```bash
|
|
./start.sh
|
|
```
|
|
|
|
4. **Access the Interfaces:**
|
|
- API Documentation: http://localhost:8000/docs
|
|
- Staff Dashboard: Open `frontend/dashboard/index.html` in browser
|
|
- Check-in Kiosk: Open `frontend/kiosk/index.html` in browser
|
|
|
|
5. **Stop the System:**
|
|
```bash
|
|
./stop.sh
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
vitallink/
|
|
├── backend/ # FastAPI server
|
|
├── simulator/ # Wristband simulator
|
|
├── frontend/ # Web interfaces
|
|
│ ├── dashboard/ # Staff monitoring
|
|
│ └── kiosk/ # Patient check-in
|
|
├── tests/ # Test suite
|
|
├── logs/ # System logs
|
|
└── venv/ # Python virtual env
|
|
```
|
|
|
|
## Commands
|
|
|
|
- `./start.sh` - Start backend + simulator
|
|
- `./stop.sh` - Stop all services
|
|
- `./test.sh` - Run test suite
|
|
- `tail -f logs/backend.log` - View backend logs
|
|
- `tail -f logs/simulator.log` - View simulator logs
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
# Run all tests
|
|
./test.sh
|
|
|
|
# Test API
|
|
curl http://localhost:8000/api/stats
|
|
|
|
# Create test patient
|
|
curl -X POST http://localhost:8000/api/checkin \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"firstName":"Test","lastName":"Patient","dob":"1990-01-01","symptoms":["Fever"],"severity":"moderate"}'
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
See `docs/SETUP_GUIDE.md` for detailed instructions.
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ README.md created${NC}"
|
|
|
|
# Setup guide
|
|
cat >docs/SETUP_GUIDE.md <<'EOF'
|
|
# Detailed Setup Guide
|
|
|
|
## Copying Code from Claude Artifacts
|
|
|
|
### 1. Backend Server (backend/server.py)
|
|
|
|
Open the artifact titled **"VitalLink Backend API (FastAPI)"** and copy the ENTIRE Python code.
|
|
|
|
Paste it into `backend/server.py`.
|
|
|
|
### 2. Wristband Simulator (simulator/wristband_simulator.py)
|
|
|
|
Open the artifact titled **"VitalLink Wristband Simulator & Base Station"** and copy the ENTIRE Python code.
|
|
|
|
Paste it into `simulator/wristband_simulator.py`.
|
|
|
|
### 3. Test Suite (tests/test_suite.py)
|
|
|
|
Open the artifact titled **"VitalLink Complete Test Suite"** and copy the ENTIRE Python code.
|
|
|
|
Paste it into `tests/test_suite.py`.
|
|
|
|
### 4. Staff Dashboard (frontend/dashboard/index.html)
|
|
|
|
1. Open the artifact titled **"VitalLink Staff Monitoring Dashboard"**
|
|
2. Copy the ENTIRE React component code
|
|
3. Open `frontend/dashboard/index.html` in a text editor
|
|
4. Find the TODO comment section
|
|
5. Paste the React code there
|
|
6. Remove the line `export default StaffDashboard;`
|
|
7. Add these lines at the end:
|
|
```javascript
|
|
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
root.render(<StaffDashboard />);
|
|
```
|
|
|
|
### 5. Check-in Kiosk (frontend/kiosk/index.html)
|
|
|
|
Follow the same process as the dashboard, but use the **"VitalLink Check-in Kiosk"** artifact.
|
|
|
|
## Verification
|
|
|
|
After copying all code:
|
|
|
|
```bash
|
|
# Activate virtual environment
|
|
source venv/bin/activate
|
|
|
|
# Run tests
|
|
./test.sh
|
|
|
|
# Start system
|
|
./start.sh
|
|
|
|
# In another terminal, test API
|
|
curl http://localhost:8000/api/stats
|
|
```
|
|
|
|
If everything works, you should see JSON output from the API.
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ docs/SETUP_GUIDE.md created${NC}"
|
|
|
|
# .gitignore
|
|
cat >.gitignore <<'EOF'
|
|
__pycache__/
|
|
*.py[cod]
|
|
venv/
|
|
logs/
|
|
*.log
|
|
*.pid
|
|
.DS_Store
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ .gitignore created${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${CYAN}STEP 8: Final Setup${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
|
|
# Create empty log directory
|
|
touch logs/.gitkeep
|
|
|
|
# Deactivate venv for clean state
|
|
deactivate 2>/dev/null || true
|
|
|
|
echo -e "${GREEN}✓ Project setup complete!${NC}"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}║ ✅ Installation Complete! ║${NC}"
|
|
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}📁 Project Location:${NC} $PROJECT_ROOT"
|
|
echo ""
|
|
echo -e "${YELLOW}🔔 IMPORTANT - Next Steps:${NC}"
|
|
echo ""
|
|
echo -e "${CYAN}1. Copy Code from Claude Artifacts:${NC}"
|
|
echo " Open each artifact in Claude and copy the code to these files:"
|
|
echo " • backend/server.py"
|
|
echo " • simulator/wristband_simulator.py"
|
|
echo " • tests/test_suite.py"
|
|
echo " • frontend/dashboard/index.html (insert React code)"
|
|
echo " • frontend/kiosk/index.html (insert React code)"
|
|
echo ""
|
|
echo -e "${CYAN}2. Navigate to project:${NC}"
|
|
echo " cd $PROJECT_ROOT"
|
|
echo ""
|
|
echo -e "${CYAN}3. Run tests:${NC}"
|
|
echo " ./test.sh"
|
|
echo ""
|
|
echo -e "${CYAN}4. Start the system:${NC}"
|
|
echo " ./start.sh"
|
|
echo ""
|
|
echo -e "${CYAN}5. Open interfaces:${NC}"
|
|
echo " xdg-open frontend/dashboard/index.html"
|
|
echo " xdg-open frontend/kiosk/index.html"
|
|
echo ""
|
|
echo -e "${GREEN}📖 Full documentation:${NC} cat docs/SETUP_GUIDE.md"
|
|
echo ""
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|