Skip to content

feat(river): dedicated /river landing page#62

Merged
sanity merged 7 commits into
mainfrom
feat/river-landing-page
Jul 3, 2026
Merged

feat(river): dedicated /river landing page#62
sanity merged 7 commits into
mainfrom
feat/river-landing-page

Conversation

@sanity

@sanity sanity commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Problem

River has no page of its own on freenet.org. It is one section on /apps/ (#river) that links out to the GitHub repo, so the effective landing page for River is a code README. The nav "River" entry just jumps to that anchor.

Approach

A dedicated product landing page at freenet.org/river, structured like a modern messaging-app landing page (Signal / Session pattern) but adapted to River's reality: there is no app-store download, you install Freenet once and rooms open in the browser from an invite link. So the page swaps the usual "Download" row for a plain-language "Wait, no servers?" explainer plus a "nothing to download, get an invite" flow.

Design decisions (as discussed with Ian):

  • Top-level /river, not /apps/river — matches the existing /ghostkey precedent of giving a flagship app its own top-level page, keeps a short shareable URL, and avoids restructuring the /apps catalog.
  • Keeps the site chrome — standard Freenet dropdown nav and institutional footer are retained. River is a subpage, not a sub-brand, and the Freenet frame is the point (River exists to show off Freenet, and the first step to use it, Install/Quickstart, lives in that nav). Only <main> runs full-bleed, via a river-only baseof; the nav/footer stay in .container like every other page.
  • CSS scoped to .river-page and kept in the river baseof, so it loads only on this page and never touches the shared freenet.css.
  • Copy adapted heavily from the River README — the "no servers" pitch, the two-shapes explainer, the "why not Matrix/Discord/Signal?" comparison, the feature list, and the privacy model are all lifted from README language rather than invented.
  • CTAs point to /quickstart/ (install + live invite button) rather than embedding the invite button, since getting an invite only works after Freenet is installed.

Also repoints the Apps > River nav entry and the /apps catalog card at /river/ (with an /apps/river/ alias for safety).

Testing

  • hugo --gc --minify builds clean (117 pages, no errors/warnings).
  • Rendered and screenshotted the real built page in light + dark (via prefers-color-scheme) and desktop + mobile; nav, full-bleed bands, dark-screenshot swap, responsive stacking, and the institutional footer all verified.

Notes for review

  • This is a draft pending Ian's sign-off on direction and copy. Content/tone is a design call; happy to adjust the headline ("no servers" vs the README's "no backend"), section order, or which features are surfaced.
  • A Fable-5 review of style/layout/content is being run separately and its findings will be posted here.
  • Follow-up (separate change): update the River repo README.md to focus on the developer/code audience and point users to this new landing page.

🤖 Generated with Claude Code

https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6

[AI-assisted - Claude]

sanity and others added 2 commits July 3, 2026 12:07
Adds a product landing page for River at freenet.org/river, replacing the
GitHub repo / apps-page anchor as River's front door.

- New top-level /river section (content + a river-only full-bleed baseof +
  list layout), matching the existing /ghostkey precedent of giving a flagship
  app its own top-level page rather than nesting it under /apps.
- Keeps the standard Freenet nav and institutional footer; only <main> runs
  full-bleed. All River CSS is scoped to .river-page and lives in the river
  baseof, so it loads only on this page and never touches the shared stylesheet.
- Content adapted heavily from the River README (the "no servers" pitch, the
  two-shapes explainer, "why not Matrix/Discord/Signal", the feature list, the
  privacy model), structured on the Signal/Session landing-page pattern with a
  River-specific "get an invite, nothing to download" flow.
- Repoints the Apps > River nav entry and the /apps catalog card at /river/.
- Verified light/dark and desktop/mobile; hugo build is clean.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
Feature the River wordmark (dolphin mark + "River") prominently in the hero,
and apply the design/copy review findings:

- Honesty: retitle the join section to "You install Freenet, not River" (the
  old "There's nothing to download" contradicted step 1) and add the README's
  "install once, any number of apps run on it" framing; qualify all encryption
  claims to private rooms (drop the unqualified hero E2E tick); add the README's
  metadata caveat to the privacy section; add an alpha-status line by the CTA;
  retitle features to "The essentials, working today"; fix "public rooms anyone
  can read" (were "join") and the garbled River comparison row.
- CSS: fix .rv-head max-width (was 44ch measured in body ch, mangling desktop
  headings into ragged stacks); collapse to a single blue accent with green
  reserved for invite buttons only, darkened to meet AA in both themes; flat
  headline instead of gradient text; flat inline step numbers instead of
  floating gradient badges; bare pillar icons instead of pastel tiles; lighter,
  flatter shadows; visible browser-chrome dots and dark-mode crossed chips.
- Point the final "River on GitHub" button at the repo (was the Freenet manual);
  give the explainer a real <h2> ("Wait, no servers?"); add og/twitter card meta.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
@sanity

sanity commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

Fable-5 design/copy review + fixes applied (commit c5e8ec1)

