Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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