diff --git a/CHANGELOG.md b/CHANGELOG.md
index 253408155..b81ae2aee 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# CHANGELOG
+## 2026-11-09 - Main screen, first pass (Phase 3, session 1, draft)
+
+- Phones (under 900px): the crossing results list now comes before the map, so the first thing after the controls is a wait. A starred crossing is already sorted first, so returning visitors see their own crossing's wait first. Desktop layout unchanged.
+- One clock: the saved-data / refresh notice now shows its time in the visitor's zone, matching the header, instead of UTC. The duplicate "Snapshot retrieved" tile in the footer is removed; the header and the "Fetched ... ago" line already show it.
+- Checks: full `npm test` (including route and border-map browser checks) passes after a prerendered build. Before/after phone screenshots captured in EN and ES. Entry bundle 62.00 KB gzip.
+- Not in this pass: a "your crossing" hero, removing repeated info between map, list and crossing page, and lane cues in Standard-only sections (sessions 2-3).
+
## 2026-11-09 - Fresher backup data and an honest "could not load" state
- Fallback freshness: when the live CBP endpoint fails, the site now also reads the collector's committed feed through a same-origin rewrite (`/data/latest/crossings.json` -> `main/public/data/crossings.json` on GitHub). It keeps whichever valid backup is newer, the collector feed or the bundled copy. The bundled copy only changes when Vercel deploys (daily), so it could be most of a day old; the collector commits every 15 minutes. Backup readings are still labeled as fallback with their original clock.
diff --git a/src/components/dashboard/AboutFooter.jsx b/src/components/dashboard/AboutFooter.jsx
index 08deb69ec..b3c9125a7 100644
--- a/src/components/dashboard/AboutFooter.jsx
+++ b/src/components/dashboard/AboutFooter.jsx
@@ -5,8 +5,7 @@ import React from 'react';
* Goal: give LLMs and SEO crawlers explicit, citable facts about this
* site's data, coverage, update frequency, and privacy model.
*/
-export default function AboutFooter({ language, fetchedAt, count, direction = 'northbound' }) {
- const updatedStr = fetchedAt ? new Date(fetchedAt).toLocaleString() : '—';
+export default function AboutFooter({ language, count, direction = 'northbound' }) {
const isSouthbound = direction === 'southbound';
return (
@@ -32,7 +31,7 @@ export default function AboutFooter({ language, fetchedAt, count, direction = 'n
-
{es ? 'La observación solicitada no está en este archivo. Elige otra hora.' : 'The requested observation is absent from this archive. Choose another time.'}
}{lane !== 'passenger_standard' &&
{t.notRetained}.
}
: !trusted &&
{noData ? t.unavailable : offline ? es ? 'Sin conexión. Conservamos reportes anteriores.' : 'Offline. Retained reports are shown.' : fromFallback ? es ? 'Datos de respaldo guardados. Las condiciones actuales no están verificadas.' : 'Saved fallback data. Current conditions are not verified.' : success === false ? es ? 'No se pudo actualizar. Conservamos la hora y los valores del último reporte.' : 'Refresh unavailable. The last report values and original time are retained.' : es ? 'Consulta desactualizada o de hora desconocida.' : 'Stale or unknown retrieval time.'} {clock(fetchedAt, language)}
{es ? 'La observación solicitada no está en este archivo. Elige otra hora.' : 'The requested observation is absent from this archive. Choose another time.'}
}{lane !== 'passenger_standard' &&
{t.notRetained}.
} : !trusted &&
{noData ? t.unavailable : offline ? es ? 'Sin conexión. Conservamos reportes anteriores.' : 'Offline. Retained reports are shown.' : fromFallback ? es ? 'Datos de respaldo guardados. Las condiciones actuales no están verificadas.' : 'Saved fallback data. Current conditions are not verified.' : success === false ? es ? 'No se pudo actualizar. Conservamos la hora y los valores del último reporte.' : 'Refresh unavailable. The last report values and original time are retained.' : es ? 'Consulta desactualizada o de hora desconocida.' : 'Stale or unknown retrieval time.'} {clock(fetchedAt, language, localZone())}