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
4 changes: 4 additions & 0 deletions .changeset/website-hero-animation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

chore(website): add Framefields hero animation source for the website landing page
4 changes: 3 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ Dockerfile
*.md
.nostr
postgresql.conf
test/integration/docker-compose.yml
test/integration/docker-compose.yml
# website tooling (not part of the relay image)
website
2 changes: 1 addition & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
},
"overrides": [
{
"includes": ["migrations/**", "src/clean-db.ts", "src/import-events.ts", "src/scripts/**", "test/**"],
"includes": ["migrations/**", "src/clean-db.ts", "src/import-events.ts", "src/scripts/**", "test/**", "website/**"],
"linter": {
"rules": {
"suspicious": {
Expand Down
5 changes: 5 additions & 0 deletions website/hero-animation/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules/
output/
.framefields/
assets/fonts/*.ttf
assets/gen/
1 change: 1 addition & 0 deletions website/hero-animation/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
51 changes: 51 additions & 0 deletions website/hero-animation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# nostream hero animation (Framefields)

Landing-page hero for the upcoming nostream website: **34 s** at 1920×1080, built with [Framefields](https://github.com/gatewai-dev/framefields) and styled after [omp.sh](https://omp.sh/) (near-black with a dot grid, graded white → gray → pink headlines, teal mono labels, numbered stack rail, terminal strips and a particle planet).

1. **Hero**: "Your relay. Your rules. Nostr, wired in.", `$ nostream start`, key stats
2. **What is nostream**: Nostr (protocol) → Relays (servers) → nostream (the relay you own)
3. **How it works**: Nostr clients → nostream core (verify, limits, admission, NIP-11) → PostgreSQL + Redis, with Lightning payments and Docker/Tor deploy. Real `EVENT` / `REQ` / `EOSE` messages, pulses for events in, stored and fanned out, and a stored-event counter
4. **Why nostream**: supported NIPs (counted from the root `package.json`), paid admission, rate limits, import/export, Tor & I2P, admin console
5. **Deploy**: typed `nostream start` with boot output and a "built with" logo row

Logos are official marks: [simple-icons](https://simpleicons.org/) (CC0) for PostgreSQL, Redis, Docker, TypeScript, Node.js, Bitcoin, Lightning, Tor and GitHub, and the [Nostr logo](https://github.com/mbarulli/nostr-logo) (CC0).

This folder is a standalone package; it is not part of the relay build or Docker image.

## Requirements

- **Node.js ≥ 22.20** (Framefields + WebCodecs)
- **WebGPU** (browser preview, or a GPU for headless MP4 export, e.g. Apple Silicon)

```bash
cd website/hero-animation
nvm use # reads .nvmrc → 22
pnpm install
pnpm run setup # fonts → assets/fonts/, brand logos + planet → assets/gen/
```

## Preview

```bash
pnpm run preview
```

## Export MP4

```bash
pnpm run render # → output/nostream-hero.mp4 (very high bitrate, ~45 MB)
pnpm run render:small # → output/nostream-hero-low.mp4 (~4 MB, for sharing / PR previews)
```

## Sample frames

```bash
pnpm run frames
# → output/frames/f0130.png …
```

## Edit the story

- Timeline & layout: `src/film.ts` (scene windows `HERO`, `WHAT`, `FLOW`, `FEATURES`, `DEPLOY`)
- Palette & fonts: `src/theme.ts`
- Logos / planet / grid: `src/build-assets.ts` (source SVGs in `assets/icons-raw/`, Nostr PNG in `assets/logos/`)
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/bitcoin.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/docker.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/github.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/lightning.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/nodedotjs.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/postgresql.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/redis.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/torproject.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions website/hero-animation/assets/icons-raw/typescript.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added website/hero-animation/assets/logos/nostr.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions website/hero-animation/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "nostream-hero-animation",
"version": "1.0.0",
"private": true,
"type": "module",
"description": "Framefields hero animation explaining nostream for the website landing page",
"packageManager": "pnpm@10.33.0",
"scripts": {
"fonts": "tsx src/fetch-fonts.ts",
"assets": "tsx src/build-assets.ts",
"setup": "tsx src/fetch-fonts.ts && tsx src/build-assets.ts",
"preview": "tsx src/render.ts preview --open",
"render": "tsx src/render.ts video",
"render:small": "tsx src/render.ts video low",
"frames": "tsx src/render.ts frames 130 300 500 620 800 1010",
"typecheck": "tsc -p ."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 CI skips the animation package

The new typecheck command is not run by CI. Existing checks install only the root package, and later changes under website/** do not trigger the build job. Future animation changes can pass CI even when the package no longer compiles.

As a non-blocking follow-up, add a separate job that installs this package with its lockfile and runs pnpm run typecheck when these files change. This catches broken imports and API changes without requiring a GPU.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

},
"engines": {
"node": ">=22.20"
},
"dependencies": {
"framefields": "^2.0.8"
},
"devDependencies": {
"@types/node": "^24.1.0",
"sharp": "^0.35.5",
"tsx": "^4.20.3",
"typescript": "^5.8.3"
},
"pnpm": {
"onlyBuiltDependencies": [
"esbuild",
"node-av",
"sharp",
"skia-canvas",
"webgpu"
]
}
}
Loading
Loading