From 42e97b4a79613e0e2bb58bd87473097e8ede0aa3 Mon Sep 17 00:00:00 2001 From: timmy Date: Fri, 21 Aug 2026 09:05:18 +0000 Subject: [PATCH] feat: add read-first Week Ahead overview (Closes #1216) --- README.md | 3 + frontend/dashboard.css | 3 + frontend/index.html | 7 ++- frontend/week-plan.js | 40 ++++++++---- tests/e2e/test_mobile_week_ahead_release.py | 21 +++++++ tests/test_week_plan_frontend.py | 67 +++++++++++++++++++-- 6 files changed, 121 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index d9e15fc..cd3fba3 100644 --- a/README.md +++ b/README.md @@ -167,6 +167,9 @@ storage before closing on a phone. The Queues summary marks it **sync pending** foreground, and midnight lifecycle checks share one delivery flight. A successful account receipt removes the pending copy, while a revision conflict preserves both the phone plan and fresh server snapshot for review. Unsynced Tomorrow work is never promoted into Today. +**Week Ahead** opens as a read-first seven-day mobile overview, so operators can inspect the next planned day, +work titles and references, load versus capacity, overloads, and pending sync without staging a change. **Edit day** +enters one date and returns to the refreshed overview; **Edit week** starts the continuous planning pass. **Plan Week Ahead** continues through seven local dates and now finishes on a mobile review step instead of closing after the seventh save. The review shows planned minutes against each day’s capacity, marks overloads, and flags work assigned to more than one date. Operators can move an item to another date without copying it; diff --git a/frontend/dashboard.css b/frontend/dashboard.css index d7521d3..0b278c2 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -321,6 +321,8 @@ textarea { resize: vertical; min-height: 120px; } .week-review-days { display:grid; gap:12px; } .week-review-day { padding:12px; border:1px solid #31577f; border-radius:12px; background:#10233a; } .week-review-day.is-overloaded { border-color:#f59e0b; background:#2a1c12; } +.week-review-day.is-next-up { border-color:#60a5fa; box-shadow:0 0 0 1px #60a5fa inset; } +.week-next-up { display:inline-block; margin-left:6px; padding:2px 7px; border-radius:999px; background:#1d4f7a; color:#dbeafe; font-size:11px; vertical-align:middle; } .week-review-day header { display:flex; align-items:center; justify-content:space-between; gap:8px; } .week-review-day header button { flex:0 0 auto; min-height:44px; } .week-review-day h3, .week-review-day p { margin:0 0 8px; } @@ -337,6 +339,7 @@ textarea { resize: vertical; min-height: 120px; } .week-review-duplicates { margin:12px 0; padding:12px; border:1px solid #f59e0b; border-radius:10px; background:#2a1c12; } .week-review-status { min-height:1.4em; margin:10px 0; } #confirm-week-plan { width:100%; min-height:48px; position:sticky; bottom:0; } +#edit-week-plan { width:100%; min-height:48px; position:sticky; bottom:0; } #open-week-capacity-import { width:100%; min-height:44px; margin:8px 0 12px; } .week-capacity-import { position:fixed; z-index:121; inset:0; box-sizing:border-box; width:100%; max-width:560px; margin-inline:auto; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); background:#0b1526; overflow:auto; overflow-x:hidden; } .week-capacity-import[hidden] { display:none; } diff --git a/frontend/index.html b/frontend/index.html index 4caeb60..7be1c29 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -506,13 +506,14 @@