Commit Graph
1609 Commits
Author SHA1 Message Date
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
Rūdolfs Ošiņš 18953e9b08 Redesign JobCob popover 2026-05-21 15:47:18 +02:00
Rūdolfs Ošiņš 900074b282 Center checkmark icon in viewBox 2026-05-21 12:57:51 +02:00
Rūdolfs Ošiņš 915d309e14 Tolerate null agent in /node response
Public seeds return `"agent": null` because their deployed httpd
binaries can't parse i2p/onion rows that newer nodes write to the
address table — `AddressStore::get` fails and the handler falls back
to `None`. Allow null in the zod schema and hide the user-agent row
in the UI when it's missing.

Workaround until heartwood ships `StoreExt::agent_of` (reads only
the `agent` column, no address hydration) and httpd adopts it.
2026-05-21 12:33:15 +02:00
Rūdolfs Ošiņš 9391cd072f Replace @radicle/gray-matter with js-yaml frontmatter parser 2026-05-07 23:04:55 +02:00
Rūdolfs Ošiņš 6fb702f886 Recover gracefully from mermaid render errors
When mermaid.render fails, suppress mermaid's "Syntax error"
overlay and show our own small warning above the original code
block so the source stays visible. Subsequent diagrams in the
same document still render.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 9ebc5f6b3b Initialize mermaid only once
Hoist the dynamic import and initialize() into a
module-scoped promise. Previous code re-ran initialize()
on every afterUpdate that had a mermaid block.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 0bcc2b4c2d Lazy-load mermaid
Switch to a dynamic import in afterUpdate and drop
manualChunks so Rolldown auto-splits the lazy chunk.
Eager bundle drops from 1.3 MB to 610 KB gzipped.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 3b85f70f88 Force mermaid securityLevel to strict
'loose' allowed HTML and click directives in diagram labels,
bypassing the DOMPurify pass on the surrounding markdown.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 9e268d9ac0 Scope DOMPurify config to call sites
Replace global setConfig with an exported sanitizeConfig passed
inline. The global config leaked into mermaid's internal
strict-mode sanitization, stripping valid SVG diagrams.
2026-05-07 18:31:28 +02:00
Delioos faadd2906b feat(markdown): mermaid diagram support 2026-05-07 18:31:28 +02:00
Brandon Oxendine a4c6f04028 Link issue and patch breadcrumbs to their status filter 2026-05-06 12:47:25 +02:00
Rūdolfs Ošiņš 3f798744bb Use linkify-it for commit description URLs
Replace the hand-rolled URL regex with `linkify-it` (already a
transitive dep via `marked-linkify-it`). Add unit tests.
2026-05-06 09:54:04 +02:00
Yumin Chen 20be88e5da Allow radicle-external-link components in commit descriptions
To allow some very basic hyperlinking in commit descriptions we can
replace fully specified urls with a valid scheme into
`radicle-external-link` components within patches and git history.
2026-05-05 16:45:14 +02:00
Rūdolfs Ošiņš 613e5e1810 Fix node/user avatar generated wrongly from hostname
It should always be generated from the Node Id.
2026-05-05 16:01:01 +02:00
Defelo 2e19c93a9c Don't show node avatar in user view 2026-05-01 15:46:01 +02:00
Rūdolfs Ošiņš dbe0ed7f77 Add a link to radicle.dev to the node sidebar footer 2026-04-29 15:55:18 +02:00
Rūdolfs Ošiņš 4da9321a1d Revert "Link header Radicle logo to radicle.dev landing page"
This reverts commit 9e9a799c28.
2026-04-29 15:55:06 +02:00
Rūdolfs Ošiņš 9e9a799c28 Link header Radicle logo to radicle.dev landing page 2026-04-29 15:14:20 +02:00
Rūdolfs Ošiņš f472fe892b Add "Sort by activity" toggle to UserReposView 2026-04-29 12:12:35 +02:00
Rūdolfs Ošiņš e64aee34ca Cancel in-flight activity fetches on navigation 2026-04-29 12:12:12 +02:00
Rūdolfs Ošiņš 4ddca81f16 Add "Sort by activity" toggle to repo list 2026-04-29 12:12:03 +02:00
Rūdolfs Ošiņš 4dce10bc66 Show shimmer placeholder while activity loads 2026-04-29 12:11:59 +02:00
Rūdolfs Ošiņš 49274ac88c Load repo activity progressively per card 2026-04-29 12:11:50 +02:00
Rūdolfs Ošiņš 269c6e52ea Rename [iris,rosa].radicle.dev -> [iris,rosa].radicle.network 2026-04-23 11:16:56 +02:00
Rūdolfs Ošiņš b21faa104a Rename radicle.xyz -> radicle.dev where possible 2026-04-23 10:21:39 +02:00