# Getting Started with Hotel Pi ## Quick Start (5 minutes) ### 1. Prerequisites - Docker & Docker Compose installed - Node.js 18+ (for local development) - Git ### 2. Clone & Setup ```bash cd /path/to/Hotel_Pi cp .env.example .env ``` ### 3. Start Services ```bash docker-compose up -d ``` Wait for all services to be healthy: ```bash docker-compose ps ``` ### 4. Access the System | Service | URL | Purpose | |---------|-----|---------| | Frontend | http://localhost:5173 | Kiosk UI | | Directus CMS | http://localhost:8055 | Content management | | Control Service | ws://localhost:3001 | Remote control | ## Development Setup ### Run Frontend Locally ```bash cd frontend npm install npm run dev ``` Frontend will be available at http://localhost:5173 ### Run Control Service Locally ```bash cd control-service npm install npm run dev ``` WebSocket available at ws://localhost:3001 ### Docker Development Mode Use the dev override file: ```bash docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d ``` This enables hot-reload for both frontend and control service. ## Directus CMS Setup 1. **Access Directus:** http://localhost:8055 2. **Create admin account** (first time setup) 3. **Create collections:** - See [directus/README.md](directus/README.md) for detailed collection schema - Restaurants (name, description, cuisine_type, image, website_url) - Attractions (name, description, category, distance_km, image) 4. **Add content:** Use Directus admin panel to add restaurants and attractions 5. **Enable public access:** - Settings → Roles & Permissions - Create "Public" role with read access to collections ## Testing & Navigation ### Keyboard Controls (Development) - **Arrow Keys** - Navigate menu - **Enter** - Select item - **Escape/Backspace** - Go back - **Any key** - Wake from idle screen ### Remote Control (Hardware) HDMI-CEC compatible remotes will work automatically once connected. The control service translates CEC codes to navigation events. ## Raspberry Pi Deployment ### System Setup ```bash # Run initialization script ./scripts/init-system.sh ``` This will: - Install system dependencies - Set up Docker - Configure HDMI-CEC - Create systemd service - Enable auto-startup ### Configure Environment Edit `.env` with Raspberry Pi specifics: ```bash # .env VITE_API_URL=http://raspberrypi.local:8055 VITE_WS_URL=ws://raspberrypi.local:3001 WELCOME_NAME=Guest Room 101 IDLE_TIMEOUT_MINUTES=10 ``` ### Deploy ```bash # Build and restart services ./scripts/rebuild.sh # Start kiosk immediately ./scripts/launch-kiosk.sh # Or enable auto-start sudo systemctl start hotel-pi-kiosk sudo systemctl status hotel-pi-kiosk ``` ### View Logs ```bash # Kiosk logs journalctl -u hotel-pi-kiosk -f # Docker logs ./scripts/logs.sh all # Specific service ./scripts/logs.sh frontend ./scripts/logs.sh control ./scripts/logs.sh directus ``` ## Common Tasks ### Add New Restaurant 1. Open Directus: http://localhost:8055 2. Go to Collections → Restaurants 3. Click "+ Create Item" 4. Fill in details (name, description, image, etc.) 5. Publish 6. Changes appear in kiosk immediately ### Modify Idle Screen Message Edit `.env`: ```bash WELCOME_NAME="Welcome, Guest" IDLE_TIMEOUT_MINUTES=5 ``` Then restart frontend: ```bash docker-compose restart frontend ``` ### Connect Remote Control 1. Ensure TV supports HDMI-CEC 2. Enable CEC in TV settings 3. Power on and connect remote 4. System automatically detects input ### Switch to Plex In the home screen, select "Watch Plex". The system will: 1. Exit fullscreen kiosk 2. Launch Plex media center 3. Return to kiosk when Plex closes ## Troubleshooting ### Services Won't Start ```bash # Check Docker status docker-compose ps # View service logs ./scripts/logs.sh all # Rebuild from scratch ./scripts/rebuild.sh ``` ### Frontend Not Loading - Check API URL: `VITE_API_URL` in `.env` - Verify Directus is running: `http://localhost:8055` - Clear browser cache - Check frontend logs: `./scripts/logs.sh frontend` ### Control Service Not Connecting - Check WebSocket URL: `VITE_WS_URL` in `.env` - Verify service is running: `curl http://localhost:3001/health` - Check firewall rules - Review service logs: `./scripts/logs.sh control` ### HDMI-CEC Not Working ```bash # Test if cec-client is installed which cec-client # If not installed on Raspberry Pi sudo apt-get install libcec-dev # Test CEC connection echo "as" | cec-client -s ``` ### Database Issues ```bash # Restart database docker-compose restart postgres # Check database logs ./scripts/logs.sh db # Backup and restore docker-compose exec postgres pg_dump -U directus directus > backup.sql ``` ## File Structure ``` Hotel_Pi/ ├── frontend/ # SvelteKit kiosk UI ├── control-service/ # Node.js WebSocket + CEC ├── directus/ # CMS configuration ├── scripts/ # Deployment & utility scripts ├── docker-compose.yml # Main orchestration └── README.md # Project documentation ``` ## Production Checklist - [ ] Change all default passwords in `.env` - [ ] Set `SECRET` and `AUTH_SECRET` to random values - [ ] Configure `CORS_ORIGIN` for your domain - [ ] Set up HTTPS (if exposing to internet) - [ ] Configure automatic backups - [ ] Set up log rotation - [ ] Test HDMI-CEC on target TV - [ ] Verify idle timeout settings - [ ] Load test with sample data - [ ] Prepare CMS content before deployment ## Support & Documentation - **Frontend Guide:** See [frontend/README.md](frontend/README.md) - **Control Service:** See [control-service/README.md](control-service/README.md) - **CMS Setup:** See [directus/README.md](directus/README.md) - **Architecture:** See main [README.md](README.md) ## Next Steps 1. **Add Content:** Populate Directus with restaurants and attractions 2. **Customize UI:** Edit frontend components in `frontend/src/components/` 3. **Configure Plex:** Set up Plex media server and HTPC app 4. **Test Workflow:** Navigate through all screens 5. **Deploy:** Follow Raspberry Pi deployment steps above