Skip to content

feat(ui): UI overhaul phase 9 — profile and organizations#45

Open
mkappworks wants to merge 25 commits into
mainfrom
feat/ui-overhaul-phase-9-profile-orgs
Open

feat(ui): UI overhaul phase 9 — profile and organizations#45
mkappworks wants to merge 25 commits into
mainfrom
feat/ui-overhaul-phase-9-profile-orgs

Conversation

@mkappworks
Copy link
Copy Markdown
Contributor

@mkappworks mkappworks commented May 20, 2026

Summary

Phase 9 of the UI overhaul: redesigns the user profile and organizations
surfaces, consolidates five standalone settings pages into one tabbed
view, and adds profile/notification controls and richer repo-init license
options to back the new mockups end-to-end.

Closes #

Changes

  • Profile fields on users — migrations 071/072 add name, company,
    location, and five granular notify_* flags; user model, store, and
    service expose them.
  • Repo init templates — Apache-2.0, BSD-3-Clause, GPL-3.0, and
    Unlicense join MIT in the license picker on new-repo creation.
  • Settings consolidationnotification_settings, oauth_apps,
    saved_replies, security, and tokens pages collapse into one
    tabbed settings.templ; new settings_helpers.go centralises error-
    code lookup and avatar-initial rendering.
  • Handlers + router rewire — every settings-related handler now
    targets the unified page and reads/writes the new user fields; routes
    in internal/router/router.go updated accordingly.
  • Shared UI — layout, account subnav, and checkbox component pick up
    the Phase 9 treatment; profile, organizations, new-organization,
    repo-new, notifications, and oauth-authorize views are restyled.

Type of change

  • New feature (feat/...)

Checklist

  • make lint passes with no issues
  • go test ./... passes
  • If .templ files were changed, templ generate was re-run and generated *_templ.go files are committed alongside their sources
  • If a new template directory was added, tailwind/tailwind.config.js content glob was updated (no new template dirs)
  • If a new page was added, it's registered in internal/router/router.go and listed in pageNames
  • If a route must be reachable before setup is complete, it's in the allowlist in middleware/setup.go (no pre-setup routes added)
  • If schema changed, a new sequential SQL migration was added under migrations/ and make migrate was run
  • PR title follows Conventional Commits
  • PR is focused on a single concern (Phase 9 profile + orgs overhaul)

mkappworks and others added 25 commits May 21, 2026 00:02
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ice edge cases

Extracts bare-repo seeding into newTestRepoWithFilesAt so AggregateForUser's
test can add a second repo under the same root without duplicating ~70 lines.
Documents TopLanguageFor tie-break + empty behavior and AggregateForUser's
limit <= 0 semantics, adds slog.WarnContext for per-repo Composition failures,
and notes why the unit tests pass nil for repos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wires the new-repo form's init options through to actual repo content:
when a user checks "Add a README", picks a .gitignore template, or selects
a license, those files are committed as the initial commit on the default
branch via a temp-worktree push. Empty options keep the prior empty-bare-repo
behavior. Initial-commit failures are logged but do not fail the request
since the repo already exists and is pushable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…repos too

Org-owned repos now seed an initial commit with the selected starter
files, matching the personal-repo path. seedInitialCommit is refactored
to a receiver-free function callable by both RepoService and OrgService,
and resolves the worktree's actual HEAD ref for the push instead of
assuming go-git's "master" default.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… page load failures

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… render-time checks)

PinRepo now verifies the pinning user can read the target repo before
pinning, returning 404 for unreadable repos. The render-time visibility
filter for the pinned-repos list landed alongside the org page logging
change in the prior commit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…422 for repo-create user errors

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings phases 7 (gists), 8 (dashboard) and the thin-pack receive fix
onto the phase-9 branch. Conflict resolutions:

- migration 067 renumbered to 070 (main's 067 = add_pull_head_sha)
- ActivityRow: adopted main's component (phase 8's is a superset —
  push commits, comment quotes, more event kinds); dropped phase-9's
  duplicate and its now-redundant eventToActivityRow/mapEventKind
- user.templ: kept main's rich userReposTab (phase 8 Repositories tab)
  under phase-9's 4-tab nav; Overview tab keeps phase-9's pinned /
  heatmap / activity / orgs / languages layout
- UserData: unioned main's RepoTab* fields with phase-9's Tab, Pinned,
  Heatmap, TopLangs, Orgs
- page_user_handler.go: PageUser runs both the overview computation
  and main's buildRepoTabData
- repo_service.go: kept both main's PushSummaries and phase-9's
  RepoInitOptions; Create retains phase-9's extended signature
- retargeted phase-9's 3-arg heatmap call to main's renamed
  HeatmapLarge component

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Migration 071 adds name/company/location columns; migration 072 adds
notify_pr_review/notify_issue_assigned/notify_mention/notify_watched/
notify_weekly_digest. User model picks up the matching struct fields so
later layers can read them. Defaults are additive — no backfill needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lates

Expands the license picker on repo creation beyond MIT. Each license text
is embedded via the existing repotemplates package; the service registry
and unit test pick up the new keys.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
UserStore now reads/writes name, company, location, and the five
notify_* flags introduced in migrations 071/072. UserService exposes
matching update entry points the settings handlers can call.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Collapses notification_settings, oauth_apps, saved_replies, security,
and tokens pages into one settings.templ with tabbed sections. New
settings_helpers.go centralises error-code lookup and avatar-initial
rendering; viewmodels_settings.go is widened to carry every section's
data through to the unified view.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…+ orgs

Handlers and router now target the unified settings page and consume the
new profile + granular-notify fields end-to-end. Shared layout, account
subnav, and checkbox component pick up the Phase 9 visual treatment;
profile, organizations, new-organization, repo-new, notifications, and
oauth-authorize views align with the redesigned mockups.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@mkappworks mkappworks changed the title Feat/UI overhaul phase 9 profile orgs feat(ui): UI overhaul phase 9 — profile and organizations May 22, 2026
@mkappworks mkappworks self-assigned this May 22, 2026
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