feat(deployments): surface /deploy on the mobile nav + dashboard header

Capture entry-point was hidden in /tools cards.  Field workflow needs
to be one tap from anywhere, especially on mobile.

Mobile bottom nav: swap Devices → Deploy (slot 3).
  Menu / Dashboard / Deploy / Events.
  Devices still in the hamburger Menu drawer.

Desktop dashboard header: new orange "Field Deploy" button next to
"Last updated".  Only renders at md+ breakpoint (mobile already has it
in the bottom nav).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-16 04:56:07 +00:00
parent 1af5a94f57
commit ba4cf9e560
2 changed files with 23 additions and 9 deletions
+8 -5
View File
@@ -211,8 +211,10 @@
</div>
<!-- Bottom Navigation (Mobile Only) — primary field-work shortcuts.
Settings + Projects + Job Planner are reachable via the
hamburger Menu (slot 1) which opens the full sidebar drawer. -->
Deploy is here because the whole point of the workflow is "I'm
on site, capture this install in 90s before I leave." Devices,
Settings, Projects, Job Planner reachable via the hamburger
Menu (slot 1) which opens the full sidebar drawer. -->
<nav class="bottom-nav{% if request.query_params.get('embed') == '1' %} hidden{% endif %}">
<div class="grid grid-cols-4 h-16">
<button id="hamburgerBtn" class="bottom-nav-btn" onclick="toggleMenu()" aria-label="Menu">
@@ -227,11 +229,12 @@
</svg>
<span>Dashboard</span>
</button>
<button class="bottom-nav-btn" data-href="/roster" onclick="window.location.href='/roster'">
<button class="bottom-nav-btn" data-href="/deploy" onclick="window.location.href='/deploy'">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"/>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
<span>Devices</span>
<span>Deploy</span>
</button>
<button class="bottom-nav-btn" data-href="/sfm" onclick="window.location.href='/sfm'">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
+12 -1
View File
@@ -10,15 +10,26 @@
</div>
{% endif %}
<div class="mb-8 flex justify-between items-center">
<div class="mb-8 flex justify-between items-center gap-4 flex-wrap">
<div>
<h1 class="text-3xl font-bold text-gray-900 dark:text-white">Dashboard</h1>
<p class="text-gray-600 dark:text-gray-400 mt-1">Fleet overview and recent activity</p>
</div>
<div class="flex items-center gap-3">
<a href="/deploy"
class="hidden md:inline-flex items-center gap-2 px-4 py-2 bg-seismo-orange hover:bg-orange-600 text-white rounded-lg font-medium text-sm shadow"
title="Capture a field install — pick unit, snap photo, leave">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"/>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
Field Deploy
</a>
<div class="text-right">
<p class="text-xs text-gray-500 dark:text-gray-400">Last updated</p>
<p id="last-refresh" class="text-sm text-gray-700 dark:text-gray-300 font-mono">--</p>
</div>
</div>
</div>
<!-- Pending-deployments banner — auto-shows when there are field captures