Commit Graph
1634 Commits
Author SHA1 Message Date
Brandon Oxendine 2fd961c6c3 Add monospace fallback to JetBrains Mono fonts
When users block web fonts, code was rendered in the browser's default
sans-serif font because the JetBrains Mono code font tokens had no
generic fallback. Add `monospace` as a fallback so code stays
monospaced.

Fixes: 8942cea33a
2026-10-20 12:27:29 +02:00
Brandon Oxendine 02dfecf66d Use new UI kit icons in empty states 2026-10-19 18:14:10 +02:00
Brandon Oxendine 095b4f2fc0 Add copy link and highlight to comments
Opening a comment link expands the revision the comment is in, even if
the link is opened while already on the page, and scrolls to it.

This also fixes scrolling to URL fragments that aren't valid CSS
selectors, such as comment ids starting with a digit.
2026-10-19 18:02:19 +02:00
Guillaume 783fa6be64 Fix emoji in markdown code blocks
Emoji in code blocks were missing from both the rendered code and the
copied text. twemoji replaces them with images, but highlighting and the
copy button work from the block's text content, which leaves images out.
We now turn the images back into text first.
2026-10-19 15:42:13 +02:00
Brandon Oxendine 44c4c37fc7 Match toggle button colors to Raw button 2026-10-19 15:13:09 +02:00
Brandon Oxendine 967f7a99b8 Use title case in repo page titles 2026-10-19 15:00:35 +02:00
Brandon Oxendine 53b616e028 Title the commits page "Commits"
The commits page set its browser tab title to "history", while the
breadcrumb and page content call it "Commits". Use "Commits" in the
title too.
2026-10-19 14:58:39 +02:00
Brandon Oxendine f22d3b5502 Use arrow icon for seed node view links 2026-10-19 14:54:26 +02:00
Brandon Oxendine d2d24a6ecc Update Mastodon link in footer
The footer linked to an old account. Point it at the current one,
@radicle@toot.radicle.dev.
2026-10-12 22:36:41 +02:00
Rūdolfs Ošiņš e888a949c2 Link guides to radicle.dev instead of hosting them
The guides live on radicle.dev. The old URLs redirect to the respective
radicle.dev pages.
2026-10-08 17:51:07 +02:00
Rūdolfs Ošiņš 23b2f4645e Remove {@html} from error messages 2026-10-05 10:46:23 +02:00
Rūdolfs Ošiņš 1369a2ebd0 Harden peer branch selector 2026-10-05 10:46:08 +02:00
Daniel Norman 00f079d0d9 Make the node breadcrumb a seed picker
- replace the node breadcrumb link with a SeedPicker in the repo, user
  and node views, so the node serving a page can be switched where it
  is named
- remove current node picker from settings panel
- reach the node view through the picker's "Open node view" action
- cover the new breadcrumb picker in the e2e tests
- list the active seed in the seed picker
- the seed serving the page is also rendered in the list with a bookmark
  action instead of a remove one.
2026-09-25 10:23:40 +02:00
Defelo 45bd0a3787 Fix Markdown checkboxes
The checkbox icons were removed in fa85596ba1,
this adds checkboxes matching the new design system. Also removes the
line break between icon and text.
2026-09-23 17:13:32 +02:00
Rūdolfs Ošiņš 9c6fdd9e9f Update Arch Linux install instructions
kpcyrd recently took over Arch Linux packaging, the old (AUR) way of
installation is deprecated.
2026-09-23 09:43:23 +02:00
Daniel Norman d36b064dd1 Separate the search seed from the viewed node
Picking a seed only set the stored preference and left the page on
whatever node the URL named, so the node could not be changed from
the UI at all. The two are now independent: you can browse a repo
on one node while searching a larger index on another.
2026-09-22 11:53:17 +02:00
Daniel Norman 8c3e25d800 Hide filters if all releases/artifacts by delegates
- Show delegate badge for releases
- Hide filters if all artifacts are non-delegate
- Decide release filter visibility once per route to avoid layout shift
  when loading more
- Say "No releases by delegates" when all holds some
2026-09-11 12:01:20 +02:00
Daniel Norman fb11e4d9c2 Remove warning icon from redacted filter 2026-09-03 18:33:28 +02:00
Rūdolfs Ošiņš ea10146b42 Show target branch on merge marker 2026-09-03 17:20:01 +02:00
Rūdolfs OšiņšandBrandon Oxendine 8e78634a23 Show the branch a patch is opened against
Resolve the merge target from `target` and the project payload, and name
it in the byline next to the patch ID.

Co-Authored-By: Brandon Oxendine <brandon.oxendine@gmail.com>
2026-09-03 12:03:16 +02:00
Daniel NormanandRūdolfs Ošiņš b1acb3eb4d Integrate radicle-artifact into explorer
- Add release read API to httpd as cargo feature enabled by default
- Add Releases and Release views to the UI
- Filter out redacted artifacts and mark delegate authors
- Degrade releases UI gracefully with older radicle-httpd versions
- Hide fully redacted releases
- Skip releases in the list endpoint when every artifact was redacted by
  its author or a delegate, so no empty release entries are shown
- Keep them reachable with showRedacted=true and by release id
- Add e2e tests for the release routes

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-08-28 16:33:14 +02:00
Rūdolfs Ošiņš f3138ae30a Show branch names decoded in the branch selector
Closes c639643a8e
2026-08-25 15:38:10 +02:00
Rūdolfs OšiņšandGuillaume 8cfcf11a88 Decode percent-encoded identifiers in URLs
Cloudflare's single-page-application fallback percent-encodes the
path on a fresh load or reload, so `rad:z4V1...` arrives as
`rad%3Az4V1...` and leaks into links and the seed command.

Only identifiers are decoded: revision and path segments stay
encoded, because branch and tag lookups are keyed on the encoded
name.

The seed command needs a second fix: the repo path segment is an
alias when one was used, and `rad seed <alias>` is not valid, the
`rad seed` command only supports RIDs and not aliases.

Co-Authored-By: Guillaume <guillaume.alabre@gmail.com>
2026-08-25 14:52:32 +02:00
Julien Donck ab5aaa0382 Remove the FAQ from the marketing site
The FAQ shipped here was a verbatim copy of the one on radicle.dev,
carrying a canonical tag that already pointed search engines at that
original. Drop the duplicate and redirect /faq to radicle.dev/faq so
existing links still reach the content.
2026-08-25 11:36:01 +02:00
andreolf fc31f33fad Support <details> collapsing in markdown
The markdown sanitizer's allowlist did not include the <details> and
<summary> tags, so GitHub-style collapsible sections were stripped and
their contents rendered flat. Add both tags to ALLOWED_TAGS and the
"open" attribute to ALLOWED_ATTR, so collapsible sections render and
<details open> starts expanded.

Closes 390f3f2958
2026-08-25 11:05:44 +02:00
andreolf 8bb45aa11d Render GitHub blob image URLs
Image URLs pointing at a GitHub "blob" page, such as
https://github.com/<owner>/<repo>/blob/<ref>/<path>, serve an HTML
page rather than the raw image bytes, so they render as broken images
in markdown.

Add a canonicalizeGithubImageUrl helper that appends ?raw=true to such
URLs, which makes GitHub redirect to the raw content. URLs already
pointing at the raw content, via ?raw=true or raw.githubusercontent.com,
are left unchanged, as are non-GitHub and non-URL sources.

Wire the helper into the markdown image loop so external image URLs are
canonicalized while relative paths keep resolving against the repo's raw
endpoint.
2026-08-24 16:23:09 +02:00
Rūdolfs Ošiņš 048f4a831b Load the peer selector after render
Listing remotes verifies signed refs for every peer and took seconds
on large repositories, blocking navigation.

Resolve revisions from the canonical refs already on the repo object,
fetching a single remote when the route names a peer, and load the
full listing after render. Tags living only on a remote no longer
resolve as bare revisions.
2026-07-29 16:21:23 +02:00
Rūdolfs Ošiņš 3e500f8231 Dedupe in-flight requests in cached()
The cache only stored resolved values, so callers asking for the same
key while a request was still in flight each issued their own. The
peer selector makes this easy to hit: Source and History render their
own Header, so switching tabs while the remote listing loads fires a
second copy of a request that takes seconds.

Cache the promise instead, evicting it on rejection so failures still
retry.
2026-07-29 16:21:23 +02:00
Rūdolfs Ošiņš 256b060770 Resolve repo aliases in JSON and raw API 2026-07-29 14:05:06 +02:00
Rūdolfs Ošiņš 8d8339165c Show git-clone alias in clone button 2026-07-29 13:10:05 +02:00
Rūdolfs Ošiņš aaffb991ac Use the diff-stats endpoint for patch badges
So the badges stop fetching the full diff just for insertions and
deletions; the patch view did it on every load. Falls back to the
full diff when the backend doesn't serve the new endpoint.
2026-07-29 09:36:31 +02:00
Rūdolfs Ošiņš faa21f4504 Use the dedicated commit-count endpoint
So the header and history stop fetching full tree stats just for the
commit count. Falls back to the previous behaviour when the backend
doesn't serve the new endpoint.
2026-07-29 09:36:31 +02:00
Rūdolfs Ošiņš 56cb081cac Expire cached job listings after 30 seconds
The job cache never expired, so CI status stayed stale for the rest
of the session.
2026-07-29 09:36:31 +02:00
Rūdolfs Ošiņš c20bb5534d Fix prettier issue 2026-07-28 08:45:42 +02:00
Rūdolfs Ošiņš 77fd1383de Improve basic principles wording 2026-07-26 08:38:19 +02:00
Rūdolfs Ošiņš 8e4349184a Upgrade npm dependencies honoring a 7 day cooldown 2026-07-22 14:43:52 +02:00
Brandon Oxendine 2afde78941 Stagger section entrance on marketing pages 2026-07-21 18:01:28 +02:00
Brandon Oxendine fa1af21819 Clean up marketing copy
Copy:

