platepilot

Running PlatePilot on your laptop for yourself (home Wi-Fi)

One-time setup on the laptop (macOS)

  1. Install Docker Desktop (or OrbStack), and Node 22 (brew install node@22, or nvm install 22). Corepack ships with Node: corepack enable.
  2. Get the repository onto the laptop. From the dev desktop, scripts/laptop/export-repo.sh writes ~/platepilot-repo.tgz (sources plus git history, no node_modules); copy and unpack it:

    scp <desktop>:platepilot-repo.tgz ~/ && mkdir -p ~/code && tar -xzf ~/platepilot-repo.tgz -C ~/code
    cd ~/code/nutrition-coach
    
  3. Start everything:

    scripts/laptop/dev-up.sh
    

    It detects your Wi-Fi address, writes .env (with PHOTO_UPLOAD_PUBLIC_ENDPOINT_URL pointing at that address so the phone can upload photos), publishes LocalStack on the Wi-Fi interface through a gitignored docker-compose.override.yml, starts Postgres and LocalStack, installs dependencies, applies migrations, builds the workspace packages, and runs the API (tsx watch, so code changes reload) and the worker in the background with logs under .cache/laptop/.

  4. If macOS asks whether node or Docker may accept incoming connections, allow it. If the firewall is set to block all incoming connections, the phone cannot connect.

Stop with scripts/laptop/dev-down.sh; your data stays in the Docker volumes. Run dev-up.sh again after a reboot or when your router hands the laptop a new address (pass the address explicitly if detection picks the wrong interface: scripts/laptop/dev-up.sh 192.168.1.22).

The phone

Same Wi-Fi as the laptop, and the laptop must not be on the Amazon VPN while you use the app (the VPN client blocks devices on your home network from reaching the laptop; that is what broke the Wi-Fi attempt on 2026-09-20).

Install any local-device APK (built with scripts/mobile/build-android-apk.sh), then set the server address to http://<laptop-ip>:3001 in Me → About and help → Practice switches (local builds), or on the onboarding screen’s “Can’t connect?” card, and close and reopen the app. Or bake it in: scripts/mobile/build-android-apk.sh http://<laptop-ip>:3001 wifi (needs Docker; about four minutes with a warm cache).

Check from the phone browser first: http://<laptop-ip>:3001/health should show {"status":"ok"...}.

Developing on the laptop

What this replaces

The AWS playground (docs/runbooks/aws-playground.md) is stopped and must not be restarted for this project. The dev desktop path (docs/runbooks/android-device-preview.md) still works over USB but is no longer needed once the repo lives on the laptop.