feat(river): dedicated /river landing page#62
Merged
Conversation
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
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)
Also fixed
Not changed (noted)
Verified light/dark + desktop/mobile after the changes; [AI-assisted - Claude] |
"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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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):
/river, not/apps/river— matches the existing/ghostkeyprecedent of giving a flagship app its own top-level page, keeps a short shareable URL, and avoids restructuring the/appscatalog.<main>runs full-bleed, via a river-onlybaseof; the nav/footer stay in.containerlike every other page..river-pageand kept in the riverbaseof, so it loads only on this page and never touches the sharedfreenet.css./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 > Rivernav entry and the/appscatalog card at/river/(with an/apps/river/alias for safety).Testing
hugo --gc --minifybuilds clean (117 pages, no errors/warnings).prefers-color-scheme) and desktop + mobile; nav, full-bleed bands, dark-screenshot swap, responsive stacking, and the institutional footer all verified.Notes for review
README.mdto 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]