Ran a Fable-5 review of the built page (style, layout, content, README fidelity), told to be brutal. It found real ship-blockers; all are now addressed. Summary of findings and what changed:

Ship-blockers (fixed)

  1. "There's nothing to download" was false — it sat right above "Install Freenet". Retitled the section "You install Freenet, not River" and imported the README's stronger framing ("install Freenet once, any number of apps run on top of it"). The install is now the pitch, not a bait-and-switch.
  2. Unqualified encryption claims — the hero said "Encrypted group rooms" + an "End-to-end encrypted" tick, but only private rooms are E2E (public rooms are readable). Dropped the hero E2E tick, and all encryption copy now says "private rooms". Also fixed the feature line "public rooms anyone can read" (was "join").
  3. Dropped the README's honesty — added the metadata caveat ("private rooms hide content, not shape; peers can see a room exists and roughly how active it is; if you need to hide that too, River alone isn't enough yet") to the privacy section, and an alpha-status line by the CTA. Retitled features to "The essentials, working today" so it doesn't promise Signal-grade completeness.
  4. CSS bug.rv-head{max-width:44ch} was measured against body-size ch (~390px) and mangled five desktop headings into ragged 2-3 line stacks. Removed; sub-copy alone is width-limited now.
  5. Accent collision + button contrast — green text on white on a blue box, and green buttons failed AA in both modes. Collapsed to a single blue accent; green is now used only on invite buttons, darkened (deep green + white text in light, bright green + dark text in dark) to meet AA.

Also fixed

  • Garbled River comparison row ("hosted by Freenet itself" now parses); reframed the comparison heading ("Everyone else runs a server, or keeps you online") since the old "they all keep a server" was contradicted by its own Briar/Tox "serverless" row.
  • Flat headline color instead of gradient text; flat inline step numbers instead of floating gradient badges; bare pillar icons instead of pastel tiles; lighter/flatter shadows (closer to the rest of freenet.org).
  • Final "River on GitHub" button points at the repo (was the Freenet developer manual); the explainer got a real <h2> ("Wait, no servers?"); added og/twitter card meta.
  • Cut the "not a paywall" aside and the mid-funnel riverctl interruption.

Not changed (noted)

  • Hero screenshot is dense — Fable suggested cropping to a zoomed message cluster. Left as the authentic full-app shot for now; cropping is a judgment call and easy to do as a follow-up if preferred.

Verified light/dark + desktop/mobile after the changes; hugo --gc --minify builds clean.

[AI-assisted - Claude]

sanity and others added 5 commits July 3, 2026 12:38
"Get an invite" implied a gatekept/cumbersome process and conflated starting
River with joining one specific room. The invite is only for the Freenet
Official room, not for River itself, and once Freenet is installed joining is a
couple of clicks. Product-level CTAs now say "Try River"; the invite wording is
kept only in the join-flow step, where it correctly refers to a room. Renamed
the now-misnamed .rv-btn-invite class to .rv-btn-primary.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
Freenet has no convenient mobile install path today, and the try.freenet.org
proxy isn't primetime, so "Desktop & mobile / runs in the browser on both"
overstated reality. Replaced that feature with a true, stronger one from the
README: rooms stay live on the network even when their creator is offline. The
page no longer claims mobile support or points at the proxy.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
"Runs in your browser" could read as "nothing to install", but River needs
Freenet installed first (quick and easy, but a real step). Replaced the tick
with "Quick, easy install" so the one-time Freenet install is stated upfront as
a positive rather than implied away, and bumped "Open source" to "Free and open
source". The browser-based nature is still covered by the "You install Freenet,
not River" section and the join steps.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
Server-based chat apps all keep rooms alive when the creator is offline (the
server holds them), so persistence isn't a River differentiator. Reworked the
comparison's River row to make the real distinction: the *network* keeps the
room, with no company server and no homeserver, mirroring the Briar/Tox row's
"no shared room the network keeps for you". Removed the matching "Always-on
rooms" feature; the features list is now five concrete capabilities and the
differentiators live in the pillars.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
Swaps the hero headline from "Group chat with no servers" to "Group chat with
no company in the middle" -- leading with the human differentiator (no operator
to trust, mine, or shut your room down) rather than the technical one. Borrows
the strongest line from an alternative mockup while dropping its inaccurate
"privacy of Signal" / phone-mockup framing. "No servers" remains in the
supporting copy, which explains the how.

[AI-assisted - Claude]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YRnnQnrtAVHdKzHKT8JrQ6
@sanity sanity marked this pull request as ready for review July 3, 2026 20:37
@sanity sanity merged commit 1d22d37 into main Jul 3, 2026
3 checks passed
@sanity sanity deleted the feat/river-landing-page branch July 3, 2026 20:37
sanity added a commit that referenced this pull request Jul 3, 2026
…#63)

Install-Freenet-&-Join-River CTA, a 'Where River is today' alpha/telemetry box, Signal credited in the comparison, plain-language invitation-tree copy, title-tag fix, and homepage River links. Follow-up to #62. Reviewed: external human review + Fable-5 pass. [AI-assisted - Claude]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant