Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/peering-launch-film.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"nostream": patch
"nostream-website": patch
---

feat(website): add the relay peering launch film and home-page section
18 changes: 18 additions & 0 deletions website/hero-animation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,23 @@ pnpm run render:release:small # → output/release/nostream-3.4.0-low.mp4 (~2.3
pnpm run frames:release # → output/release/frames/f0060.png … (one still per scene + the end card)
```

## Peering launch film

A 40 s cut for relay peering ([#942](https://github.com/cameri/nostream/issues/942)), in the same dialect as the 3.3.0 release film: **1200 frames** at 1920×1080, composed in `src/peering-film.ts` and rendered by `src/peering-render.ts`. Scene copy and claim traceability live in [`docs/peering-film-copy.md`](docs/peering-film-copy.md) — draft that before changing on-screen text.

1. **People** (frames 0–240): run a relay for your people, not the whole network — peers for its scope, fetches on demand.
2. **Worth** (240–520): your archive is worth something now; sell feeds in sats; flat per-period terms, never per event.
3. **Fast** (520–760): cache peers and an operator-configured window (e.g. the last hour); hot feed near readers.
4. **Middle** (760–980): relays that only talk to relays — archive/cache infrastructure, edges facing users.
5. **Close** (980–1200): today every relay tries to be everything → one thing well; the network assembles the rest.

```bash
pnpm run render:peering # → output/peering/nostream-peering.mp4
pnpm run render:peering:small # → output/peering/nostream-peering-low.mp4
pnpm run frames:peering # → output/peering/frames/f0150.png … (one still per scene + the end card)
cd ../site && pnpm run media # → public/media/peering.mp4, peering-poster.webp (home #peering)
```

## Admin console film

**35 s** at 1920×1080. Opens on “Operator Console”, then each feature is a short explanation on the landing-hero backdrop (dot grid, planet, sparkle halo) followed by that screenshot full frame: metrics, settings, NIP-66, notifications.
Expand All @@ -92,6 +109,7 @@ After changing the admin film, run `pnpm run media` in `website/site` to re-enco

- Timeline & layout: `src/film.ts` (scene windows `HERO`, `WHAT`, `FLOW`, `FEATURES`, `DEPLOY`)
- Release film: `src/release-film.ts` (scene windows `PROBLEM`, `WAIT`, `DOCS`, `CLOSE`), rendered by `src/release-render.ts`
- Peering film: `src/peering-film.ts` (scene windows `PEOPLE`, `WORTH`, `FAST`, `MIDDLE`, `CLOSE`), rendered by `src/peering-render.ts`
- Admin film: `src/admin-film.ts`, rendered by `src/admin-render.ts`
- Palette & fonts: `src/theme.ts`
- Logos / planet / grid: `src/build-assets.ts` (source SVGs in `assets/icons-raw/`, Nostr PNG in `assets/logos/`)
Expand Down
109 changes: 109 additions & 0 deletions website/hero-animation/docs/peering-film-copy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Relay peering launch film — scene copy

Source: [nostream#942](https://github.com/cameri/nostream/issues/942). Composition: `src/peering-film.ts`.
40 s · 1920×1080 · 30 fps · 1200 frames. One job per scene; jobs-to-be-done only (no protocol tutorial).

**Approval:** Draft for maintainer review before the peering release ships on the site.

## Factual guardrails (#931, #932–#940)

| Claim on screen | Spec / issue |
|---|---|
| **Flat or traffic-based** fees for a **period** the operator sets | #931 paid peering terms (`amount`, `unit`, `period` in NIP-11) |
| **Never per event** | #931 out of scope: no per-event payments |
| **Lightning**, **sats**, **between relays** | #931 / #937 settlement between peer relays |
| **Cache window** operator-configured; “the last hour” is an **example** | #931 cache peers + rolling-window scope in NIP-11 |
| **Ask an archive** outside the window | #931 cache miss must not imply “event does not exist” |
| **Sell feeds** to other relays | #931 archive/backbone peers; paid terms |
| No operator names, adoption stats, or network metrics | #942 production notes |

---

## Scene 1 · PEOPLE (frames 0–240)

**Beat:** Run a relay for your people, not the whole network.

| Element | Copy |
|---|---|
| Kicker | `01 — YOUR PEOPLE` |
| Headline | Run a relay for your people. |
| Accent | Not the whole network. |
| Card 1 | **SCOPE** · Your people · the people you follow |
| Card 2 | **PEERING** · Their relays · the ones your people use |
| Card 3 | **FETCHES** · The rest · on demand |
| Payoff | Feel complete without ingesting everything. |

**Issue gloss:** Community relay peers for its scope and fetches the rest on demand.

---

## Scene 2 · WORTH (frames 240–520)

**Beat:** Your archive is worth something now.

| Element | Copy |
|---|---|
| Kicker | `02 — YOUR ARCHIVE` |
| Headline | Your archive / is worth something now. |
| Sub | Sell feeds to other relays — settled in sats. |
| Panel | PEERING TERMS · **PER PERIOD** chip |
| Terms | fee: flat or traffic-based — you set the terms · period: you set the length · settlement: Lightning, in sats, between relays · per event: **never** |
| Payoff | A product, not a cost center. |

**Issue gloss:** Deep history can be sold to other relays; completeness becomes a product.

---

## Scene 3 · FAST (frames 520–760)

**Beat:** Fast, everywhere.

| Element | Copy |
|---|---|
| Kicker | `03 — HOT FEED` |
| Headline | Fast, everywhere. |
| Sub | The hot feed, near the readers. |
| Track | OLDER THAN THE WINDOW · THE HOT FEED |
| Note A | BEFORE THIS CUT · Ask an archive. · outside the window |
| Note B | CACHE PEERS · A rolling window · the last hour, or whatever you configure |
| Payoff | Small relays feel instant — without owning the firehose. |

**Issue gloss:** Cache peers holding only the last hour put hot feed near readers.

---

## Scene 4 · MIDDLE (frames 760–980)

**Beat:** Relays that only talk to relays.

| Element | Copy |
|---|---|
| Kicker | `04 — THE MIDDLE` |
| Headline | Relays that only talk to relays. |
| Accent | The network can grow a middle. |
| Archive | Deep history · backbone infrastructure |
| Cache | Rolling window · hot feed near readers |
| Edge | **EDGE** · Readers connect · the relay readers connect to |
| Payoff | Infrastructure behind. Users in front. |

**Issue gloss:** Archives and caches as infrastructure; edge relays facing readers.

---

## Scene 5 · CLOSE (frames 980–1200)

**Beat:** Inversion — one thing well; the network assembles the rest.

| Element | Copy |
|---|---|
| Contrast | Today, every relay tries to be everything. |
| Headline | Each relay gets to be one thing well. |
| Accent | The network assembles the rest. |
| Lockup | [nostream mark] nostream relay peering |

---

## Site

After render: `pnpm run media` in `website/site` → `public/media/peering.mp4`, `peering-poster.webp`.
Home section: `#peering` (`Peering.astro`).
3 changes: 3 additions & 0 deletions website/hero-animation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
"render:release": "tsx src/release-render.ts video very_high",
"render:release:small": "tsx src/release-render.ts video low",
"frames:release": "tsx src/release-render.ts frames 60 300 650 1000 1199",
"render:peering": "tsx src/peering-render.ts video very_high",
"render:peering:small": "tsx src/peering-render.ts video low",
"frames:peering": "tsx src/peering-render.ts frames 150 470 680 940 1100 1199",
"preview:admin": "tsx src/admin-render.ts preview --open",
"render:admin": "tsx src/admin-render.ts video very_high",
"render:admin:small": "tsx src/admin-render.ts video low",
Expand Down
Loading
Loading