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.

Add the status page and language-aware file icons

09b15120717116d07d0227444bdb2d2a499164b1 · Keenan Nemetz · 15d ago · parent b355db72

Add the status page and language-aware file icons

GET /status is the human version of /healthz: store checks, account/repository counts, queue depth, runners seen recently, LFS availability, and uptime, with a footer link. /healthz stays a plain-text probe for scripts.

The code tree, directory list, and file search now choose an icon and language colour from the file extension, with build files and go.mod handled by name. Both are presentation only; unknown files keep the generic icon.

server/web/static/vole.css +33

@@ -1746,3 +1746,36 @@ textarea:focus-visible {
1746 1746 .home { grid-template-columns: 1fr; }
1747 1747 .home-side { position: static; order: -1; }
1748 1748 }
1749
1750 /* Status page: a small metrics row above the per-service checks. */
1751 .status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: 10px; margin: 14px 0; }
1752 .status-grid .card { margin: 0; display: flex; flex-direction: column; gap: 4px; }
1753 .status-grid strong { font-size: 20px; font-weight: 600; font-variant-numeric: tabular-nums; }
1754 .check-state { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; }
1755 .check-state.ok { color: var(--good); }
1756 .check-state.warn { color: var(--warn); }
1757 .check-state.fail { color: var(--bad); }
1758 .pagefoot { max-width: 1440px; margin: 0 auto; padding: 0 24px 32px; color: var(--fg-faint); font-size: 11.5px; }
1759 @media (max-width: 720px) { .pagefoot { padding: 0 12px 24px; } }
1760
1761 /* Language hints for file rows. Active tree rows still win through specificity. */
1762 .tree-icon.lang-go, .dirlist a.file.lang-go .icon { color: #00add8; }
1763 .tree-icon.lang-rust, .dirlist a.file.lang-rust .icon { color: #dea584; }
1764 .tree-icon.lang-js, .dirlist a.file.lang-js .icon { color: #f1e05a; }
1765 .tree-icon.lang-ts, .dirlist a.file.lang-ts .icon { color: #3178c6; }
1766 .tree-icon.lang-py, .dirlist a.file.lang-py .icon { color: #3572a5; }
1767 .tree-icon.lang-rb, .dirlist a.file.lang-rb .icon { color: #cc342d; }
1768 .tree-icon.lang-jvm, .dirlist a.file.lang-jvm .icon { color: #b07219; }
1769 .tree-icon.lang-c, .dirlist a.file.lang-c .icon { color: #a8b9cc; }
1770 .tree-icon.lang-cpp, .dirlist a.file.lang-cpp .icon { color: #f34b7d; }
1771 .tree-icon.lang-cs, .dirlist a.file.lang-cs .icon { color: #178600; }
1772 .tree-icon.lang-php, .dirlist a.file.lang-php .icon { color: #8f9ad8; }
1773 .tree-icon.lang-sh, .dirlist a.file.lang-sh .icon { color: #89e051; }
1774 .tree-icon.lang-html, .dirlist a.file.lang-html .icon { color: #e34c26; }
1775 .tree-icon.lang-css, .dirlist a.file.lang-css .icon { color: #a074c4; }
1776 .tree-icon.lang-config, .dirlist a.file.lang-config .icon { color: #cbcb41; }
1777 .tree-icon.lang-text, .dirlist a.file.lang-text .icon { color: #519aba; }
1778 .tree-icon.lang-sql, .dirlist a.file.lang-sql .icon { color: #e38c00; }
1779 .tree-icon.lang-image, .dirlist a.file.lang-image .icon { color: #a074c4; }
1780 .tree-icon.lang-lock, .dirlist a.file.lang-lock .icon { color: var(--fg-muted); }
1781 .tree-icon.lang-build, .dirlist a.file.lang-build .icon { color: var(--fg-muted); }