Companion app was read-mostly — quick fixes still needed a workstation.
- service/variables: full env editor — add/edit/delete rows, secret
toggle, masked-secret preservation (untouched secrets resubmit the
"********" placeholder so stored ciphertext survives the PUT).
- service/domains: list with default/TLS status, add, remove,
set-default.
- service/settings: replicas stepper (0–16), container port, scale-to-
zero toggle + idle minutes — saves via PUT /services/:id.
- (tabs)/notifications: alerts tab with unread badge on the tab bar,
mark-read per item and mark-all.
- Service detail gains a Manage section linking all three screens.
State initializes at mount inside a child component rather than an
effect — post-save refetches no longer clobber in-flight edits, and
the react-hooks/set-state-in-effect lint stays clean.
Verified: tsc --noEmit, expo lint, expo export (android bundle,
1378 modules — router graph compiles).
Authored By: TDvorak <[email protected]>
Phone app v1 (Phase I): PAT auth against any instance, secure-store
credentials, dark UI matching the design system.
- Overview: service status counts, per-project health dots, deploy feed
- Services/Projects: status badges, drill-down detail
- Service detail: start/stop/restart/redeploy/sleep/wake, env-doctor
issues, deployment history + rollback
- Logs: 300-line tail, 5s poll, stderr highlighted
- Databases: status, start/stop/restart, backup-now
- Settings: server info, disconnect
CI: mobile job (tsc + expo lint) gated on a dedicated app/mobile paths
filter so non-mobile PRs skip it entirely.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>