The overby.me website, in Rust and Dioxus with WebGL screensavers
Rust 51%
47%
GLSL 1%
Assembly <1%
C <1%
Nushell <1%
Just <1%
Nix <1%
CSS <1%

README.md

Homepage #

Part of the overby.me monorepo, where this lives in apps/homepage and where all development happens.

It is also published on its own, as tangled.org/overby.me/homepage and github.com/overby-me/homepage. Both are read-only mirrors, rebuilt from the monorepo with josh: a commit made to either is overwritten by the next sync, so please open issues and pull requests on the monorepo.

Personal homepage for overby.me — an interactive 3D graph visualization that maps out online presence, interests, and connections.

Overview #

The landing page renders a 3D force-directed graph where nodes represent profiles, platforms, and life categories (Commerce, Improve, Connect, Immerse, Give). Clicking a node navigates to the corresponding URL; nodes can be dragged, and the camera orbits and zooms.

The graph is a Rust/WebAssembly rewrite of the original React version: it draws directly to WebGL and runs a faithful port of d3-force-3d (the force model react-force-graph-3d uses) for the layout.

Additional routes:

  • /screensaver — Picks one of the XScreenSaver ports at random and redirects to it
  • /screensaver/<name> — Runs that screensaver, with its options behind a button (see xscreensaver/)
  • /screensaver/<name>?images=@handle — Savers that work on a picture take it from that account's posts; ?images=%23tag takes them live off the firehose
  • /cardioid — An epicyclic curve tracer
  • /search — Redirects search queries to Startpage
  • /x — Redirects X/Twitter links through xcancel.com
  • /yt — Embeds YouTube videos in a clean full-screen player

Tech Stack #

  • Dioxus (Rust) compiled to WebAssembly
  • WebGL via web-sys for the custom 3D renderer, with glam for math
  • Self-hosted Space Grotesk for the graph labels
  • Dioxus Router for client-side routing
  • Nix for reproducible dev environments
  • Just as a command runner, driving the Dioxus CLI (dx)

Getting Started #

Prerequisites #

The Nix dev shell provides the full toolchain (dx, a Rust toolchain with the wasm32-unknown-unknown target, wasm-bindgen-cli, and binaryen):

nix develop .#homepage

Development #

just dev

Build #

just build

The static site is written to target/dx/homepage/release/web/public.

The release build gives each screensaver its own wasm chunk, so opening one downloads only that one. See xscreensaver/README.md for how that is wired and what it measures.

Test #

just test

Runs the screensaver ports headlessly: every saver renders frames at several window sizes and option values with no browser involved.

Clean #

just clean

License #

Licensed under AGPL-3.0.