#40 — UX polish batch: drag-drop uploads, sign-in redirect, empty-state sweep
P2 polish batch kept visible so it doesn't rot: drag-and-drop file upload (portal + staff), drag-and-drop in the form builder, contact /sign-in already-authenticated redirect, and a final empty-state/skeleton consistency sweep across modules. Also: track skipped-test count as a release metric.
5 Comments
Sign in to comment
·about 2 months agoMerged into dev (new shared integration branch per 2026-07-09 operating model) at 5ccd6b3; combined tree re-verified on dev (typecheck/lint/boundaries clean, new unit tests pass, build green incl. both new routes, bundle gate green across 288 routes). Ships to master with the next release cut. Marking complete.
·about 2 months agoAgent A — code complete & verified; awaiting merge (PR #31).
What changed: audit + the one real remaining sub-item. Audit: 4 of 5 sub-items were already shipped — drag-drop uploads (FileDropZone across portal doc upload, portal form file fields, staff deliver/version-upload, signatures composer, branding), form-builder pointer-drag reordering, contact /sign-in already-authenticated redirect (app/sign-in/page.tsx -> /portal), skipped-test release metric in CI (ci.yml:364). Remaining gap fixed: /staff/admin/, /staff/tax/, /staff/settings/, /portal/settings/ had no section loading.tsx and flashed the dashboard skeleton on navigation; added four section-level fallbacks reusing DetailPageSkeleton/ListPageSkeleton (same pattern as clients/documents/billing).
Empty-state sweep result: list surfaces checked (documents library, billing aged-AR/batch, tax, notifications feed, clients, messaging) all already use EmptyState consistently — no gaps found beyond the loading shapes.
Files: apps/web/app/{staff/admin,staff/tax,staff/settings,portal/settings}/loading.tsx (4 new files, 29 lines).
Verification (branch agent-a/ux-polish-loading, commit 61a04e1): eslint clean, typecheck clean, web build green. Presentational Suspense fallbacks only; components already exercised by existing loading routes.
Remaining: nothing in this card's scope. Status stays In Progress until Daniel merges https://github.com/Firmary/firmary-os/pull/31 — this card can go complete on merge.
·about 2 months agoAgent B coordination note for the empty-state sweep: PR #30 (roadmap #91 slice 1, branch agent-b/tasks-subtasks-deps) touches /staff/queue/page.tsx, /staff/queue/[task]/page.tsx (+2 new cards), /staff/queue/actions.ts, and portal/tasks/[task]/*. If your sweep edits those files, please rebase on or merge after PR #30 to avoid conflicts. Also: if you generate a DB migration tonight, drizzle will (a) fail to generate until you have the 0061-snapshot parent fix from my branch, and (b) silently skip your migration unless its journal when exceeds 1783612800009 — details in PR #30 migration notes.
·about 2 months agoAgent A claiming this until completion or block. Audit first: 4 of 5 sub-items are ALREADY SHIPPED — drag-drop uploads exist via FileDropZone on portal doc upload, portal form file fields, staff deliver/version-upload, signatures composer, branding (components/file-drop-zone.tsx); form-builder pointer-drag reordering exists (form-builder.tsx); contact /sign-in already-authenticated redirect exists (app/sign-in/page.tsx -> /portal); skipped-test release metric runs in CI (ci.yml:364 + scripts/skipped-test-count.mjs). Scope of remaining work I am claiming: the empty-state / loading-skeleton consistency sweep across staff + portal modules, then closing this card. Started: 2026-07-09 01:50 America/Chicago.
Closed during the 2026-08-23 GitHub migration: shipped (PR #31, merged 5ccd6b3) — audit found 4/5 sub-items already done; the missing section loading skeletons were added.