feat: (You)r* hero branding, MI bar in landing headers, Try Demo repositioned

- Add (You)rModuleName tagline to all 22 module hero subtexts
- Move Try Demo button next to rApp dropdown in landing page header
- Add <rstack-mi> bar to landing page header center
- Create rNetwork landing page (was missing)
- Wire rNetwork landingPage into mod.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-27 15:45:57 -08:00
parent ed675d286d
commit bc5c9e608e
24 changed files with 145 additions and 3 deletions

View File

@ -14,6 +14,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Upload, share, and read PDFs together. A beautiful flipbook reader,
searchable catalog, and community contributions &mdash; all self-hosted.
(You)rBooks, your library.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">Start Your Library</a>

View File

@ -10,6 +10,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
A spatiotemporal calendar that couples where and when, supports natural cycles,
and zooms from 30-second moments to geological epochs.
(You)rCal, your rhythm.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rcal" class="rl-cta-primary" id="ml-primary">Try the Demo</a>

View File

@ -10,6 +10,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
A shared shopping cart for communities. Pool orders, unlock bulk pricing,
and fulfill locally through the cosmolocal provider network.
(You)rCart, your market.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rcart" class="rl-cta-primary" id="ml-primary">Browse the Shop</a>

View File

@ -15,6 +15,7 @@ export function renderLanding(): string {
Quadratic voting, ranked choice, and multi-criteria scoring &mdash; all as
interactive shapes on your canvas. Drop a choice, let members vote,
watch results emerge in real time.
(You)rChoices, your voice.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">Make Better Decisions</a>

View File

@ -15,6 +15,7 @@ export function renderLanding(): string {
See how your community engages without tracking individuals.
No cookies, no consent banners, no third-party data &mdash; just
clean, real-time metrics from your own server.
(You)rData, your signal.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">View Analytics</a>

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Upload, organize, and share with public links and memory cards.
Built for communities who want control over their shared files.
(You)rFiles, your way.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rfiles" class="rl-cta-primary" id="ml-primary">Start Sharing</a>

View File

@ -12,6 +12,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Automated cloud provisioning for self-hosted Discourse.
No DevOps required. Choose your region, configure your settings, and go live.
(You)rForum, your community.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rforum" class="rl-cta-primary" id="ml-primary"

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Budget flows, river visualization, and conviction funding.
Watch resources move through your community in real time.
(You)rFunds, your flow.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rfunds" class="rl-cta-primary" id="ml-primary">See Your Funds Flow</a>

View File

@ -12,6 +12,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
A shared email client where teams read, discuss, and approve messages
together &mdash; with cryptographic multi-signature workflows before anything gets sent.
(You)rInbox, your team's voice.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rinbox" class="rl-cta-primary" id="ml-primary"

View File

@ -12,6 +12,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Share live locations, navigate indoor and outdoor spaces, coordinate meetups
&mdash; all from the browser. No app install. No tracking. No data collection.
(You)rMaps, your world to explore.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rmaps" class="rl-cta-primary" id="ml-primary"

117
modules/network/landing.ts Normal file
View File

@ -0,0 +1,117 @@
/**
* rNetwork rich landing page body.
* Returned by landingPage() in the module export;
* the shell wraps it with header, CSS, and analytics.
*/
export function renderLanding(): string {
const demo = "https://demo.rspace.online/rnetwork";
return `
<!-- Hero -->
<section class="rl-hero">
<span class="rl-tagline">rNetwork</span>
<h1 class="rl-heading">See the web of trust</h1>
<p class="rl-subtext">
Map the relationships that matter. (You)rNetwork makes the invisible
connections visible &mdash; people, companies, and opportunities rendered
as a living, interactive graph.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">Explore Your Network</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div>
</section>
<!-- How It Works -->
<section class="rl-section">
<div class="rl-container">
<h2 class="rl-heading" style="text-align:center">How It Works</h2>
<div class="rl-grid-3">
<div class="rl-step">
<div class="rl-step__num">1</div>
<h3>Connect CRM Data</h3>
<p>Link your Twenty CRM instance via GraphQL. People, companies, and opportunities sync automatically.</p>
</div>
<div class="rl-step">
<div class="rl-step__num">2</div>
<h3>Visualize the Graph</h3>
<p>Entities become nodes and relationships become edges in a force-directed layout you can explore in real time.</p>
</div>
<div class="rl-step">
<div class="rl-step__num">3</div>
<h3>Explore Relationships</h3>
<p>Click, drag, and zoom to discover hidden connections. Filter by entity type, search by name, and trace paths of trust.</p>
</div>
</div>
</div>
</section>
<!-- Features -->
<section class="rl-section rl-section--alt">
<div class="rl-container">
<h2 class="rl-heading" style="text-align:center">Features</h2>
<div class="rl-grid-4">
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#128752;</div>
<h3>Force-Directed Layout</h3>
<p>Interactive graph with physics simulation. Nodes attract and repel naturally, revealing organic clusters.</p>
</div>
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#128260;</div>
<h3>CRM Sync</h3>
<p>Twenty CRM integration via GraphQL. People, companies, and opportunities stay up to date automatically.</p>
</div>
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#129528;</div>
<h3>Entity Types</h3>
<p>People, companies, and opportunities rendered as distinct nodes. Visual encoding makes each type instantly recognizable.</p>
</div>
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#128279;</div>
<h3>Trust Feeds</h3>
<p>Relationship data flows to other rSpace modules. The trust graph powers governance, funding, and collaboration views.</p>
</div>
</div>
</div>
</section>
<!-- Use Cases -->
<section class="rl-section">
<div class="rl-container">
<h2 class="rl-heading" style="text-align:center">Use Cases</h2>
<div class="rl-grid-3">
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#127760;</div>
<h3>Community Mapping</h3>
<p>See who knows whom across your ecosystem. Identify bridges, hubs, and isolated clusters at a glance.</p>
</div>
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#128200;</div>
<h3>Stakeholder Analysis</h3>
<p>Trace influence paths between people and organizations. Understand power dynamics before critical decisions.</p>
</div>
<div class="rl-card rl-card--center">
<div class="rl-icon-box">&#127919;</div>
<h3>Opportunity Tracking</h3>
<p>Visualize pipeline deals alongside the people and companies involved. Spot warm introductions and shared connections.</p>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="rl-section rl-section--alt">
<div class="rl-container" style="text-align:center">
<h2 class="rl-heading">Your Community, Connected</h2>
<p class="rl-subtext">
Stop guessing who knows whom. Start seeing the relationships that shape your community.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary">Explore Your Network</a>
<a href="/create-space" class="rl-cta-secondary">Create a Space</a>
</div>
</div>
</section>
<div class="rl-back"><a href="/">&larr; Back to rSpace</a></div>`;
}

View File

@ -10,6 +10,7 @@ import { Hono } from "hono";
import { renderShell } from "../../server/shell";
import { getModuleInfoList } from "../../shared/module";
import type { RSpaceModule } from "../../shared/module";
import { renderLanding } from "./landing";
const routes = new Hono();
@ -234,6 +235,7 @@ export const networkModule: RSpaceModule = {
icon: "\u{1F310}",
description: "Community relationship graph visualization with CRM sync",
routes,
landingPage: renderLanding,
standaloneDomain: "rnetwork.online",
feeds: [
{

View File

@ -12,6 +12,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Notes, clips, voice recordings, and live transcription &mdash; all in one place.
Speak and watch your words appear in real time, or drop in audio and video files to transcribe offline.
(You)rNotes, your thoughts unbound.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rnotes" class="rl-cta-primary" id="ml-primary"

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Share memories with your community, powered by Immich.
Self-hosted, AI-organized, and privacy-first.
(You)rPhotos, your moments.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rphotos" class="rl-cta-primary" id="ml-primary">Browse Gallery</a>

View File

@ -10,6 +10,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Drop in a markdown document, pick a pocket format, and get a print-ready PDF in seconds.
Group up with other authors to unlock bulk pricing through collaborative print runs.
(You)rPubs, your press.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rpubs" class="rl-cta-primary" id="ml-primary">Try the Press</a>

View File

@ -15,6 +15,7 @@ export function renderLanding(): string {
Schedule, publish, and analyze across every major platform &mdash; all
from your self-hosted rSpace instance. No per-seat pricing, no
third-party data mining.
(You)rSocials, your narrative.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">Try Demo</a>

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
View, share, and gate 3D scenes captured with Gaussian splatting.
Three.js-powered viewing with optional x402 micropayment gating.
(You)rSplat, your dimension.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rsplat" class="rl-cta-primary" id="ml-primary">Explore Splats</a>

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Stickers, posters, and tees from your browser.
Upload a design, pick a product, and get print-ready files instantly.
(You)rSwag, your brand.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rswag" class="rl-cta-primary" id="ml-primary">Start Designing</a>

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
Describe your dream trip in plain language. We'll structure it into
itineraries, budgets, and bookings &mdash; then give you a collaborative
canvas to plan together in real-time.
(You)rTrips, your horizon.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rtrips" class="rl-cta-primary" id="ml-primary">Try Demo</a>

View File

@ -11,6 +11,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Host, stream, and share video without big tech.
Your community's video library with HLS streaming and RTMP ingest.
(You)rTube, your channel.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rtube" class="rl-cta-primary" id="ml-primary">Start Streaming</a>

View File

@ -10,6 +10,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Quadratic conviction voting with time-decay. Surface the ideas your community actually cares about &mdash;
not just the loudest voices.
(You)rVote, your voice.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rvote" class="rl-cta-primary" id="ml-primary">Try the Demo</a>

View File

@ -15,6 +15,7 @@ export function renderLanding(): string {
Visualize your Safe multisig across every chain &mdash; balances,
transactions, and governance &mdash; all in one client-side dashboard.
No backend database, no custody risk.
(You)rWallet, your treasury laid bare.
</p>
<div class="rl-cta-row">
<a href="${demo}" class="rl-cta-primary" id="ml-primary">View Your Treasury</a>

View File

@ -10,6 +10,7 @@ export function renderLanding(): string {
<p class="rl-subtext">
Kanban boards, team spaces, and real-time collaboration &mdash; built for groups
that share work, not just assign it.
(You)rWork, your flow.
</p>
<div class="rl-cta-row">
<a href="https://demo.rspace.online/rwork" class="rl-cta-primary" id="ml-primary">Try the Demo</a>

View File

@ -468,10 +468,12 @@ export function renderModuleLanding(opts: ModuleLandingOptions): string {
<header class="rstack-header" data-theme="${theme}">
<div class="rstack-header__left">
<rstack-app-switcher current="${escapeAttr(mod.id)}"></rstack-app-switcher>
</div>
<div class="rstack-header__center"></div>
<div class="rstack-header__right">
<a class="rstack-header__demo-btn" href="${demoUrl}">Try Demo</a>
</div>
<div class="rstack-header__center">
<rstack-mi></rstack-mi>
</div>
<div class="rstack-header__right">
<rstack-identity></rstack-identity>
</div>
</header>