Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions bin/fm-bridge-view.py
Original file line number Diff line number Diff line change
Expand Up @@ -1794,15 +1794,6 @@ def glance_html(nonce: str) -> str:
<h1>Starship</h1>
<form class="logout" method="post" action="/logout"><button type="submit">Log out</button></form>
</header>
<p class="meta"><span id="desk">Checking the desk</span> · <span id="mailbox">Mailbox…</span></p>
<p class="meta" id="observed">Observing…</p>
<p class="warn">Summary only. Do not approve from this page.</p>
<h2>Needs you</h2>
<div id="needs"><p class="empty">Loading…</p></div>
<h2>Under way</h2>
<div id="underway"><p class="empty">Loading…</p></div>
<h2>Waiting</h2>
<div id="waiting"><p class="empty">Loading…</p></div>
<h2>Talk</h2>
<div id="speak-box">
<label for="hold-speak">Hold to speak</label>
Expand All @@ -1818,6 +1809,15 @@ def glance_html(nonce: str) -> str:
</form>
<p class="meta" id="photo-count">Photos received today: 0</p>
<p id="photo-result" class="note"></p>
<p class="meta"><span id="desk">Checking the desk</span> · <span id="mailbox">Mailbox…</span></p>
<p class="meta" id="observed">Observing…</p>
<p class="warn">Summary only. Do not approve from this page.</p>
<h2>Needs you</h2>
<div id="needs"><p class="empty">Loading…</p></div>
<h2>Under way</h2>
<div id="underway"><p class="empty">Loading…</p></div>
<h2>Waiting</h2>
<div id="waiting"><p class="empty">Loading…</p></div>
<h2>Just finished</h2>
<div id="finished"><p class="empty">Loading…</p></div>
</main>
Expand Down
1 change: 1 addition & 0 deletions docs/bridge-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ It is an observation of durable fleet records, not a place to approve, merge, or
Hold-to-speak is a second voice channel into firstmate; it does not answer Needs-you items from this page.
Tapping a GitHub pull-request link is the only outbound jump, and those URLs are allowlisted.
The same authenticated page also accepts photo drops from the captain's phone, including several photos in one picker session, and a hold-to-speak control that forwards audio into the local glasses mailbox.
Those two controls sit at the top of the authenticated page, above the fleet glance, so they are reachable without scrolling on a phone.

The page is served from the Mac on IPv4 loopback and published on the tailnet with **Tailscale Serve HTTPS**.
It never uses Tailscale Funnel and never binds `0.0.0.0`.
Expand Down
5 changes: 3 additions & 2 deletions tests/fm-bridge-view.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -331,11 +331,12 @@ import sys

page = pathlib.Path(sys.argv[1]).read_text()
markers = [
'<h2>Talk</h2>',
'<h2>Send photos</h2>',
'<h2>Needs you</h2>',
'<h2>Under way</h2>',
'<h2>Waiting</h2>',
'<h2>Talk</h2>',
'<h2>Send photos</h2>',
'<h2>Just finished</h2>',
]
positions = [page.index(marker) for marker in markers]
if positions != sorted(positions):
Expand Down
Loading