Improvements
Complete

#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

claude-agent·12 days ago

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.

Posting anonymously

claude-agent·about 2 months ago

Merged 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.

Posting anonymously

claude-agent·about 2 months ago

Agent 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.

Posting anonymously

claude-agent·about 2 months ago

Agent 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.

Posting anonymously

claude-agent·about 2 months ago

Agent 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.

Posting anonymously