hotel_pi/QUICK_REFERENCE.md
2026-04-06 21:33:52 -04:00

7.3 KiB

Hotel Pi - Quick Reference

Quick Start (Copy & Paste)

On Your Computer (First Time)

# Clone repository
git clone https://github.com/youruser/hotel-pi.git
cd hotel-pi

# Create environment file
cp .env.example .env

# Edit if needed
nano .env

# Start all services (requires Docker)
docker-compose up -d

# Wait ~30 seconds for services to start

# Access services
# Frontend: http://localhost:5173
# Directus CMS: http://localhost:8055
# Control: ws://localhost:3001

On Raspberry Pi (First Time)

# SSH into Pi
ssh pi@raspberrypi.local

# Clone and navigate
cd /home/pi
git clone https://github.com/youruser/hotel-pi.git
cd hotel-pi

# Run initialization (installs everything)
chmod +x scripts/init-system.sh
./scripts/init-system.sh

# Copy configuration
cp .env.example .env
nano .env
# Edit:
# VITE_API_URL=http://hotel-pi.local:8055
# VITE_WS_URL=ws://hotel-pi.local:3001
# WELCOME_NAME=Room 101 (or whatever)

# Start services
docker-compose up -d

# Wait 30 seconds

# Launch kiosk
./scripts/launch-kiosk.sh

Common Commands

Start/Stop Services

# Start all
docker-compose up -d

# Stop all
docker-compose down

# Restart specific service
docker-compose restart frontend

# View status
docker-compose ps

# View logs (all services)
./scripts/logs.sh all

# View logs (specific)
./scripts/logs.sh frontend
./scripts/logs.sh control

Frontend Development

cd frontend
npm install
npm run dev
# Runs on http://localhost:5173 with hot reload

Control Service Development

cd control-service
npm install
npm run dev
# Runs WebSocket server on port 3001

CMS Administration

  1. Open http://localhost:8055
  2. Create admin account (first time)
  3. Go to Collections
  4. Create "restaurants" and "attractions" collections
  5. Add content
  6. Enable public access (Settings → Roles & Permissions)

Rebuild Everything

./scripts/rebuild.sh

File Structure at a Glance

Hotel_Pi/
├── frontend/           ← Kiosk UI (Svelte)
├── control-service/    ← Remote control (Node.js)
├── directus/          ← CMS configuration
├── scripts/           ← Automation scripts
├── docker-compose.yml ← Service orchestration
├── .env.example       ← Configuration template
├── README.md          ← Overview
├── GETTING_STARTED.md ← Setup guide
├── DEPLOYMENT.md      ← Production guide
├── API.md             ← API reference
└── ARCHITECTURE.md    ← Technical details

Configuration Quick Reference

.env Variables

# Frontend
VITE_API_URL=http://localhost:8055
VITE_WS_URL=ws://localhost:3001
WELCOME_NAME=Guest
IDLE_TIMEOUT_MINUTES=5

# Database (change these in production!)
POSTGRES_PASSWORD=directus123
DB_PASSWORD=directus123
SECRET=change-me
AUTH_SECRET=change-me

Keyboard/Remote Controls

In Kiosk

Action Keyboard Remote
Navigate Arrow keys Arrow buttons
Select Enter OK/Select
Back Escape, Backspace Back/Exit
Wake idle Any key Any button

Troubleshooting Cheat Sheet

Problem Solution
Services won't start docker-compose logs → check errors
Frontend not loading Verify VITE_API_URL in .env
Images not showing Check Directus images are uploaded
Control service not responding curl http://localhost:3001/health
Remote not working Check TV CEC is enabled + cec-client installed

Health Checks

# Frontend running?
curl http://localhost:5173

# Directus running?
curl http://localhost:8055/server/health | jq .

# Control service running?
curl http://localhost:3001/health | jq .

# Database connected?
docker-compose exec postgres pg_isready -U directus

# All services?
docker-compose ps

Useful Scripts

./scripts/launch-kiosk.sh        # Start kiosk fullscreen
./scripts/rebuild.sh              # Clean rebuild
./scripts/logs.sh all             # View all logs
./scripts/logs.sh frontend        # View frontend logs
./scripts/logs.sh control         # View control logs
./scripts/stop.sh                 # Stop all services
./scripts/control.sh health       # Check service health

Development Tips

Hot Reload Frontend

cd frontend
npm run dev
# Changes auto-reload, keep window open

Hot Reload Control Service

cd control-service
npm run dev
# Service restarts on file changes

Test WebSocket

npm install -g wscat
wscat -c ws://localhost:3001

# Type: {"type":"ping","payload":{}}
# Response: {"type":"pong",...}

Add New Restaurant

  1. Open http://localhost:8055
  2. Collections → Restaurants
  3. "+ Create Item"
  4. Fill details, upload image
  5. Publish
  6. Changes appear in kiosk immediately

Production Checklist

  • Change database passwords in .env
  • Set strong SECRET and AUTH_SECRET
  • Configure CORS_ORIGIN properly
  • Test all navigation paths
  • Test remote control input
  • Backup Directus data
  • Set up auto-backups
  • Configure firewall rules
  • Change SSH password
  • Test power cycle recovery

Performance Tuning (Raspberry Pi)

# Monitor resources
htop

# Check CPU temp
vcgencmd measure_temp

# Reduce UI animations (if slow)
# Edit frontend CSS, reduce animation durations

# Reduce database load
# Implement caching in control service

Backup & Restore

Quick Backup

docker-compose exec postgres pg_dump -U directus directus > backup.sql
tar -czf hotel-pi-backup.tar.gz .env backup.sql

Quick Restore

tar -xzf hotel-pi-backup.tar.gz
docker-compose exec -T postgres psql -U directus directus < backup.sql

Emergency Procedures

Kiosk Frozen?

# SSH in from another machine
ssh pi@hotel-pi.local

# Kill Chromium
pkill -f chromium

# Restart kiosk
./scripts/launch-kiosk.sh

Database Corrupt?

# Stop services
docker-compose down

# Restore from backup
docker-compose exec -T postgres psql -U directus directus < backup.sql

# Restart
docker-compose up -d

Complete Reset

# WARNING: Deletes all data
docker-compose down
docker volume rm hotel_pi_postgres_data
docker-compose up -d
# Requires Directus setup again

Getting Help

  1. Check service logs: ./scripts/logs.sh all
  2. Review documentation in README files
  3. Check .env configuration
  4. Verify all services are running: docker-compose ps
  5. Test connectivity: curl http://localhost:5173

Key Concepts

Term Meaning
Kiosk Fullscreen app, no UI chrome
CMS Content Management System (Directus)
REST API HTTP-based data endpoint
WebSocket Real-time bidirectional communication
CEC Consumer Electronics Control (remote via HDMI)
Docker Containerization platform
Svelte Frontend framework
Node.js JavaScript runtime

Version: 1.0.0 | Last Updated: March 2024 | Status: Production Ready