Repository navigation
Settings: Matched GitHub's settings layout and controls in every area - #101
Merged
Merged
Conversation
whereareiam
force-pushed
the
feat/settings-github
branch
2 times, most recently
from
October 22, 2026 19:24
21ca4be to
fcf6bf6
Compare
…g and admin One shared component (components/common/settings) styles every settings area, which their layouts mark with .theme-settings: a 256px nav 40px from the page with an icon per page, group labels (Access, Code and automation, Security, Integrations), GitHub's blue bar beside the current page and collapsible groups with the chevron on the right; sections as GitHub subheads (24px over a border) with forms flat beneath them, lists and tables in a box, and the danger zone in a red-bordered box with full-width rows. Fields follow GitHub's form groups in all three ways Forgejo writes them: the label on its own line, 440x32 inputs with GitHub's inset shadow and accent focus ring, a 32px select on the button surface, 12px muted notes, and 32px buttons with 500-weight labels. Checkboxes and radios take GitHub's design: the browser's 13px box in a 20px gutter, a semibold title beside it and the note beneath. Forgejo's checkbox markup stays (its scripts rely on it); a field label in front of a checkbox becomes the title and the checkbox's label its note, as in GitHub's feature list, and radio rows become one choice per line. Repository Template and Visibility use a shared checkbox component with Forgejo's descriptions as notes. Settings keep green primary buttons as on GitHub. Lists follow GitHub's Box: the rows with content draw the box, so the description rows Forgejo puts first become flat paragraphs above it; tables are boxed on their own, add forms sit flat below in one row, and empty lists show GitHub's empty state (a shared blankslate component) in collaborators, protected branches and tags, deploy keys, secrets, variables, runners, blocked users, push mirrors, package cleanup rules and authorized integrations. The shared webhook list becomes a description with box rows. Mirror settings, tag protection and the repository indexers are restructured: description, then the list or empty state, then the form or GitHub-style action rows. Repository settings drop the repository heading, as on GitHub. Personal and site administration settings get GitHub's context header above the nav (avatar, name and login, or the site administration icon). The org settings rules that duplicated this move into the shared component. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
whereareiam
force-pushed
the
feat/settings-github
branch
from
October 22, 2026 19:41
fcf6bf6 to
62d4b3d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
All settings areas (repository, personal, organization and site administration) now share GitHub's settings layout. I compared them against GitHub's repository, personal and organization settings at 1316 and 375px. One shared component,
components/common/settings, does this. Each area's layout marks its container with.theme-settings; Forgejo's own menu and form markup stays underneath, so collapsible groups and forms keep working.Layout and navigation
Controls
Shared components:
components/common/settings(layout and form styles, context header, checkbox, empty state). Empty states use Forgejo's own strings in collaborators, protected branches and tags, deploy keys, secrets, variables, runners, blocked users, push mirrors, package cleanup rules and authorized integrations. The shared webhook list (repository, organization, personal, site administration) becomes a description with box rows.Forgejo's checkbox and radio markup is kept, because its scripts rely on it (units toggling their sub-options, for example). The new look comes from CSS grid placement; only repository Template and Visibility are re-templated.
Forgejo writes fields in three ways:
.fieldwith a label beside the control, a label wrapping the control in a fieldset, or such a label straight in the form. All three get the same look. The org-only settings rules inorganization.cssthat duplicated this are removed. The group labels are in English because Forgejo has no strings for them.Before and after
Dark mode, in the dev preview.
Checks
bun run bundleandbunx vitest run(406 tests) pass; Prettier is clean.bun run lintfails on dev too, because typescript-eslint does not support the installed TypeScript 7.Preview: http://localhost:3000/acme/webapp/settings
🤖 Generated with Claude Code