From fd1c0148b6fc7347f2bcace41c43e775f3997f82 Mon Sep 17 00:00:00 2001 From: b0txec Date: Wed, 19 Aug 2026 10:38:25 +0300 Subject: [PATCH] Refine production workspace layouts --- docs/DEVELOPMENT_AND_STAGING.md | 35 ++++------------- web/src/css/aggregator.css | 45 ++++++++++++++++++++++ web/src/pages/cities/Cities.tsx | 10 ++--- web/src/pages/map-graphics/MapGraphics.tsx | 10 +++-- web/src/pages/map-graphics/mapGraphics.css | 32 +++++++++++++++ 5 files changed, 95 insertions(+), 37 deletions(-) diff --git a/docs/DEVELOPMENT_AND_STAGING.md b/docs/DEVELOPMENT_AND_STAGING.md index c46bea1..28fe6ed 100644 --- a/docs/DEVELOPMENT_AND_STAGING.md +++ b/docs/DEVELOPMENT_AND_STAGING.md @@ -4,8 +4,9 @@ | Environment | Purpose | Address | |---|---|---| -| Windows | Source editing, local Docker build, and initial testing | `http://localhost:9190` | -| Rocky Linux | Production-like isolated staging | `http://192.168.1.101:9190` | +| Windows | Source editing and Git workflow only | Not applicable | +| Rocky Linux | Docker development and production-like staging | `http://192.168.1.101:9190` | +| Future VPS | Planned deployment environment | Not provisioned yet | | Workplace production | Out of scope until reviewed and approved | Not documented here | Rocky checkout: @@ -37,30 +38,9 @@ codex/staging-baseline ## Windows development -Build the frontend using the project Node container: - -```powershell -docker compose run --rm node -``` - -Start or update the complete local stack when backend or Compose changes require it: - -```powershell -docker compose up --build -d -``` - -Seed deterministic observations: - -```powershell -docker compose --profile tools run --rm seed -``` - -Inspect status and logs: - -```powershell -docker compose ps -docker compose logs --tail 100 scala -``` +Use Windows to edit and review source files and to create Git commits. Docker builds, +the running application, synthetic-data operations, and browser testing belong on +Rocky. Docker Desktop is not part of the normal project workflow. ## Commit and transfer workflow @@ -126,9 +106,8 @@ Prefer a normal Git revert rather than manually copying old files: 1. Identify the faulty commit with `git log --oneline`. 2. On the development checkout, run `git revert `. -3. Build and test the reverted state locally. +3. Push the revert and build and test it on Rocky. 4. Push the revert commit. 5. Pull it on Rocky and run the appropriate frontend-only or full-stack deployment command. Database rollback is a separate operation and must not be inferred from a source rollback. Database backup and restore procedures are not yet defined. - diff --git a/web/src/css/aggregator.css b/web/src/css/aggregator.css index b9504ef..d06e18a 100644 --- a/web/src/css/aggregator.css +++ b/web/src/css/aggregator.css @@ -14,4 +14,49 @@ } .overlayFields{display:grid;grid-template-columns:minmax(260px,2fr) minmax(160px,1fr);gap:12px;padding:16px 16px 0}.overlayFields label,.overlayFields span{display:block}.overlayFields span{margin-bottom:6px;font-size:12px;font-weight:700}.overlayFields input{width:100%} .mapControlSections{display:grid;gap:18px;padding:16px}.valueControls{padding-bottom:16px;border-bottom:1px solid var(--border)} + +/* Workspace layout: controls explain the content without enclosing every region. */ +.aggregator>.container{ + grid-template-columns:230px minmax(0,1fr); + grid-template-areas:"cities query" "cities results"; + column-gap:28px; + row-gap:18px; +} +.aggregator .workspaceRail{ + grid-area:cities; + padding:4px 24px 10px 0; + border-right:1px solid rgba(90,126,166,.2); +} +.aggregator .workspaceRail h2{margin:0 0 18px;font-size:16px} +.aggregator .workspaceToolbar{ + grid-area:query; + display:grid; + grid-template-columns:minmax(330px,1.15fr) minmax(480px,1.85fr); + gap:14px 28px; + align-items:end; + padding:2px 0 20px; + border-bottom:1px solid rgba(90,126,166,.22); +} +.aggregator .workspaceToolbar>h2{grid-column:1/-1;margin:0;font-size:18px} +.aggregator .queryOptions{ + display:grid; + grid-template-columns:minmax(130px,1fr) minmax(125px,1.05fr) minmax(115px,.8fr); + gap:20px; + align-items:end; +} +.aggregator .queryPanel h4{margin:0 0 9px} +.aggregator .queryPanel p{margin:8px 0 0} +.aggregator .queryOptions ul{margin:0;padding:0} +.aggregator .resultsPanel{grid-area:results} + +@media(max-width:1200px){ + .aggregator>.container{grid-template-columns:210px minmax(0,1fr);grid-template-areas:"cities query" "cities results"} + .aggregator .workspaceToolbar{grid-template-columns:1fr} + .aggregator .workspaceToolbar>h2{grid-column:auto} +} +@media(max-width:800px){ + .aggregator>.container{grid-template-columns:1fr;grid-template-areas:"cities" "query" "results"} + .aggregator .workspaceRail{padding-right:0;border-right:0;border-bottom:1px solid rgba(90,126,166,.2)} + .aggregator .queryOptions{grid-template-columns:1fr} +} .pageWorkspace{max-width:1800px;margin:auto;padding:34px 28px 70px}.pageHeading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:24px}.pageHeading h1{margin:5px 0 6px;font-size:34px}.pageHeading p{margin:0;color:var(--text-muted)}.selectionCount{padding:10px 14px;border:1px solid var(--border);border-radius:10px;background:var(--surface);font-weight:700}.aggregator>.container{display:grid;grid-template-columns:240px 300px minmax(0,1fr);gap:18px;align-items:start}.panel{padding:20px;border:1px solid var(--border);border-radius:16px;background:var(--surface);box-shadow:var(--shadow-sm)}.panel h2{margin:0 0 18px;font-size:16px}.cityPanel{max-height:calc(100vh - 160px);overflow:auto}.cityPanel ul{margin:12px 0;padding:0;columns:1}.cityPanel li{padding:3px 0}.queryPanel h4{margin:22px 0 9px}.queryPanel p{margin:10px 0}.resultsPanel{min-width:0}.emptyState{display:flex;min-height:260px;align-items:center;justify-content:center;flex-direction:column;gap:8px;margin-top:18px;padding:30px;border:1px dashed #bac6d4;border-radius:16px;background:rgba(255,255,255,.55);color:var(--text-muted);text-align:center}.emptyState strong{color:var(--text);font-size:18px}.mapWorkspace{margin-top:14px}.mapToolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.mapToolbar strong,.mapToolbar span{display:block}.mapToolbar span{margin-top:3px;color:var(--text-muted);font-size:12px}.broadcastControls{margin-bottom:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.broadcastControls summary{padding:14px 16px;cursor:pointer}.broadcastControls summary span,.broadcastControls summary strong,.broadcastControls summary small{display:block}.broadcastControls summary small,.controlHelp,.fieldHint{color:var(--text-muted);font-size:12px}.broadcastControls[open] summary{border-bottom:1px solid var(--border)}.broadcastControls .grid-1-2{padding:16px}.controlHelp{margin:16px 16px 0}.canvasFrame{overflow:hidden;border:1px solid var(--border);border-radius:14px;background:#d8dee6;box-shadow:var(--shadow-sm)}.canvasFrame canvas{display:block}.weatherIconButton{border-radius:7px}.fieldHint{margin:4px 0 10px}@media(max-width:1200px){.aggregator>.container{grid-template-columns:220px 1fr}.resultsPanel{grid-column:1/-1}.cityPanel{max-height:none}}@media(max-width:700px){.pageWorkspace{padding:24px 14px}.pageHeading{align-items:start;flex-direction:column}.aggregator>.container{grid-template-columns:1fr}.resultsPanel{grid-column:auto}} diff --git a/web/src/pages/cities/Cities.tsx b/web/src/pages/cities/Cities.tsx index 8ab0ecf..a71a76c 100644 --- a/web/src/pages/cities/Cities.tsx +++ b/web/src/pages/cities/Cities.tsx @@ -24,13 +24,13 @@ export function Cities() {
Historical observations

City analysis

Choose stations and a calculation, then compare the resulting values.

{getCities().size} cities selected
-