Skip to content

feat(#16): project settings page - #33

Merged
jpricardo merged 1 commit into
feat/multi-tenancyfrom
feat/project-settings-page
Aug 22, 2026
Merged

feat(#16): project settings page#33
jpricardo merged 1 commit into
feat/multi-tenancyfrom
feat/project-settings-page

Conversation

@jpricardo

Copy link
Copy Markdown
Owner

Closes #16.

Adds /projects/:id/settings with four sections — General (rename, read-only slug), Data retention, Members (add/remove by GitHub login), and Danger zone (delete behind a typed-name confirmation). /settings becomes a redirect to the current project's settings, and the sidebar links straight at the project so the item highlights.

Both the loader and the action resolve :id against the caller's own project list, so a project the user does not belong to redirects to /projects instead of surfacing a 403. Retention is editable by any member; renaming, member changes and deletion are owner-only — enforced in the broker and mirrored in the route so a stale tab gets a message instead of a bare "forbidden". The delete confirmation is re-checked server-side, and deleting clears currentProjectID before returning to /projects, where the layout forwards to /projects/new if nothing is left.

Verification

npm run typecheck, npm run lint (0 errors), npm run build and oxfmt --check all pass.

Also ran the built SSR server against a stub broker with a forged session: all four sections render; each intent hits the right broker endpoint and revalidates the loader, so member changes appear without a page reload; rename preserves the slug; a wrong delete confirmation issues no DELETE; the correct one deletes, clears currentProjectID and 302s to /projects; a non-member id redirects to /projects; /settings forwards correctly; missing or wrong CSRF returns 403. With the stub reporting role: member, the page renders exactly as specified — name field disabled, danger zone hidden, no add form or remove buttons, retention still editable — and a rename attempt is rejected server-side.

Not verified against the real stack; that needs Docker plus a GitHub OAuth login.

Noted, not fixed

/dashboard and /keys read the current project from a ?projectId query param that nothing ever sets, so both are stuck on their empty state. Pre-existing from the previous phase and out of scope here.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Aug 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
logwolf-docs Ready Ready Preview Aug 22, 2026 1:17am

@jpricardo
jpricardo merged commit 82cd78a into feat/multi-tenancy Aug 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants