Hermes
f118b890f0
fix: add camera node IPEX antenna hole
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 8s
CI/CD / build (pull_request) Failing after 9s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 14:36:22 +00:00
Hermes
d89f9dc20b
fix: make rear strap brackets side-feed
CI/CD / lint-and-typecheck (pull_request) Successful in 8s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 9s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 14:15:04 +00:00
Hermes
daeea9f2c9
fix: make camera node strap loops vertical
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 4m50s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 13:58:28 +00:00
Hermes
9a50d0c801
fix: add camera node USB power ports
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 9s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 13:33:06 +00:00
Hermes
af68bfaa3a
fix: make camera case cutouts visible
CI/CD / lint-and-typecheck (pull_request) Successful in 9m27s
CI/CD / test (pull_request) Successful in 9m27s
CI/CD / build (pull_request) Failing after 4m49s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 13:09:45 +00:00
Hermes
bbc6b1ea05
fix: redo camera node case as upright enclosure
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 9m27s
CI/CD / build (pull_request) Failing after 4m51s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 12:42:01 +00:00
Hermes
4487f0e0a4
fix: seat camera node case preview lid
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 6s
CI/CD / build (pull_request) Failing after 9s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 11:57:43 +00:00
Hermes
8c8d4e45e5
feat: add camera node case v4 status panel CAD
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 4m49s
CI/CD / deploy (pull_request) Has been skipped
2026-05-23 11:54:18 +00:00
Hermes
fe193701ae
CUB-230: hub-side deduplication for offline buffering replay
...
Build (Dev) / build (push) Failing after 10s
CI/CD / lint-and-typecheck (push) Successful in 6s
CI/CD / test (push) Successful in 6s
CI/CD / build (push) Failing after 8s
CI/CD / deploy (push) Has been skipped
- Add dedup check in handleStatus using (camera_id, recorded_at) uniqueness
- Skip insert if duplicate detected - logs replayed entries
- Go mod: updated version to 1.19
2026-05-23 07:40:06 +00:00
overseer
1a8f67a392
Merge pull request 'feat: add v3 hardware case and update hub network' ( #6 ) from agent/hermes/remoterig-hardware-v3-network into dev
...
Build (Dev) / build (push) Failing after 9s
CI/CD / lint-and-typecheck (push) Successful in 9m29s
CI/CD / test (push) Successful in 9m27s
CI/CD / build (push) Failing after 4m50s
CI/CD / deploy (push) Has been skipped
Reviewed-on: #6
2026-05-22 19:43:40 -04:00
Hermes
4c4368a79f
fix: make tripod case dovetail connector fit
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 8s
CI/CD / deploy (pull_request) Has been skipped
2026-05-22 17:15:23 -04:00
Hermes
0e2e94a4cf
docs: align hardware and MQTT architecture notes
CI/CD / lint-and-typecheck (pull_request) Successful in 7s
CI/CD / test (pull_request) Successful in 10m3s
CI/CD / build (pull_request) Failing after 4m58s
CI/CD / deploy (pull_request) Has been skipped
2026-05-22 17:08:11 -04:00
Hermes
c5cbeabd92
feat: add v3 hardware case and update hub network
CI/CD / lint-and-typecheck (pull_request) Failing after 14m12s
CI/CD / test (pull_request) Has been cancelled
CI/CD / build (pull_request) Has been cancelled
CI/CD / deploy (pull_request) Has been cancelled
2026-05-22 16:58:11 -04:00
Hermes
f4bf37d6a3
feat: add interactive 3D case viewer (Three.js)
...
Build (Dev) / build (push) Failing after 0s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Rotatable 3D render of the tripod-mounted dual-ESP case:
- Case body with rounded corners and lid
- Stacked ESP32 + ESP8266 boards inside
- LED indicator, USB port, ventilation slots
- Tripod pole with C-clamp mount
- USB cables, screws, chip details
- Drag to rotate, scroll to zoom
- Open in any browser
2026-05-22 01:06:59 +00:00
Hermes
893574ee79
feat: redesigned case — tripod-clip box for dual ESPs, USB power bank
...
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Replaced GoPro-sleeve case design with simpler stand-mounted box:
- Case clips to tripod leg/stand pole (20-35mm diameter)
- No camera sleeve needed — case sits on the stand
- Powered by standard USB power bank (off-the-shelf)
- Holds ESP8266 + ESP32 stacked with UART wiring
- Cable ports for USB in/out, LED window, ventilation
Simplified BOM: ~1/node (down from 4), no buck converters needed
2026-05-22 01:03:53 +00:00
Hermes
b3d4226b1c
feat: dual-board architecture — ESP8266 camera bridge + ESP32 MQTT bridge
...
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Complete rewrite of firmware into two dedicated boards per camera node:
ESP8266 (Camera Bridge):
- Connects ONLY to GoPro AP — polls status, sends over UART
- Zero network switching, zero MQTT
- HTTP GET /bacpac/SH for status, start/stop
- JSON-per-line UART protocol to ESP32
ESP32 (MQTT Bridge):
- Connects ONLY to travel router — MQTT to Pi hub
- Reads status from ESP8266 over UART2 (RX16/TX17)
- Auto-registration, heartbeat, command forwarding
- Zero camera communication
UART Protocol: JSON-per-line at 115200 8N1
ESP8266→ESP32: status/ack/pong/error
ESP32→ESP8266: cmd (start_recording/stop_recording/ping)
Hardware updates:
- BOM now includes both boards (~4/node)
- 3D case has stacked dual-board compartment
- UART wire channel between board recesses
- Shared 3.3V power rail for both boards
2026-05-22 00:49:06 +00:00
Hermes
324402f268
feat: add ESP8266 support + Akaso camera compatibility config
...
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
Build (Dev) / build (push) Failing after 8s
CI/CD / deploy (push) Has been skipped
- Unified firmware for ESP32 (dual-STA) and ESP8266 (time-shared STA)
- ESP8266: alternates between GoPro AP and travel router per poll cycle
- PlatformIO dual-target: esp32dev + esp8266dev (d1_mini)
- camera_ip config field for Akaso/non-GoPro cameras
- LittleFS support for ESP8266 (replaces SPIFFS)
- Camera compatibility table (GoPro H3/H4, Akaso)
- LED polarity handled per-platform (ESP8266 active-low)
ESP8266 time-sharing adds ~4s latency per 30s cycle — invisible at poll rate.
2026-05-22 00:28:48 +00:00
Hermes
37c5362216
merge: resolve conflicts with main (take dev versions)
...
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 1s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
CI/CD / test (pull_request) Successful in 8s
CI/CD / build (pull_request) Failing after 11s
CI/CD / deploy (pull_request) Has been skipped
CI/CD / lint-and-typecheck (pull_request) Successful in 10s
Conflicts in cmd/server/main.go, go.mod, internal/db/db.go
— main had older/simpler versions from PR #4 (README)
— dev has full codebase with MQTT, SSE, embed
2026-05-22 00:03:39 +00:00
overseer
d9c06b28fd
Merge pull request 'CUB-208: Add README with project overview and setup instructions' ( #4 ) from hermes/cub-208-readme into main
...
Reviewed-on: #4
2026-05-21 17:56:07 -04:00
Hermes
d419dfe519
feat: add PlatformIO ESP32 firmware with dual-STA + MQTT + GoPro control
...
CI/CD / lint-and-typecheck (pull_request) Failing after 2s
CI/CD / test (pull_request) Has been skipped
CI/CD / build (pull_request) Has been skipped
CI/CD / deploy (pull_request) Failing after 12m6s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Build (Dev) / build (push) Failing after 14s
CI/CD / lint-and-typecheck (push) Failing after 0s
firmware/
├── platformio.ini — ESP32 (esp32dev), PubSubClient + ArduinoJson
├── src/main.cpp — Full camera node firmware (360 lines)
│ ├── SPIFFS config persistence
│ ├── Dual Wi-Fi STA (travel router + GoPro AP)
│ ├── GoPro Hero 3 HTTP API (start/stop/status)
│ ├── 60-byte binary status blob parser
│ ├── MQTT per contract (status QoS1, heartbeat QoS1, announce QoS2)
│ ├── Command subscription (start/stop/reboot)
│ ├── Auto-registration (announce → hub assigns cam-NNN)
│ ├── Heartbeat every 60s, status every 30s
│ ├── LED status indicator
│ └── Exponential backoff reconnection
├── data/config.json — Default SPIFFS config template
└── README.md — Quick start, config reference, troubleshooting
2026-05-21 21:54:05 +00:00
Hermes
e4324e626f
feat: add 3D printable case design (OpenSCAD) and hardware assembly guide
...
- GoPro Hero 3 sleeve with lens/screen/USB cutouts
- ESP32 D1 Mini electronics compartment (vented)
- LiPo battery compartment with velcro strap slots
- Bill of materials (~0 per camera node)
- Wiring diagram (LiPo → dual buck converters → ESP32 + GoPro)
- Field deployment workflow
OpenSCAD model in hardware/case/remoterig-case.scad
Assembly guide in hardware/README.md
2026-05-21 21:50:26 +00:00
Hermes
5bc327e909
feat: add Pi provisioning, systemd service, and deploy scripts
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
2026-05-21 21:42:43 +00:00
Hermes
6b6b66ab89
feat: embed React frontend in Go binary with SPA fallback
2026-05-21 21:39:07 +00:00
Hermes
74d6130dd5
deploy(dev): rename OpenClaw to RemoteRig, add config.yaml deployment
...
- BINARY_NAME: openclaw → remoterig
- DEPLOY_PATH: /opt/openclaw/openclaw → /opt/remoterig/remoterig
- SERVICE: openclaw → remoterig
- Deploy tmp path: /tmp/openclaw-deploy → /tmp/remoterig-deploy
- Add config.yaml deployment step: copies config.yaml alongside binary on dev host if present in repo
- Backup/rollback logic preserved (keeps last 3 backups)
- Failure notification path updated to /tmp/remoterig-deploy-failure.txt
2026-05-21 21:38:48 +00:00
Hermes
a90a1d567e
build(dev): switch to ARM64 cross-compile for Pi Zero 2 W deployment
...
- Rename BINARY_NAME from openclaw to remoterig
- Cross-compile with GOOS=linux GOARCH=arm64 for Raspberry Pi Zero 2 W
- Build React frontend at repo root (npm ci && npm run build) producing dist/
- Remove old web/ working-directory and explicit embed step (handled by go:embed)
- Repository dispatch event_type unchanged: dev-build-success
2026-05-21 21:38:39 +00:00
Hermes
607aea514b
feat: harden SSE endpoint with typed events and Last-Event-ID
...
Build (Dev) / build (push) Failing after 0s
CI/CD / lint-and-typecheck (push) Failing after 1s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
- Added monotonic event ID (Last-Event-ID) for reconnection support
- Events now emit typed: 'event: camera_status' for client-side filtering
- Initial connection event sends 'event: connected' with ID
- Reconnection acknowledgment via Last-Event-ID header
- CORS preflight (OPTIONS) handler
- Access-Control-Allow-Headers: Last-Event-ID
- Initial heartbeat shortened to 15s for faster detect (30s for steady)
Closes CUB-233.
2026-05-21 21:18:24 +00:00
Hermes
f200cd9782
feat: add MQTT subscriber for ESP32 camera status ingestion
...
Implements MQTT subscriber (internal/mqtt/subscriber.go) that:
- Connects to Mosquitto broker with auto-reconnect
- Subscribes to remoterig/cameras/+/status, +/heartbeat, +/announce
- Parses and validates incoming messages per MQTT contract
- Inserts status_logs with duplicate prevention
- Auto-detects recording state changes and manages recording_events
- Broadcasts camera status changes via SSE hub
- Camera auto-registration via announce (MAC-based, sequential cam-NNN)
- Heartbeat watchdog marks cameras offline after 120s silence
- Wired into main.go with graceful degradation (warns if broker unreachable)
Dependency: github.com/eclipse/paho.mqtt.golang v1.5.0
Closes CUB-232.
2026-05-21 21:16:08 +00:00
Hermes
ce188086cb
docs: update CONTEXT.md with closed-network architecture and current state
...
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
- Replaced architecture diagram with travel router LAN design
- Added MQTT contract reference
- Updated issue status table with agent assignments
- Revised known limitations to reflect actual gaps
- Added network config section (subnet, static IP)
- Removed CUB-182 (canceled duplicate)
Post-sync: 13 done, 15 backlog, 1 in review, 1 canceled.
2026-05-21 21:11:33 +00:00
Hermes
df212796d2
docs: add MQTT message format contract with closed-network architecture
...
Defines topic hierarchy, payload schemas, QoS levels, heartbeat
protocol, camera auto-discovery via announce topic, offline
buffering strategy, and command/response flow for start/stop.
Architecture: travel router subnet (192.168.4.x), Pi Zero 2 W
runs Mosquitto + Go backend, ESP32s dual-STA to GoPro AP +
travel router. No internet dependency.
Closes CUB-238.
2026-05-21 21:08:38 +00:00
overseer
861aedd6d8
CUB-208: Add README with project overview and setup instructions
2026-05-21 17:47:29 +00:00
Otto
02fa6e4d4f
docs: add comprehensive project context file (CONTEXT.md) for agent reference
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Build (Dev) / build (push) Failing after 35s
2026-05-21 13:19:26 -04:00
overseer
07ecff3b5f
Merge pull request 'CUB-196: CameraCard component with live SSE status display' ( #3 ) from agent/hermes/CUB-196-cameracard into dev
...
Build (Dev) / build (push) Failing after 1s
CI/CD / lint-and-typecheck (push) Failing after 0s
CI/CD / test (push) Has been skipped
CI/CD / build (push) Has been skipped
CI/CD / deploy (push) Has been skipped
Reviewed-on: #3
2026-05-21 10:26:55 -04:00
Hermes
1854a1cb2b
ci: add Gitea Actions pipeline (lint, typecheck, test, build, deploy)
CI/CD / lint-and-typecheck (pull_request) Failing after 0s
CI/CD / test (pull_request) Has been skipped
CI/CD / build (pull_request) Has been skipped
CI/CD / deploy (pull_request) Has been skipped
2026-05-21 14:16:44 +00:00
overseer
fcc5feb1be
Merge branch 'dev' into agent/hermes/CUB-196-cameracard
2026-05-21 10:10:39 -04:00
overseer
cf3df557dd
Merge pull request 'CUB-195: add useSSE hook and Zustand camera store for live SSE events' ( #2 ) from agent/rex/CUB-195-react-sse-hook into dev
...
Reviewed-on: #2
2026-05-21 10:10:32 -04:00
Hermes
db4663380b
CUB-196: fix future timestamps, negative battery clamp, boundary tests
...
Grimm review fixes:
- formatRelativeTime: guard future timestamps (clock skew) → 'unknown'
- battery display: clamp negative values to 0%
- formatTimeLeft: floor fractional seconds
- Tests: +4 (future timestamp, negative battery, 15%/50% boundaries)
2026-05-21 14:07:57 +00:00
Rex
08d5ceb792
CUB-196: remove unused vi import from test
2026-05-21 12:07:52 +00:00
Rex
047241005b
CUB-196: add CameraCard unit tests (vitest + testing-library, 16 tests)
2026-05-21 12:07:05 +00:00
Rex
ad813cd206
CUB-196: wire CameraCard into App grid with SSE live updates
2026-05-21 12:03:17 +00:00
rex-bot
4ab7d41329
CUB-196: add accessibility and edge case fixes for CameraCard
2026-05-21 11:59:40 +00:00
rex-bot
e82208f897
CUB-196: add CameraCard component with battery bar, recording indicator, online status
2026-05-21 11:51:40 +00:00
rex-bot
fa0956c6fd
CUB-195: add useSSE hook and Zustand camera store for live SSE events
2026-05-20 22:56:46 +00:00
overseer
5bbfc11597
Merge commit '5793617be3154877fa10e4f46b7608de86fa54ca' into dev
2026-05-19 07:36:48 -04:00
overseer
5793617be3
CUB-194: scaffold Vite + React + TypeScript + Tailwind frontend
...
otto/review PR approved by Otto - frontend scaffold verified clean
ci/build Build + type-check + lint verified clean
- Initialize Vite project with React + TypeScript + Tailwind CSS
- Dark theme dashboard design (rig-dark palette, rig-accent colors)
- Minimal App with RemoteRig header + 'Dashboard coming soon' placeholder
- Directory structure: components, hooks, services, types, utils
- TypeScript types for Camera, CameraFeed, SystemHealth, StreamConfig
- Custom hooks: useCameraStatus, useSystemHealth (with mock data)
- API service layer with proxy config for /api → localhost:8080
- eslint, postcss, autoprefixer configured
- lucide-react icons integrated (Camera icon)
- .env.example, .gitignore, tsconfig basepaths configured
- Build + type-check + lint verified clean
2026-05-19 07:31:52 -04:00
overseer
111cce4c84
CUB-187+188+191+193: Recording handlers, status ingestion, SSE endpoint
ci/verify Branch verified
2026-05-18 17:52:48 -04:00
overseer
5cc57446e5
CUB-186: Camera list and register API handlers + Chi router wiring
2026-05-18 17:48:58 -04:00
overseer
7a0a76bbd5
CUB-182: Chi router setup with auth middleware and graceful shutdown
2026-05-18 17:47:06 -04:00
overseer
c0b2b4cf57
CUB-184: API key auth middleware
2026-05-18 17:45:25 -04:00
overseer
e55dae340b
CUB-185: Camera/StatusLog/RecordingEvent/Setting Go models
2026-05-18 17:45:10 -04:00
overseer
dcd64ee199
CUB-183: SQLite schema migration + DB init
2026-05-18 17:44:50 -04:00