- Sentence case for headlines, guide titles, and doc headings (proper
  nouns kept capitalized).
- Removed em dashes from the home page.
- Tightened the "Programmable repos" line, clarified the explore CTA
  ("Explore the network"), rewrote the Claude skill card, simplified the
  Install headline, and fixed the Garden nav description to describe
  what Radicle Garden actually is (a hosted, always-on node).

Layout:

- Aligned the Garden promo on the Learn and landing pages (same copy and
  dimensions).
- Balanced the page-header and hero headlines so they don't leave a
  hanging word or widow.
- Line-break the Garden promo copy on desktop only.
- Animate the arrow on marketing buttons on hover, and drop the white
  button's opacity hover.
2026-07-21 17:58:59 +02:00
Daniel Norman 45c5787d68 Mention radicle-artifact in FAQ 2026-07-21 17:53:18 +02:00
Brandon Oxendine 1abb50f5d4 Redesign the How it works page
Rework the /principles page from a vertical slide presentation into a
 two-column layout.
2026-07-21 17:47:16 +02:00
Brandon Oxendine b7806bd934 Animate sidebar sub-nav unfurl
Add sidebar sub-nav expand/collapse unfurl, now driven by the CSS View
Transitions API instead of JS tweening. Each nav section is a
view-transition group that clips into a top-to-bottom reveal as it opens
or closes, with a masked gradient soft edge.

A small JS flag (`sidebar-unfurling` on the document element) gates the
gradient to actual open/close, since CSS can't tell a within-section
navigation from a section toggle.
2026-07-21 17:05:44 +02:00
Rūdolfs Ošiņš 3c2935704f Upgrade npm dependencies
This also upgrades dompurify to the latest version, outside our cooldown
window, for a security fix (verified safe with extra security checks).

Newer dompurify versions expose a bug where happy-dom renders one of our
custom elements incorrectly in tests, unlike real browsers. Switch the unit
test environment from happy-dom to jsdom to fix the failing tests.
2026-07-16 11:34:41 +02:00
Rūdolfs Ošiņš f5675e6268 Rename [iris|rosa].radicle.xyz -> [iris|rosa].radicle.network 2026-07-15 15:42:22 +02:00
025e7254f9 Add explore homepage and Radicle marketing site
Co-authored-by: Julien Donck <donckjulien@gmail.com>
Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
2026-07-15 15:41:35 +02:00
Rūdolfs Ošiņš 8e2148599e Probe archive download support on demand
The source and commit views hit the /raw archive endpoint with a
HEAD request on every page load to decide whether to show the
download UI. That endpoint runs `git archive` server-side.

Move detection to user interaction: the clone popover probes when
the Download tab is opened, and the commit view checks on click,
navigating on success or showing a message on failure.

Cache only successful results per URL so transient or moving-ref 404s
aren't latched for the session.
2026-06-11 13:38:49 +02:00
Rūdolfs Ošiņš a3386040d5 Dedupe job runs by runId to fix duplicate keys
The same run can appear under multiple job COBs at a commit,
causing an each_key_duplicate crash. Keep one view per runId,
letting a terminal status override a stale "started" one.
2026-05-29 17:03:49 +02:00
Rūdolfs Ošiņš 17cd7adcb8 Harden rendered markdown links 2026-05-28 16:16:41 +02:00
Rūdolfs Ošiņš 747d9b05f9 Restrict job log links to http(s) URLs 2026-05-28 16:16:41 +02:00
Rūdolfs Ošiņš 74b3c079ad Show a commit message placeholder when there is no message
This way we can still navigate to the single commit view.
2026-05-28 10:25:40 +02:00
Rūdolfs Ošiņš 7fbbbd3224 Fix did wrapping in JobCob dropdown 2026-05-22 08:53:05 +02:00