Skip to content

Feat/organizations backend#5

Merged
rowforce merged 49 commits into
mainfrom
feat/organizations-backend
Jun 7, 2026
Merged

Feat/organizations backend#5
rowforce merged 49 commits into
mainfrom
feat/organizations-backend

Conversation

@rowforce

@rowforce rowforce commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

No description provided.

rowforce added 30 commits June 5, 2026 19:56
…e dash

Switch every page/section title from the Fraunces serif to the existing
Geist sans stack and remove the magenta rule mark that preceded titles.

- theme: drop --font-serif var; MuiDialogTitle uses var(--font-sans)
- index.html: remove Fraunces from the Google Fonts import
- replace var(--font-serif) -> var(--font-sans) across all title usages
- remove the 28x2 dash in PageHeader (covers all PageHeader pages),
  the inline dash in AppUsers, and the rule in NotFound

Kept: eyebrow accent dots and the active-tab indicator.
rowforce added 19 commits June 6, 2026 23:41
The 'Organizations enabled' toggle now applies to every app in a project
instead of a single app. The flag stays a per-app column (no schema
change); the value is duplicated across the project's apps and kept in
sync, so all read/enforcement paths are unchanged.

- repo: add SetProjectOrganizationsEnabled (bulk-update every app in a
  project, scoped to workspace+project); persist organizations_enabled in
  InsertApp; remove the now-unused single-app UpdateAppOrganizationsEnabled
- api: HandleUpdateAppOrganizationsEnabled validates the addressed app,
  bulk-sets the whole project, and returns that app; new apps inherit the
  project value (any sibling enabled -> enabled)
- ui: toggle help copy + success toast reflect project scope
Add an ID column (with copy-to-clipboard) between Name and Slug in the
app organizations admin table. Slug is retained as-is; the ID display
mirrors the existing App ID pattern in AppDetail.
ServerUpdateOrganization now silently re-derives the slug from the new
name (or honors an explicit slug), running it through a collision-safe
-2/-3 loop via the new UpdateOrganizationWithUniqueSlug repo method.
Renaming to the same name is idempotent (a row's own slug is not a
collision), so no spurious suffix is appended. Slug collisions resolve
to a suffix instead of a 409.

The admin rename endpoint is unchanged and still preserves the slug.
Pier (which sends name-only on rename) gets silent re-slugging with no
client changes.
ServerDeleteOrganization now requires ?actorUserId and verifies that user is an active owner of the org: 400 if absent, 403 if not an owner, 204 on success. The auth server becomes the referee, so a backend can't let an admin-tier member delete a tenant.
@rowforce rowforce merged commit a3896c2 into main Jun 7, 2026
3 checks passed
@rowforce rowforce deleted the feat/organizations-backend branch June 7, 2026 15:52
rowforce added a commit that referenced this pull request Jun 9, 2026
Admin can now create organizations, add existing app users, and manage
invites (list/create/revoke); the AppKit SDK gains first-class hooks for
self-serve org management (create/rename/archive, members, invites).
Closes gaps #3, #4, #5 and admin add-member from the earlier analysis.
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.

1 participant