vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Build a landing page and simplify the forge chrome
074ae1605e177e99533af02d8c69ccd1a6a947bb · Keenan Nemetz · 14d ago · parent 62576fa8
Build a landing page and simplify the forge chrome The instance root is now a landing page rather than the full activity feed: forge identity, project cards with top language, last commit, issue/change counts and latest release, a short activity rail, and a first-run empty state. The full feed moves to /activity with type filters and pagination. Feeds now cover issues, changes, comments, and releases only; commits and CI runs already have their own pages. Configuration gains instance_name and instance_tagline. Navigation: the crowded global bar becomes Runners, Activity, search, and an account menu holding Admin, Status, and Log out. Repository pages show the name and description above the tabs at the home-page header scale, while tab-page titles stay small. Top-level pages keep the larger header. Drop the workflow run chip, assigned-issues strip, repository size stat, and footer Status link.
docs/ui-plan.md +35−24
| @@ -20,23 +20,29 @@ deliberately rather than by drift. | |||
| 20 | 20 | Handlers answer a fragment when `HX-Request: true` and a redirect otherwise. | |
| 21 | 21 | - **Identity later.** Keep the `vole` wordmark as a placeholder and keep colour, | |
| 22 | 22 | type, radius, and spacing in tokens so a real identity is a token swap. | |
| 23 | - **Single tenant.** No organisation/workspace switcher. The global bar has | ||
| 24 | three destinations, plus Admin for instance admins; the repository owns its | ||
| 25 | own horizontal tabs. | ||
| 23 | - **Single tenant.** No organisation/workspace switcher. The global bar has two | ||
| 24 | destinations, plus the account menu; the repository owns its own horizontal | ||
| 25 | tabs. | ||
| 26 | 26 | ||
| 27 | 27 | ## Navigation model | |
| 28 | 28 | ||
| 29 | Global bar (slim): `Repositories` · `Runners` · account/login. | ||
| 29 | Global bar (slim): `vole` · `Runners` · `Activity` · search · account menu. The | ||
| 30 | wordmark is home, so there is no separate Repositories link. The account menu | ||
| 31 | carries Account, Admin for instance admins, Status, and Log out; the current | ||
| 32 | destination is marked. Search is a field on wide screens and takes its own row | ||
| 33 | on narrow ones. | ||
| 30 | 34 | ||
| 31 | Repository header: the repository name is the first tab, carrying a lock for a | ||
| 32 | private repository or a globe for a public one. The rest of the row is: | ||
| 35 | Repository header: the repository name and its short description sit above the | ||
| 36 | tabs at the home-page header scale, with a lock for a private repository or a | ||
| 37 | globe for a public one. The tab's own header is a smaller section title because | ||
| 38 | the tabs, not the page, are the navigation. The tabs are: | ||
| 33 | 39 | ||
| 34 | `Activity` · `Code` · `Issues` · `Changes` · `Releases` · `Runs` · `Locks` · `Settings` | ||
| 40 | `Overview` · `Activity` · `Code` · `Issues` · `Changes` · `Releases` · `Runs` · `Locks` · `Settings` | ||
| 35 | 41 | ||
| 36 | 42 | No sidebar. A sidebar only pays for its width when there are many persistent | |
| 37 | destinations; here the repository has seven, and they fit on one row at desktop | ||
| 38 | widths. On narrow screens the row scrolls horizontally rather than collapsing | ||
| 39 | into a menu. | ||
| 43 | destinations; here the repository has seven and the global bar has two, and they | ||
| 44 | fit on one row at desktop widths. On narrow screens the tab row scrolls | ||
| 45 | horizontally rather than collapsing into a menu. | ||
| 40 | 46 | ||
| 41 | 47 | Every tab opens with the same page header: a title and one-line summary on the | |
| 42 | 48 | left, and that tab's actions (or branch picker) grouped on the right. Filters and | |
| @@ -45,8 +51,7 @@ action lives. | |||
| 45 | 51 | ||
| 46 | 52 | The repository tab opens Overview: README in the main column; recent commits, | |
| 47 | 53 | recent runs, releases, contributors, languages, and size in the sidebar. Activity is the | |
| 48 | chronological feed: commits, issues, changes, releases, and runs with type | ||
| 49 | filters. Code is an editor-style browser: a persistent tree on the left and the | ||
| 54 | chronological feed: issues, changes, comments, and releases with type filters. Code is an editor-style browser: a persistent tree on the left and the | ||
| 50 | 55 | open file in the large right-hand pane; file and folder links swap only that pane | |
| 51 | 56 | through HTMX. Markdown opens as source; a Source/Preview toggle renders it at full | |
| 52 | 57 | pane width. The branch crumb returns to the Code overview rather than opening a | |
| @@ -67,10 +72,14 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 67 | 72 | download paths | |
| 68 | 73 | - done — styled 500 page everywhere; a handler panic before the first byte is | |
| 69 | 74 | recovered into it, and the detail is logged rather than rendered | |
| 70 | - done — search across visible repositories, by name and description, in the | ||
| 71 | chrome and on the index page | ||
| 72 | - done — instance-wide activity feed on the home page, merged from every | ||
| 73 | repository the viewer can read, with the repository named on each event | ||
| 75 | - done — search across visible repositories, by name and description, from the | ||
| 76 | chrome on every page | ||
| 77 | - done — landing page at `/`: instance identity, project cards with top | ||
| 78 | language, last commit, issue/change counts, and latest release, with a short | ||
| 79 | activity rail beside them | ||
| 80 | - done — instance-wide activity feed at `/activity`, merged from every | ||
| 81 | repository the viewer can read, with the repository named on each event, a | ||
| 82 | type filter, and 50-event pages | ||
| 74 | 83 | - done — instance admin: repository creation and access rules, users, | |
| 75 | 84 | invitations, admin grants, keys, and sessions | |
| 76 | 85 | - done — health/status page at `/status`; `/healthz` stays the plain-text probe | |
| @@ -86,8 +95,8 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 86 | 95 | - done — locks | |
| 87 | 96 | - done — run detail, log, artifacts | |
| 88 | 97 | - done — runs list per repository (`/r/{name}/runs`) with status filters | |
| 89 | - done — repository activity feed on `/r/{name}/activity`: commits, issues, | ||
| 90 | changes, releases, runs, type filters, and HTMX fragment updates | ||
| 98 | - done — repository activity feed on `/r/{name}/activity`: issues, changes, | ||
| 99 | comments, releases, type filters, and HTMX fragment updates | ||
| 91 | 100 | - done — activity events from metadata-log state changes (closed/reopened), | |
| 92 | 101 | actor filter, and assignee filter | |
| 93 | 102 | - done — repository settings: description, default branch, visibility | |
| @@ -169,12 +178,14 @@ title, link, and (for issue/change events) assignees, so the same feed can be | |||
| 169 | 178 | filtered by actor and assignee. | |
| 170 | 179 | ||
| 171 | 180 | Repository feed is done on `/r/{name}/activity`; Overview stays the project | |
| 172 | summary. The home page is the instance-wide feed over visible repositories, with | ||
| 173 | the repository named on each event and the repository list beside it. State | ||
| 174 | changes such as closed and reopened come from the metadata branch log, which | ||
| 175 | carries a canonical `issue: <id> <state>` and `request: <id> <state>` subject. | ||
| 176 | The feed covers creation, comments, approvals, state changes, commits, releases, | ||
| 177 | and runs. | ||
| 181 | summary. The instance feed is `/activity`, over visible repositories, with the | ||
| 182 | repository named on each event, a type filter, and 50-event pages. The landing | ||
| 183 | page shows the ten most recent events as a rail beside the project grid, because | ||
| 184 | a forge's front door should show its projects first. State changes such as closed and reopened | ||
| 185 | come from the metadata branch log, which carries a canonical | ||
| 186 | `issue: <id> <state>` and `request: <id> <state>` subject. The feed covers | ||
| 187 | issues, changes, comments, approvals, state changes, and releases. Commits and | ||
| 188 | CI runs are not events: the overview and the runs tab already show them. | ||
| 178 | 189 | ||
| 179 | 190 | ## Admin scope | |
| 180 | 191 | ||