fix(web,api): folder browsing, responsive layout, people list for the workspace view#274
Conversation
…llow-ups The 3A files tab (#268) listed every key flat: the new client never sent delimiter=/, so the API returned no folder prefixes. Send it always, and lock the contract in the client tests. Stacked follow-ups from the same review pass: - responsive shell: mid-width (681-1080px) mode moves the rail below the content instead of letting the file grid paint over it; <=560px drops the size/type columns so filenames keep room - rail details: /me/workspaces now passes publicBaseUrl through (boolean hasPublicUrl kept for existing consumers) and the rail links the real public URL instead of the "configured" label - people tab: member-gated GET /me/workspaces/:name/members (sanitized via the new shared membersForOrg helper, also adopted by admin-ui) and a people list every member can see; invites stay admin-only - copy: bracketed [button] labels ([add], [copy], [invite teammate], [MEMBER]) flattened to the plain lowercase style used elsewhere
📎 AttachmentsMaintained by uploads.sh — re-uploading a file with the same name updates it everywhere it is embedded. |
|
Important Review skippedAuto reviews are limited based on label configuration. 🏷️ Required labels (at least one) (2)
🚫 Excluded labels (none allowed) (1)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
uploads-api | e02d793 | Commit Preview URL Branch Preview URL |
Jul 19 2026, 11:08 PM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
uploads-web | e02d793 | Commit Preview URL Branch Preview URL |
Jul 19 2026, 11:08 PM |




Follow-ups to the settings overhaul (#268), all found while dogfooding the new workspace view.
Folder browsing was flat
The new files tab listed every key in one flat list:
WorkspaceFileTable's client never sentdelimiter=/, andGET /me/workspaces/:name/filesonly groups keys into folderprefixeswhen a delimiter is given.listWorkspaceFoldernow always sends it, and the client tests lock the param in. Verified end to end on the local stack: root shows folders, drill-down + breadcrumbs + URL sync work, files appear only at their leaf level.Responsive layout
The account shell had only two modes — 3-column desktop and a ≤680px full stack. In between, the fixed 180px nav + 272px rail left the content column narrower than the file grid's minimum, so the table painted over the rail.
wft-head__*classes, not positional nth-child) so filenames keep room instead of ellipsizing to zero width.Rail shows the real public URL
/me/workspacespreviously exposed only ahasPublicUrlboolean, so the rail could only say "configured". The endpoint now passespublicBaseUrlthrough (boolean kept for existing consumers — three components branch on it for open-vs-sign logic), and the details rail renders a host-labeled link with a "configured" fallback for an older API.People tab lists members
New member-gated
GET /me/workspaces/:name/members, backed by a sharedmembersForOrghelper inorg-workspaces.ts(also adopted by theadmin-uimembers proxy, which previously inlined the same fetch). The payload is sanitized toemail/name/role/createdAt— internal member/user IDs never reach teammates. Behavior change: non-admin members now see the people list instead of a hard "admin access required" error; the invite form stays admin-only.Copy
Bracketed labels (
[add],[copy],[invite teammate],[open on github ↗],[MEMBER]) flattened to the plain lowercase style the rest of the app uses.Review pass
A 4-angle cleanup review (reuse / simplification / efficiency / altitude) ran before commit; applied: shared
membersForOrg, dropping a duplicate per-request org fetch in the members route (memberWorkspaceOr404already resolves the org), semantic column classes over nth-child, and two parsing/label simplifications. Noted-not-done: server-sidedelimiterdefault (would diverge from the flat-by-default contract of the token-scoped/v1/:workspace/filestwin) and a breakpoint token system (no existing convention; only worth it if a third breakpoint appears).Tests: 818 pass across web + api (new coverage for the delimiter param, members route sanitization/communal/404, member-row rendering + escaping, rail URL fallback + escaping).