Browse Source

docs: refresh web UI guidance and demo

master
Rain Mark 2 months ago
parent
commit
93b7e23168
  1. 4
      CONTRIBUTING.md
  2. BIN
      docs/assets/iron-demo.gif
  3. 15
      docs/development.md
  4. 7
      scripts/generate_readme_demo.py

4
CONTRIBUTING.md

@ -48,8 +48,8 @@ Review screenshots in `output/playwright/` before considering UI work complete.
## Code Style
- Backend code lives in `app/` and uses async FastAPI + SQLAlchemy patterns.
- Frontend code lives in `frontend/` and uses React, React Router, and
TanStack Query.
- Frontend code lives in `frontend/` and uses Vue 3, TypeScript, Pinia, and
the OpenCloud design system.
- Keep browser file preview/download flows authenticated through the API client.
- Prefer clear names and small modules over clever abstractions.

BIN
docs/assets/iron-demo.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 KiB

After

Width:  |  Height:  |  Size: 328 KiB

15
docs/development.md

@ -85,16 +85,21 @@ Required workflow:
The E2E flow currently covers:
- login
- files page render
- files page render with OpenCloud-style navigation icons
- create folder
- enter a folder and return to the parent directory
- upload text file
- authenticated file download
- upload image file
- authenticated inline image preview
- file storage replica inspector
- search
- uploads, recycle bin, storage batch checks, backend edit dialog, policies save, and jobs page render
- browser `/api` 4xx/5xx failures during the flow
- file storage replica inspector and read-only replica detail drawer
- More menu actions, Escape dismissal, and click-outside dismissal
- delete confirmation button readability
- file search, file pagination, and page-size changes
- recycle bin, storage batch checks, backend edit/create dialogs, policies save, and jobs detail render
- desktop and mobile screenshots for visual review
- browser `/api`, `/assets`, and `/icons` 4xx/5xx failures during the flow
- label/value spacing checks for narrow inspector panels
## Secrets

7
scripts/generate_readme_demo.py

@ -74,7 +74,7 @@ def capture_demo_frames(base_url: str) -> list[Path]:
page.get_by_label("Password").fill("changeme-iron")
page.get_by_role("button", name="Sign in").click()
page.wait_for_url(f"{base_url}/app/files")
page.locator(".files-header .crumb-button").filter(has_text="/").first.wait_for()
page.locator(".files-header").filter(has_text="Personal").first.wait_for()
frame_paths.append(capture_frame(page, "02-files"))
page.locator(".panel-toolbar").get_by_role("button", name="New").click()
@ -102,8 +102,9 @@ def capture_demo_frames(base_url: str) -> list[Path]:
page.locator("img.preview-frame").wait_for(timeout=15000)
frame_paths.append(capture_frame(page, "05-preview"))
page.get_by_role("button", name="Storage").click()
page.get_by_role("button", name="Reconcile File").wait_for()
page.locator(".detail-panel").get_by_role("button", name="More Info").click()
page.locator(".detail-drawer", has_text="Replica Info").wait_for()
page.locator(".detail-drawer", has_text="Desired Backends").wait_for()
frame_paths.append(capture_frame(page, "06-storage"))
page.goto(f"{base_url}/app/storage", wait_until="networkidle")

Loading…
Cancel
Save